日期:2014-05-16  浏览次数:20384 次

Servlet&JSP的一些浅显的总结

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表达式<%=   %>