郑州网站建设首选创新,app开发去哪个网站,双11主机 wordpress 2015,互联网技术的发展1 过滤器和包装器
过滤器可以拦截请求及控制响应#xff0c;而servlet对此毫无感知。过滤器有如下作用#xff1a;
1#xff09;请求过滤器#xff1a;完成安全检查、重新格式化请求首部或体、建立请求审计日志。
2#xff09;响应过滤器#xff1a;压缩响应流、追加或… 1 过滤器和包装器
过滤器可以拦截请求及控制响应而servlet对此毫无感知。过滤器有如下作用
1请求过滤器完成安全检查、重新格式化请求首部或体、建立请求审计日志。
2响应过滤器压缩响应流、追加或修改响应流、创建一个完全不同的响应。
1.1 声明和确定过滤器顺序
当多个过滤器映射到一个给定资源时容器会使用先URL模式后servlet-name的规则。
filter-mapping filter-namefilter3/filter-name servlet-namehelloServlet/servlet-name
/filter-mapping
filter-mapping filter-namefilter1/filter-name url-pattern/*/url-pattern
/filter-mapping
filter-mapping filter-namefilter2/filter-name url-pattern*.action/url-pattern
/filter-mapping
过滤器的顺序为 filter1、filter2、filter3
1.2 过滤器实战
需求1项目只接受/hello 请求的GET方法对于其他请求则返回“404没有找到对应资源”。2对所有响应返回内容结尾都追加“filter实战”。
public class HelloServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {PrintWriter writer resp.getWriter();writer.print(你好 Servlet);writer.close();}}public class RequestFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println(拦截器初始化);}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request (HttpServletRequest) servletRequest;String method request.getMethod();String servletPath request.getServletPath();HttpServletResponse response (HttpServletResponse) servletResponse;CustomResponseWrapper responseWrapper new CustomResponseWrapper(response);responseWrapper.setContentType(text/html;charsetUTF-8);if (GET.equalsIgnoreCase(method) /hello.equalsIgnoreCase(servletPath)) {filterChain.doFilter(request,responseWrapper);} else {PrintWriter writer responseWrapper.getWriter();writer.print(404没有找到对应资源);writer.close();}}Overridepublic void destroy() {System.out.println(拦截器销毁);}
}public class CustomResponseWrapper extends HttpServletResponseWrapper {private CustomPrintWriter pw;public CustomResponseWrapper(HttpServletResponse response) {super(response);}Overridepublic PrintWriter getWriter() throws IOException {if (pw null) pw new CustomPrintWriter(super.getWriter());return pw;}
}public class CustomPrintWriter extends PrintWriter {public CustomPrintWriter(Writer out) {super(out);}Overridepublic void print(String s) {super.print(s ——filter实战);}
}
web-app xmlnshttp://java.sun.com/xml/ns/j2eexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsdversion2.4servletservlet-namehelloServlet/servlet-nameservlet-classHelloServlet/servlet-class/servletservlet-mappingservlet-namehelloServlet/servlet-nameurl-pattern/hello/url-pattern/servlet-mappingfilterfilter-namereqFilter/filter-namefilter-classRequestFilter/filter-class/filterfilter-mappingfilter-namereqFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping
/web-app
web.xml
2 企业设计模式
Web系统要求着良好的性能让用户得到更快的响应时间及支持更多的并发用户为了让应用不同部分能同时在不同主机上运行要以适当方式模块化同时系统还要有一定的灵活性、可维护性和可扩展性。
2.1 处理远程对象
在对象跨网络通信时存在一些常见的问题查找远程对象及处理本地和远程对象之间的底层网络I/O通信。也就是如何找到远程对象以及如何调用其方法。
JNDI和RMI可以解决上述的问题。
2.1.1 JNDI
Java Naming and Directory InterfaceJava命名和目录接口。可以在网络上的一个集中位置上完成查找。想被查找并访问的对象要先向JNDI注册再通过JNDI来查找。
2.1.2 为控制器增加JNDI。 图 WEB服务请求调用远程服务器服务过程
业务委托完成请求的业务处理。
服务定位器从JDNI查找需要调用的远程服务。
2.2 MVC
Model-View-Controller(模型-视图-控制器)。
模型真正的业务逻辑和状态。了解获取和更新状态的规则。
视图从控制器得到模型的状态。发起请求及接受响应。
控制器从请求取得用户输入并向模型明确输入用户的含义。
2.2.1 改进MVC控制器
控制器的3大任务及处理方案
1获得和处理请求参数将这个任务交给另外一个单独的表单验证组件由它获得表单参数、完成转换、进行验证、处理错误并创建一个对象保存参数值。
2调用模型采用声明方式在定制部署描述文件中列出一些模型控制器可以读取这些模型并且根据请求来决定要使用哪些模型。
3分派到视图采用声明方式根据URL控制器就能区分要分派到哪个视图。
前端控制器应用所有的请求都会通过一个控制器由它处理并将请求分派到适当地方。