- 浏览器(客户端)可以直接访问 WebContent中的文件,但是不能直接访问WEB—INF中的文件。
原因在于WEB—INF中的权限比较高,只能通过请求转发来访问。 - 跳转有两种方式(请求转发和重定向)。请求转发可以访问,重定向不能进行访问。
- 统一字符集编码:
a.编码分类:
设置jsp文件的编码(jsp文件中的pageEncoding属性): jsp->java
设置浏览器读取jsp文件的编码(jsp文件中的content属性)
一般上述设置成一样的(utf-8)。
文本编码:
i.将整个eclipse 中的文件统一设置。
windows---->prerences—>jsp files—>encoding(改成UTF-8)。
ii.设置某个项目统一编码。
右击项目—>prerences—>resourse---->Text file encoding (改成UTF-8)。
iii.设置单独文件的。
右击文件—>propreties—>resourse—>other—>UTF-8
4 eclipse中的Tomcat和 文件中的Tomcat是独立的:在文件中修改Tomcat的端口号,用eclipse还要使用原来的端口号。
实际上eclipse将Tomcat复制了一份,放在名称为Server中了。
5 如何让eclipse和文件保持一致???
选中下方的Tomcat,双击。在Server Location中选择第二个托管模式。
第一次创建该实例之后,双击Tomcat,选择第二项,如果已经运行了,就不能进行修改了。
6 JSP的页面元素:HTML java代码 注释 指令。
脚本:Sceriptlet
<%
局部变量 java语句
%>
<%!
定义方法和全局变量
%>
<%=
相当于等于号
%>
7 一般而言,修改web.xml 配置文件 java 需要重新启动Tomcat服务器
但是如果修改JSP HTML css js 不需要重新启动Tomcat 服务器。
8 jsp 用out.println()和out.print()效果一样,都会有回车。
要想回车,必须加上+""
9 指令:page指令:
<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>
language :java 固定不变的,jsp页面使用的脚本语言。
import:导入的类。
pageEncoding:jsp文件自身的编码 jsp->java
contentType:l浏览器解析jsp的编码。
10 注释:
HTML注释:
java注释:// /* */
jsp注释:<%-- --%>
注意:HTML注释客户端可以通过浏览器查看源代码,看到。
11 JSP内置对象(自带的,不需要new 也能使用的对象)
9大内置对象:
out:输出对象
pageContext:
request:请求对象,存储“客户端向服务器发送的请求消息”
:String getParameter(String name):根据key ,返回value
: String[] getParameterValues(String name):根据key 返回多个值。
:void setCharacterEncoding(“编码格式utf-8”):设置请求编码。(Tomcat7以前默认是iso-8859-1 ,tomcat8以及以后默认utf-8)
:get RequestDispatcher("b.jsp").forward(request response):请求转发。
:getServerContext():获取该项目的ServerletContext对象。
实例:注册页面
用register.jsp 注册,用show.jsp 展示。
get与post提交方式:
get提交方式:method=“get”和地址栏 超链接 请求方式 默认都属于get提交方式。
例如:http://localhost:8080/Project/show.jsp?uname=123&upwd=123&uage=12&uhobbies=足球&uhobbies=篮球
post 与get 提交方式的区别?
i.get方式 在地址栏显示请求信息(但是地址栏能够容纳的信息量有限 4~5KB 如果请求数据量是大文件,会报错),post不会。
ii.文件上传必须用post。
response:
提供的方法:
void addCookie(Cookie cookie):服务器向客户端增加cookie对象。
void sendRedirect(String location ) throws IOException :页面跳转的另一种方式,重定向。
void setContextType(String type) :设置服务端响应编码(设置服务端的content属性)
实例登录功能:
请求转发与重定向的区别:
请求转发 重定向
地址栏是否改变 不变 改变
请求时的数据 保留 不保留
转发与重定向的实例:
转发:
张三(客户端) —> {窗口A(服务器)—>窗口B}
重定向:
张三(客户端)----->窗口A—>去找B---->回到客户端------>窗口B
session:
Cookie(客户端,不是内置对象):Cookie是由服务端产生的,发送给客户端保存。
本质:本地缓存:客户端(hello.mp4)---->服务端(hello.mp4):客户端向服务器发送请求访问服务器上的hello.mp4,
客户端先找到hello.mp4,将它封装到Cookie 中,发送给客户端。
作用:提高访问服务器的效率,但是安全性较差。
原因:如果账户密码存放在客户端,容易被盗取。
Cookie: key=value
javax.servlet.http.Cookie
public Cookie (String name,String value)
String getName();
String getValue();
void setMaxAge(int expiry);最大有效期(s)
服务器准备给客户端:
response.addCookie(Cookie cookie)
页面跳转(转发 重定向)
客户端获取Cookie:
request.getCookies();(必须获取全部的Cookie,然后再去遍历)。
通过F12可以发现除了自己设置的Cookie对象外,还有一个name为JSESSIONID的cookie对象。
Cookie 的经典案例:使用Cookie记住用户名 的功能。
:建议Cookie只保存英文和数字,否则需要编码和解码操作。
session:会话
浏览网站:开始浏览网站到关闭网站就是一次会话。
sessionID与JSESSIONID????
解释:客户端第一次访问服务器时,服务器的会创建一个session,session中自带一个sessionID
当服务器响应客户端的时候会创建一个JSESSIONID,并且将sessionID的值放在Cookie中,传递给客户端。
客户端中的JSESSIONID与服务器上的SESSIONID一一对应。
客户端第2/n次请求服务端的时候:服务器会先用客户端cookie中的JSESSIONID 去匹配服务器端的SESSIONID
如果匹配成功,说明此用户不是第一次访问,无需登录。session一般在用户登录的时候创建。
session的方法:
String getID():获取sessionID
boolean isNew():判断是否是新用户(第一次访问)
void invalidate():使session失效。
void setAttribute()
Object getAttribute()
void setMaxInactiveInterval(秒):设置最大有效,非活动时间。
int getMaxInactiveInterval():获取最大有效,非活动时间。
Session项目练习:如果登录不成功,返回login.jsp ,如果成功登录用Session记录用户的信息,
并且用welcome.jsp显示session中的用户信息。
cookie 与session的区别:
session cookie
保存的位置: 服务端 客户端
安全性 安全 不安全
保存的内容 Object String
config:配置对象
page:当前JSP页面对象(相当于java中的this)。
excepyion: 异常对象
application: 全局对象:
方法:String getContextPath() :获取虚拟路径
String getRealpath(“虚拟路径地址”):获取虚拟路径对应的绝对路径。
统一请求的编码:
get 如果出现乱码,解决:
1 . 统一每一个变量的编码:
name=new String (name.getBytes(“iso-8859-1”),“utf-8”);
2 . 修改server.xml文件,一次性的修改Tomcat get提交方式。
在server中找到端口号的地方:
加上URIEncoding="UTF-8"这句话。之后所有的get请求都是utf-8啦。
post方式??
在body开始加上:request.setCharacterEncoding(“utf-8”);这句话。
request 请求对象 同一次请求有效
session 会话对象 同一次会话有效
appliance 全局变量 全局有效(整个项目有效)
以上4个对象共有的方法:
Object getAttribute(String name) :根据属性名,或者属性值。
Void setAttribute(String name,Objext obj):设置属性值(新增 ,修改)。
setAttribute(“a”“b”);//如果a对象之前不存在,则新建一个a对象,如果已经存在,将a的值改成b
void removeAttribute(String name):根据属性名,删除对象 。
a.
pageContext :页面当前有效(页面跳转后无效)
b.
request 同一次请求有效,其他请求无效(请求转发后有效,重定向后无效)。
c.
session 同一次会话有效(无论怎么跳转,都有效,关闭或者切换浏览器后无效)
d:
application 全局变量,整个项目运行期间都有效。