Servlet | JSP |
注解Annotation | jsp基础, |
Servlet&Filter&Listener,伪静态 | 自定义标签 |
文件上传与下载 | 配置jsp属性 |
动态注册,web模块支持 | 表达式语言EL |
异步处理 | 标签文件 |
Servlet:
1.配置注解Annotation:
@WebServlet: asyncSupported=true, urlPatterns:{},name,loadOnStartup=1,initParams:{@WebInitParam(name="",value="")}
@WebInitParam
@WebListener用于配置Listener
@WebFilter:asyncSupported,dispatcherTypes=[ASYNC|ERROR|FORWARD|INCLUDE|REQUEST],filterName,initParams,servletNames,urlPatterns/value
@MultipartConfig用于配置文件上传Servlet
JAAS安全控制配置:
@ServletSecurity
@HttpConstraint
@HttpMethodConstraint
2.Servlet:
Servlet一般用作控制器。
load-on-startup Servlet:
<load-on-startup>1</load-on-startup>
@WebServlet(loadOnStartup=1)
相关类HttpServlet,HttpSession,ServletContext,HttpServletRequest,HttpServletResponse,Cookie,ServletConfig.以及
相关的Listener监听器@WebListener
<servlet-param>,
<context-param>
<error-page><error-code>/<exception-type> <location>
<welcome-file-list>
3.Filter过滤器
@WebFilter
Filter不仅会过滤用户请求而且在Servlet或者javabean处理完成之后还会拦截过滤响应。
Filter用途常见分类:用户授权,日志,解码,拦截改变请求响应,图片等防盗链,设置字符编码等
相关类:Filter接口,FilterConfig,FilterChain,HttpServletRequestWrapper,HttpServletResponseWrapper
4.伪静态:
使用URLRewriteFilter开源库
5.文件上传与下载:
@MultipartConfig
相关类:HttpServletRequest,Part,java.util.UUID(用于产生随机ID)
表单属性:enctype="multipart/form-data"
处理时注意事项:
1.查看是否有Content-Type头,若有则存在文件域
2.查看文件名是否为空。
3.调用Part实例的write方法写入磁盘。
4.part实例getName方法返回的不是文件名,若想获取文件名需要通过part.getHeader("Content-Disposition")然后解析这个头来获取。
5.多个文件上传需要遍历Part集合。
或者使用apache commons-fileupload组件
文件下载:
1.设置Content-Type头值为application/x-msdownload或者application/octet-stream
2.添加Content-Disposition头值为attachment;filename=".. ."
3.防止跨站引用:检测refer头。
6.动态注册:
相关类:ServletContext,Servlet,Filter,Listener
通过ServletContext相关方法可动态注册Servlet,Filter,Listener并传递初始化参数。
7.Web模块支持:
一个JAR文件,META-INF目录下添加一个web-fragment.xml.描述和管理该模块的web部署。
8.Servlet或Filter的异步处理。
配置annotation或者web.xml支持async. @WebServlet(ayncSupported=true)
相关类:AsyncContext,AsyncListner,HttpServletRequest
通过request可以获取AsyncContext对象实例。然后通过AsyncContext对象的相关方法可以进行异步请求处理。通过AsyncListener实例可以进行监听相关事件。
编写步骤:
1.request.startAsync()获取AsyncContext实例
2.调用AsyncContext的setTimeout设置超时,ms为单位
可选调用addListener添加监听器。
3.调用AsyncContext实例的start(Runnable run)方法开始异步任务。
4.任务完成时在runnable中调用以下方法之一:asyncContext.complete();asyncContext.dispatch(...)
9.异常:
IOException,ServletException
JSP:
1.JSP注释:<%-- --%>; <!-- -->
JSP声明:<%! %>
JSP表达式<%= %>
JSP脚本<% %>
JSP编译指令:page , include, taglib
JSP动作指令:jsp:forward, jsp:param, jsp:include, jsp:useBean, jsp:setProperty, jsp:getProperty, jsp:plugin
2.jsp内置的对象:
pageContext,page, out,request,response,session,config,exception,application
指定错误页面error-page
<%@ page %>
3.自定义标签。
组成:标签处理类与*.tld文件。
相关类:SimpleTagSupport
开源标签库:apache JSTL taglibs.
maven使用apache JSTL:http://51zzcy.com/maven%e4%bd%bf%e7%94%a8jstl.html
JSTL标签库总结:http://51zzcy.com/jstl%e6%a0%87%e7%ad%be%e5%ba%93%e6%80%bb%e7%bb%93.html
<tag><name></><tag-class></><body-content>empty|scriptless|dynamic-attributes</><atrribute><name></><required></><fragment>true</></></>
重点:
带属性的标签:标签处理类设置private属性并设置setter与getter方法,配置tld文件中tag下的attribute标签。
带标签体的标签:标签处理类需要通过getJspBody().invoke(null)获取标签体,并进行tld中的相应配置(body-content)。
作为jspfragment的标签属性:通过标签处理类获取JspFragment对象(通过设置setFragment(JspFragment fragment))并调用其invoke方法获取引用
片段。使用<jsp:attribute name="">body</>。
动态属性的标签:标签处理类实现DynamicAttributes接口并配置tld文件中<dynamic-attributes>true</dynamic-attributes>
<%@ taglib uri="" prefix="" %>
4.web.xml配置JSP属性
<jsp-config><jsp-property-group><url-pattern></><el-ignore></><page-encoding></><scripting-invalid></><include-prelude></>
<include-coda></></></>
及其他配置元素
5.表达式语言EL:
用于JSP中简化数据的访问。
${expr}
支持逻辑和算术运算。
表达式内置对象:pageContext,pageScope,requestScope,sessionScope,applicationScope,
param,paramValues,header,headerValues,initParam,cookie
自定义函数:
1.定义一个普通java对象,并确保其中的方法为静态方法以便能够在EL中调用。
2.使用标签库tld文件定义函数<function>标签
3.在JSP中引入该tld库。
4.在EL中直接使用定义的函数。<function><name></name><function-class></function-class><function-signature></function-signature>
6.标签文件支持。
<%@ tag %>
简化对标签库的开发。tag file类似于JSP文件。可以使用全部的jsp功能除了page指令。
1.建立tag文件,命名规则:标签名.tag
2.预编译指令:tag,taglib,include,attribute(定义标签属性),variable(定义标签变量可传递给JSP页面使用)
3.存放位置WEB-INF/tags下
4.在JSP中引入<%@ taglib prefix="prefix" tagdir="/WEB-INF/tags" %>
5.内置对象:
request,response,session,application,config,out
6.引用标签体:<jsp:doBody>,<jsp:invoke fragment="123">结合<%@attribute name="123" fragment="true">
其他的:
配置JAAS,配置JNDI数据源