JSP概要总结

JSP
一、JSP的3个编译指令
page:该指令是针对当前页面的指令。
include:用于指定包含另一个页面。
taglib:用于定义和访问自定义标签。
语法:
<%@ 编译指令名 属性名="属性值"...%>
1、page
标签属性:
language:
声明当前JSP页面使用的脚本语言的种类,因为页面是JSP页面,该属性的值通常都是java,
该属性的默认值也是java,所以通常无须设置。
extends:
指定JSP页面编译所产生的Java类所继承的父类,或所实现的接口。
import:
用来导入包。默认导入的包有:java.lang.*/javax.servlet.*/javax.serv
let.jsp.*/javax.servlet.http.*。
session:
设定这个JSP页面是否需要HTTP Session。
buffer:
指定输出缓冲区的大小。输出缓冲区的JSP内部对象:out用于缓存JSP页面对客户浏览器的输
出,默认值为8kb,可以设置为none,也可以设置为其他的值,单位为Kb。
autoFlush:
当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为true时为正常输出;如果设
置为false,则会在buffer溢出时产生一个异常。
info:
设置该JSP程序的信息,也可以看做其说明,可以通过Servlet.getServletInfo()方
法获取该值。
errorPage:
指定错误处理页面。如果本页面产生了异常或者错误,而该JSP页面没有对应的处理代码,则会自
动调用该属性所指定的JSP页面。
isErrorPage:
设置本JSP页面是否为错误处理程序。
contentType:
用于设定生成网页的文件格式和编码字符集,即MIME类型和页面字符集类型,默认的MIME类型
是text/html;默认的字符集类型为ISO-8859-1。
pageEncoding:
指定生成网页的编码字符集。
...

2、include
编译指令语法:
<%@include file="relativeURLSpec"%>
如果被嵌入的文件经常需要改变,通常使用<jsp:include>(动态的include语句)
注意事项:
静态包含还会将被包含页面的编译指令也包含进来,如果两个页面的编译指令冲突,那么页面就会出错。

<jsp:include>
不会导入被include页面的编译指令,仅仅将被导入页面的body内容插入本页面。




二、JSP的7个动作指令
动作指令与编译指令不同,编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的动作。编译指令在将JSP
编译成Servlet时起作用;而处理指令通常可替换成JSP脚本,它只是JSP脚本的标准化写法。
jsp:forward:
jsp:param:
jsp:include:
jsp:plugin:
jsp:useBean:
jsp:setProperty:
jsp:getProperty:


三、JSP脚本中的9大内置对象
application
config
exception
out
page
pageContext
request
response
session
1、application
javax.servlet.ServletContext的实例,该实例代表JSP所属的Web应用本身,可用于JSP页面,或者在
Servlet之间交换信息。


2、config
javax.servlet.ServletConfig的实例,该实例代表该JSP的配置信息。事实上,JSP页面通常无须配置,也
就不存在配置信息。因此,该对象更多地在Servlet中有效。
3、exception
java.lang.Throwable的实例,该实例代表其他页面中异常和错误。只有当页面是错误处理页面,即编译指令page
的isErrorPage属性为true时,该对象才可以使用。
4、out
javax.servlet.jsp.JspWriter的实例,该实例代表JSP页面的输出流,用于输出内容,形成HTML页面。
5、page
代表该页面本身,通常没有太大用处。也就是Servlet中的this,其类型就是生成的Servlet类,能用page的地方就
可用this。


6、pageContext
javax.servlet.jsp.PageContext的实例,该对象代表该JSP页面上下文,使用该对象可以访问页面中的共享数
据。


7request
javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求参数都被封装在该
对象里。


8、response
javax.servlet.http.HttpServletResponse的实例,代表服务器对客户端的响应。通常很少使用该对象直接响
应,而是使用out对象,除非需要生成非字符响应。而response对象常用于重定向,常用的方法有getOutputStream()/
sendRedirect(java.lang.String location)等。
9、session
javax.servlet.http.HttpSession的实例,该对象代表一次会话。当客户端浏览器与站点建立连接时,会话开始;当
客户端关闭浏览器时,会话结束。


四、Servlet
配置Servlet有两种方式
a、在Servlet类中使用@WebServlet Annotation进行配置。
b、通过在web.xml文件中配置。
1、@WebServlet
可指定以下属性:
asyncSupported:指定该Servlet是否支持异步操作模式。
displayName:显示名
initParams:配置参数(@WebInitParam)
loadOnStartup:配置成load-on-startup的Servlet
name:Servlet的名称
urlPatterns/value:两属性的作用完全相同,都指定该Servlet处理的URL
2、web.xml文件:
<servlet.../>元素中添加<init-param.../>指定配置参数。

五、标签:tld
1、自定义
taglib下有如下三个子元素。
tlib-version:指定该标签库实现的版本,这是一个作为标识的内部版本号,对程序没有太大的作用。
short-name:该标签库的默认短名,该名称通常也没有太大的用处。
uri:这个属性非常重要,它指定该标签库的URI,相当于指定该标签库的唯一标识。
2、使用
在JSP页面中确定指定的标签需要两点:
a、标签库URI:确定使用哪个标签库。
b、标签名:确定使用哪个标签。
使用标签库分成以下两个步骤:
a、导入标签库:使用taglib编译指令导入标签库,就是将标签库和指定前缀关联起来。
<%@ taglib uri="" prefix=""%>
b、使用标签:在JSP页面中使用自定义标签。

