JSP的指令
Page指令 常用的属性:
-
contentType:定义JSP的字符的编码和页面的响应的MIME类型
如果是需要按照中文HTML显示,则使用如下形式:
contentType="text/html;charset=UTF-8" -
errorPage和isErrorPage
errorPage用来指定当前页面出现异常或者错误的时候,跳转到哪一个页面进行处理
isErrorPage是在处理异常的页面中指定,当前页面为处理页面。 -
import
用来标明当前JSP页面中需要导入哪几个包中的类 -
language
用来定义要使用的脚本语言 -
pageEncoding
用来设置 JSP页面的字符集格式,默认值是ISO-8859-1
如果想要显示中文,则设置为UTF-8
contentType和pageEncoding都是用来设置编码的,二者的区别:
在JSP中,如果pageEncoding存在,那么JSP的编码将由pageEncoding决定
否则由contentType中的charset决定,如果二者都不存在,将为ISO-8859-1编码
错误页的设置,要满足以下的条件:
指定错误出现时跳转的页面,通过errorPage属性进行设置
错误处理页面必须有明确的标识,通过isErrorPage进行设置
注意:错误页面的跳转属于服务器的跳转
拓展:
服务器跳转和客户端跳转的区别:从最直观的角度进行区分
客户端跳转,URL地址栏会发生改变,服务器跳转,URL地址栏不发生改变。
include指令:分为静态包含和动态包含两种
注意:被包含的页面中尽可能的不要写多余的HTML标签和Body标签
-
静态包含语法
<%@ include file=“包含文件的路径”%> -
动态包含语法
传递参数的包含:
<jsp:include page=“要包含的文件的路径”>
<jsp:param name=“参数名称” value=“参数值”/>
</jsp:include>
不传递参数的包含:
<jsp:include page=“要包含的文件的路径”/> -
静态包含和动态包含的区别
静态包含属于先包含后处理
动态包含属于先处理再包含
forward指令:
注意:属于服务器跳转
接受传递的请求参数,可以使用request对象提供的方法
String str = request.getParameter(参数名);
当参数名不存在的时候,返回结果为null
-
跳转不传递参数
<jsp:forward page=“要跳转的页面的路径”/> -
跳转并传递参数
<jsp:forward page=“要跳转的页面的路径”>
<jsp:param name=“参数名称” value=“参数值”/>
</jsp:forward>
JSP的内置对象:
为了简化用户的开发,JSP给我们提供了9个内置对象
这些内置对象不需要我们程序员手动创建,都是由Web容器自动为我们进行实例化,我们直接使用即可。
JSP提供的9个内置对象:
-
pageContext:是javax.servlet.jsp.PageContext类的对象
代表着JSP的页面容器。 -
request:是javax.servlet.http.HttpServletRequest接口对象
代表用户的请求信息。 -
response:是javax.servlet.http.HttpServletResponse接口对象
代表服务器向客户端响应的信息。 -
session:是javax.servlet.http.HttpSession接口对象
代表每一个用户的信息。 -
application:是javax.servlet.ServletContext接口对象
代表所有的用户在服务器上的共享信息 -
config:是javax.servlet.ServletConfig接口对象
代表服务器的配置信息,通过此对象可以得到服务器的初始化参数 -
out:javax.servlet.jsp.JspWriter类的对象
代表页面的输出对象,提供的方法基本都是向页面进行输出的。 -
page:是javax.lang.Object对象,表示从页面中表示出来的一个Servlet实例
-
exception:java.lang.Throwable对象,表示JSP页面所发生的异常。
4种属性范围:
指的是一个内置的对象中保存的属性,可以在多少个页面当中进行保存并且继续使用。
- pageContext:只在一个页面中有效,进行跳转之后就无效
- request:只在一次请求中保存属性,服务器跳转之后有效,客户端跳转之后无效
- session:在一次会话中保存,无论任何跳转都有效,只要是关闭了浏览器,或者是会话超时,就无效
- application:在整个服务器上都有效,只要重启服务器就无效
JSP对于4种能够保存属性的对象,提供了统一的对属性的操作方法:
- public void setAttribute(String name,Object value);设置属性的名称以及属性的内容
- public Object getAttribute(String name);通过属性的名称获取属性的内容
- public void removeAttribute(String name);通过属性的名称删除属性
注意:关于request属性范围,为什么客户端跳转无效,服务器跳转有效
实际上客户端跳转是实现了两次请求以及两次响应,服务器跳转是一次请求一次响应
request对象常用的方法:
- setCharacterEncoding(String encode):用来设置请求对象的字符集格式。
- getParameter(String name):通过请求参数的名称获取请求参数的值,此方法的返回值是String类型的。
- getParameterValues(String name):通过请求参数的名称获取一组请求参数的值,返回值是String[ ]对象。
- getHeader(String name):通过头信息的名称获取头信息的值,返回值是String类型。
- getHeaderNames():此方法可以获取传递的所有的头信息的名称。
- getMethod():获取当前请求的提交方式。
- getRemoteAddr():获取请求的IP地址。
- getServletPath():获取请求的路径。
- getContextPath():获取请求的上下文路径。
response:作用:就是对客户端的请求进行回应,代表着HTTP的响应。
常用的方法:
- public void setHeader(String name,String value):设置响应的头信息。
- public void sendRedirect(“要跳转的路径”):用来设置页面的跳转。
使用此方法的跳转属于客户端的跳转。
< jsp:forward >和reponse.sendRedirect()使用哪个跳转更好?
< jsp:forward >:属于服务器的跳转,会立刻进行跳转。
reponse.sendRedirect():属于客户端的跳转,等页面加载完毕之后再进行跳转。
操作Cookie:
Cookie是浏览器所提供的一种技术,这种技术让服务器端的程序能够将一些只需要保存在客户端,或者在客户端进行处理的数据,放在本地计算机上,不需要通过网络的传输,因此提高了网页的处理的效率,而且也能减少服务器端的负载。但是由于Cookie是服务器端保存在客户端的信息,所以安全性较差。
Cookie类提供的常用方法:
- public Cookie(String name,String value):Cookie提供的构造方法,用来实例化Cookie对象,同时设置Cookie的名称以及对应的值。
- public String getName():获取Cookie的名称。
- public String getValue():获取Cookie中保存的值。
- public void setMaxAge(int m):设置Cookie的最大的保存时间,保存时间是以秒为单位的。
所有的Cookie都是由服务器设置到浏览器中的,
我们想要向浏览器中增加Cookie,
则必须使用response对象提供的方法:public void addCookie(Cookie cookie);
想要获取浏览器中存储的Cookie,
我们需要通过request对象提供的方法:public Cookie[ ] getCookies();
我们在获取Cookie的时候,会自动获取一个我们没有存储过的JSESSIONID,
JSESSIONID是服务器自动保存到浏览器中的,代表每一个会话唯一的标识。
session对象:代表一次会话
在实际开发中session对象的最主要的作用就是完成用户的登录、注销等常见的操作。
每一个session对象都代表不同的访问的用户。
session对象常用的方法:
- public String getID:取得session的ID
- pubilc long getCreationTime():取得session的创建时间
- public long getLastAccessedTime():取得session的最后一次的操作的时间
- public void invalidate():让session失效
- public boolean isNew():判断是否是新的session
- public Enumeration getAttributeNames():取得全部的属性的名称
application对象:代表着服务器对象或者说代表着服务器上下文
常用的方法:
- String getRealPath():得到虚拟目录对应的绝对路径
- public Enumeration getAttributeNames():取到所有属性名称
- public String getContextPath():取得当前的虚拟路径的名称