servlet
Servlet就是Server与Applet的结合.是运行在服务端的应用程序,降低客户端对JRE依赖,客户端请求服务端时,只需要通过servlet向客户端返回html元素即可在客户端浏览器呈现效果以及数据;同时servlet也存在一定缺陷:对于后端开发人员要求精通前端技术(HTML,CSS,JS),所以才出现JSP技术.
Servlet的创建步骤:首先创建普通类继承HttpServlet,然后重写service(doGet/doPost)方法,最后配置servlet(在web.xml中注册servlet).servlet的请求流程:客户端请求指定的servlet(url),系统会根据web.xml的配置找到对应的url-pattern.根据url-pattern找到对应的servlet-name,最后进入指定的servlet类执行servlet方法.
Servlet的生命周期是一个重点.首先,web容器启动之后,会对web.xml进行加载(解析),主要验证映射配置是否正确,如果出现任何映射异常,服务器就会抛出异常.当web.xml被加载成功后,当客户端对指定的servlet第一次发起访问时,容器会自动执行servlet的init方法完成一些初始化操作.然后容器会自动执行service方法.根据客户端发起的请求(get/post)决定调用doGet/doPost完成相应的操作.最后当容器停止服务时,servlet会执行destroy完成销毁操作.
过滤器,在对项目中的资源发起请求的时候,可以通过配置的过滤规则,对指定的资源请求进行拦截,执行完过滤器中的逻辑之后,在根据过滤器的放行规则决定是否对请求的资源放行.其实现原理是基于java设计模式的代理模式完成的.过滤器的创建方式为:首先创建普通类实现Filter接口,然后实现接口中的方法:init,doFilter,destroy,最后在web.xml中配置过滤器.
注解是JDK1.5之后新增的类型,通过在类,属性,方法上添加注解标记实现一个特定的功能.Servlet3.0新增对注解的支持,可以通过注解的形式声明Servlet类,filter(过滤器),listener(监听器).使用servlet3.0的基本要求:JDK1.6+,Tomcat7.0+.
文件的上传与下载.原理是实现服务端与客户端之间的文件拷贝,Servlet3.之后自带文件上传组件Commons-fileupload.上传文件有一些注意事项:表单的提交方式必须为必须为post;表单的enctype必须设置为multipart/form-data;每一个文件控件都必须有一个name属性;文件上传的目标一般为服务器的web-info或者服务器所在主机的本地磁盘(非项目目录),多数情况文件存储不会直接位于项目中,而是其它盘符或者目录,可以通过子啊服务器配置虚拟路径的方式访问到这些目录.Tomcat虚拟路径的配置,能够对外提供基于服务器的本地目录资源访问.有两种配置方式.
页面刷新会使得表单重复提交,可以将表单的提交方式改为post,但这不是最终解决方案,可以使用Token机制(令牌),在表单中向后台传递一个令牌(唯一值:系统时间,UUID,随机数),在后端将令牌数据清空,如果重复提交则检查是否存在令牌.
监听器包括ServletContext监听器,Session监听器,request监听器.监听属性的变化.,监听session的产生与销毁.
servlet配置
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.xc.servlets.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
filter配置
<filter>
<filter-name>HelloFilter</filter-name>
<filter-class>com.xc.filter.HelloFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>HelloFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>