六、Filter
Servlet的一种“加强版”,主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,
是个典型的处理链。使用Filter完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并
生成响应,最后Filter在对服务器响应进行后处理。
1、创建:
a、创建Filter处理类。
实现javax.servlet.Filter接口,有如下三个方法:
void init(FilterConfig config);
void destroy();
void doFilter(ServletRequest request,
 ServletResponse response,
 FilterChain chain);
实现过滤功能,该方法就是对每个请求及响应增加的额外处理。

b、web.xml文件中配置Filter。

七、Listener
当Web应用在Web容器中运行时,Web应用内部会不断发生各种事件:如Web应用被启动、Web应用被停止,
用户session开始、用户session结束、用户请求到达等,通常来说,这些Web事件对开发者是透明的。实际上,
Servlet API提供了大量监听器来监听Web应用的内部事件,从而允许当Web内部事件发生时回调事件监听器内
的方法。
使用:
a、定义Listener实现类。
b、通过Annotation或在web.xml文件中配置Listener。
1、常用的Web事件监听器接口:
ServletContextListener:
用户监听Web应用的启动和关闭;
ServletContextAttributeListener:
监听ServletContext范围(application)内属性的改变;
ServletRequestListener:
监听用户请求;
ServletRequestAttributeListener:
监听ServletRequest范围(request)内属性的改变;
HttpSessionListener:
监听用户session的开始和结束;
HttpSessionAttributeListener:
监听HttpSession范围(session)内属性的改变;



终极问题:
1、JSP、Servlet之间如何交换数据?
通过提供4个类似Map结构(application/session/request/page),并允许JSP/Servlet将数据放入这4个类似
Map的结构中,并允许从这4个Map结构中取出数据。区别在于其范围不同:
application:对于整个Web应用有效。
session:仅对一次会话有效。
request:仅对本次请求有效。
page:仅对当前页面有效,一旦JSP/Servlet将数据放入page中,该数据只可以被当前页面的JSP脚本、声明部分访问。

2、表单域生成请求参数?
并不是每个表单域都会生成请求参数的,而是由name属性的表单域才生成请求参数,关于表单域和请求参数的关系遵循如下4点:
a、每个有name属性的表单域对应一个请求参数。
b、如果有多个表单域有相同的name属性,则多个表单域只生成一个请求参数,只是该参数有多个值。
c、表单域的name属性指定请求参数名,value指定请求参数值。
d、如果某个表单域设置了disabled="disabled"属性,则该表单域不再生成请求参数。 


3、Cookie与session比较?
session会随浏览器的关闭而失效,但Cookie会一直放在客户端机器上,除非超出Cookie的生命期限。
增加Cookie是由response完成的。
void addCookie(Cookie cookie);
创建过程:
a、创建Cookie实例,Cookie的构造器为Cookie(String name,String value);
b、设置Cookie的生命期限,即该Cookie在多长时间内有效。
c、向客户端写Cookie。
示例:
String name = request.getParameter("name");
Cookie c = new Cookie("username",name);
c.setMaxAge(24*3600);
response.addCookie(c);

获取Cookie:
Cookie[] cookies = request.getCookies();
for(Cookie c:cookies){
if(c.getName().equals("username")){
out.println(c.getValue());
}
}
关于session还有一点需要指出,session机制通常用于保存客户端的状态信息,这些状态信息需要保存到Web
服务器的硬盘上,所以要求session里的属性值必须是可序列化的,否则将会引发不可序列化的异常。


4、Servlet和JSP的区别?
a、Servlet中没有内置对象,原来JSP中的内置对象都必须由程序显式创建。
b、对于静态的HTML标签,Servlet都必须使用页面输出流逐行输出


5、Servlet通过Annotation映射时注意事项?
1、不要在web.xml文件的根元素(<web-app.../>)中指定metadata-complete="true"。
2、不要在web.xml文件中配置该Servlet。


6、创建Servlet的时机?
两个:
用户请求之时;
应用启动之时(load-on-startup)


7、ServletConfig与ServletContext的区别?
a、获取配置参数的方法完全一样;
b、前者取得当前Servlet的配置参数,后者获取整个Web应用的配置参数。


8、Filter的用处及种类?
用处:
a、在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。
b、根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
c、在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
d、根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
种类:
a、用户授权的Filter:Filter负责检查用户请求,根据请求过滤用户非法请求。
b、日志Filter:详细记录某些特殊的用户请求。
c、负责解码的Filter:包括对非标准编码的请求解码。
d、能改变XML内容的XSLT Filter等。
e、Filter可负责拦截多个请求或响应;一个请求或响应也可被多个Filter拦截。


9、Filter中前处理与后处理的分界线?
doFilter()方法体中是否调用了chain.doFilter();执行该方法之前,即对用户请求进行预处理;执行
该方法之后,即对服务器响应进行后处理。同理,在处理权限时,如果需要检查权限,可以在Filter中根据用户请求的
HttpSession,判断用户权限是否足够。如果权限不够,直接调用重定向即可,无须调用chain.doFilter(
request,response);





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值