Servlet&JSP的一些浅显的总结

时间:2021-06-27 21:04:27

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数据源

常见问题总结

你也可以参考本人博文小站