前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(01)Struts2_使用 Filter 作为控制器的 MVC 应用

(01)Struts2_使用 Filter 作为控制器的 MVC 应用

作者头像
qubianzhong
发布2018-09-19 12:58:29
3390
发布2018-09-19 12:58:29
举报
文章被收录于专栏:行者常至行者常至

MVC 设计模式概览

实现 MVC(Model、View、Controller) 模式的应用程序由 3 大部分构成:
  • 模型:封装应用程序的数据和业务逻辑
  • 视图:实现应用程序的信息显示功能
  • 控制器:接收来自用户的输入,调用模型层,响应对应的视图组件(Servlet 、Filter)

需求:

这里写图片描述
这里写图片描述

编码:

这里写图片描述
这里写图片描述
index.jsp
代码语言:javascript
复制
<%@ 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
代码语言:javascript
复制
<%@ 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
代码语言:javascript
复制
<%@ 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
代码语言:javascript
复制
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
代码语言:javascript
复制
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
代码语言:javascript
复制
<?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。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年08月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MVC 设计模式概览
    • 实现 MVC(Model、View、Controller) 模式的应用程序由 3 大部分构成:
    • 需求:
    • 编码:
      • index.jsp
        • Input.jsp
          • Show.jsp
            • FilterDispatcher.java
              • GG_CZY.java
                • web.xml
                • 使用 Filter 作为控制器的好处
                  • 使用一个过滤器来作为控制器, 可以方便地在应用程序里对所有资源(包括静态资源)进行控制访问.
                  • Servlet VS Filter
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档