(01)Struts2_使用 Filter 作为控制器的 MVC 应用
2016-08-31 21:51
316 查看
MVC 设计模式概览
实现 MVC(Model、View、Controller) 模式的应用程序由 3 大部分构成:
模型:封装应用程序的数据和业务逻辑视图:实现应用程序的信息显示功能
控制器:接收来自用户的输入,调用模型层,响应对应的视图组件(Servlet 、Filter)
需求:
编码:
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <a href="czy_input.action">进入Input.jsp页面</a> </body> </html>
Input.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <form action="czy_save.action" method="post"> 编号:<input type="text" name="dlh"/><br> 姓名:<input type="text" name="name"/><br> 部门:<input type="text" name="bmmc"/><br> <input type="submit" value="保存"/> </form> </body> </html>
Show.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> ID:${requestScope.czy.id}<br> 编号:${ requestScope.czy.dlh}<br> 姓名:${ requestScope.czy.name}<br> 部门:${ requestScope.czy.bmmc}<br> </body> </html>
FilterDispatcher.java
package com.qbz.struts2_01; import java.io.IOException; import java.util.UUID; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class FilterDispatcher implements Filter { @Override public void destroy() { } @SuppressWarnings("unused") @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) arg0; HttpServletResponse response = (HttpServletResponse) arg1; request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); String servletPath = request.getServletPath(); String path = null; if("/czy_input.action".equals(servletPath)){ path="/WEB-INF/page/Input.jsp"; }else if("/czy_save.action".equals(servletPath)){ String dlh = request.getParameter("dlh"); String name = request.getParameter("name"); String bmmc = request.getParameter("bmmc"); String id = UUID.randomUUID().toString().replace("-", ""); GG_CZY czy = new GG_CZY(id,dlh, name, bmmc); request.setAttribute("czy", czy); path = "/WEB-INF/page/Show.jsp"; } if(path!=null){ request.getRequestDispatcher(path).forward(request, response); return; } arg2.doFilter(request, response); } @Override public void init(FilterConfig arg0) throws ServletException { } }
GG_CZY.java
package com.qbz.struts2_01; public class GG_CZY { private String id; private String dlh; private String name; private String bmmc; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getDlh() { return dlh; } public void setDlh(String dlh) { this.dlh = dlh; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getBmmc() { return bmmc; } public void setBmmc(String bmmc) { this.bmmc = bmmc; } public GG_CZY(String id, String dlh, String name, String bmmc) { super(); this.id = id; this.dlh = dlh; this.name = name; this.bmmc = bmmc; } public GG_CZY() { super(); } @Override public String toString() { return "GG_CZY [id=" + id + ", dlh=" + dlh + ", name=" + name + ", bmmc=" + bmmc + "]"; } }
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>struts2-01</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 拦截所有后缀为.action的请求 --> <filter> <filter-name>filterDispatcher</filter-name> <filter-class>com.qbz.struts2_01.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>filterDispatcher</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> </web-app>
使用 Filter 作为控制器的好处
使用一个过滤器来作为控制器, 可以方便地在应用程序里对所有资源(包括静态资源)进行控制访问.
Servlet VS Filter
Servlet可以做到的,Filter都可以完成。拦截资源却不是Servlet所擅长的。
Filter 中有一个FilterChain,Servlet中没有这个API。
相关文章推荐
- 《Struts2框架 》学习之Struts2 的引用(使用filter作为控制器的MVC应用)
- 1.struts2:使用Filter作为控制器的MVC
- struts2之使用Filter作为控制器的MVC
- Struts2-1 使用Filter作为控制器的MVC
- struts2:使用Filter作为控制器的MVC
- Struts2_001_使用 Filter 作为控制器的 MVC
- [原创]java WEB学习笔记53:Struts2学习之路---前奏:使用 Filter 作为控制器的 MVC
- 使用Filter作为控制器的MVC
- struts2-(1)使用Filter作为控制器
- 10001---使用 Filter 作为控制器的 MVC
- 使用Servlet作为控制器的的MVC的应用-登录验证
- 使用filter作为控制器的MVC
- Struts2入门(一)_使用Filter实现MVC
- Strut2_使用Filter作为控制器的MVC应用
- Struts2学习笔记(二):Struts2、Servlet和Filter作为控制器的实现与对比
- 1. 使用Filter 作为控制器
- Servlet作为控制器的MVC应用---登陆的演示
- 【MVC】使用Servlet 作为控制器实现一个简单的登陆验证
- 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。
- ASP.NET MVC一群:40985466人员已满!请其他有兴趣的朋友加ASP.NET MVC二群:14426077(同样可容纳500人的超级群!) 另群:49544745已作为PHP群使用!请慎重加入!