`

struts2之使用Filter作为控制器的MVC

 
阅读更多

 

MVC 设计模式概览

 

实现 MVC(Model、View、Controller) 模式的应用程序由 3 大部分构成:

 

模型(POJO(Plain Old Java Object)):封装应用程序的数据和业务逻辑

视图(JSP):实现应用程序的信息显示功能

控制器(Servlet、Filter):接收来自用户的输入,调用模型层,响应对应的视图组件

 

用户注册案例-使用 Filter 作为控制器

 

1. 业务流

 


  

2. 添加JSP页面

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页</title>
</head>
<body>
     <h2><a href="register-user.action">注册用户</a></h2><hr/>
     <p>使用filter来作为前端控制器,代替servlet.</p>
</body>
</html>

  

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
</head>
<body>
     <h2>注册</h2><hr/>
     <form action="submit-user.action" method="POST">

               用户名:&nbsp;<input type="text" name="username"><br/>
               密码:&nbsp;&nbsp;<input type="password" name="password1"><br/>
               重复密码:<input type="password" name="password2"><br/>
           <input type="reset" value="重置">
           <input type="submit" value="提交">
     </form>
     <hr/>
     <a href="index.jsp" style="float:right;">返回首页</a>
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查看</title>
</head>
<body>
     <h2>注册成功</h2>
     <hr/>
     <p>用户名:${requestScope.account.username}</p>
     <p>密码:${requestScope.account.password}</p>
      <hr/>
     <a href="index.jsp" style="float:right;">返回首页</a>
</body>
</html>

 

3. 添加Filter控制器

 

package org.rabbitx.web.filter.register;

import java.io.IOException;

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 FilterController implements Filter {

	@Override
	public void destroy() {

	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {
        
		HttpServletRequest httpReq = (HttpServletRequest)req;
		HttpServletResponse httpResp = (HttpServletResponse)resp;
		
		String servletPath = httpReq.getServletPath();
		
		String dispatcherPath = null;
		String redirectPath = null;
		
		if(servletPath.contains("register-user"))
		{
			dispatcherPath = "register.jsp";
		}
		else if(servletPath.contains("submit-user"))
		{
			String username = httpReq.getParameter("username");
			String password1 = httpReq.getParameter("password1");
			String password2 = httpReq.getParameter("password2");
			if(username.isEmpty() || password1.isEmpty() || !password1.equals(password2))
			{
				redirectPath = "register.jsp";
			}
			else
			{
				dispatcherPath = "view.jsp";
				httpReq.setAttribute("account", new Account(username,password1));
			}
		}
		
		if(dispatcherPath != null)
		{
			httpReq.getRequestDispatcher(dispatcherPath).forward(httpReq, httpResp);
		}
		else if(redirectPath != null)
		{
			httpResp.sendRedirect(redirectPath);
		}
        else
		{
			chain.doFilter(req, resp);
		}
		
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {

	}

}

  

4. 配置Filter控制器

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0">

   <filter>
       <filter-name>filterController</filter-name>
       <filter-class>org.rabbitx.web.filter.register.FilterController</filter-class>
   </filter>
   
   <filter-mapping>
       <filter-name>filterController</filter-name>
       <url-pattern>*.action</url-pattern>
   </filter-mapping>
    
    <!--默认页面配置-->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>

 

使用 Filter 作为控制器的好处

 

使用一个过滤器来作为控制器, 可以方便地在应用程序里对所有资源(包括静态资源)进行控制访问.

 

Servlet和Filter比较

 

Servlet 能做的 Filter 都可以完成。

Filter 能做的 Servlet 不一定可以完成。 拦截资源却不是 Servlet 所擅长的! Filter 中有一个 FilterChain,这个 API 在 Servlet 中没有!

 

  • 大小: 12.5 KB
分享到:
评论

相关推荐

    Struts2--1.使用 Filter 作为控制器的 MVC

    Struts2--1.使用 Filter 作为控制器的 MVC

    用 Filter 作为控制器的 MVC

    Struts2--1.使用 Filter 作为控制器的 MVC,过滤器的使用

    struts2-1.zip

    使用Filter 作为控制器的MVC filter本身是一个过滤器 servlet能做的filter都能做 反之不能 对于servlet来说,拦截资源不是其所擅长的filter中的filterchain,这个API是servlet所没有的 Struts2中最主要的一个...

    javaWeb_struts2框架实现简单用户注册登录

    3.控制器采用action开发,替代传统的servlet,直接跳转页面返回一个字符串即可,需配置struts.xml对应的jsp。 4.struts2,可以直接对表单提交的数据封装成对象,简洁!当然需要在web.xml中配置核心filter—...

    struts2流程与流程图

     FilterDispatcher是控制器的核心,就是MVC的Struts 2实现中控制层(Controller)的核心。  FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet Request)请求,如果ActionMapper...

    struts2第一节

    通过案例讲授如何使用 Filter 作为控制器如何实现 MVC 设计模式。为深入 Struts2 做准备。

    Java Struts 实现拦截器

    Struts2的处理流程: • 客户端产生一个HttpServletRequest的请求,该请求被提交到一系列的标准过滤器(Filter)组建链中(如ActionContextCleanUp...FilterDispatcher是控制器的核心,也是MVC中控制层的核心组建)。

    拦截器和控制器的区别

    converter 转换器 i18n struts2 spring MVC 拦截器 interceptor 过滤器 filter web.xml implements filter filterchain arg2.doFilter(req,resp); 监听器 servlet application /session /request 6/8 个 ...

    Struts2入门笔记1-4

    之前的 MVC 中,C 就是Servlet,而现在我们使用Filter实现了 C 的功能;并且发现 Filter的功能 &gt; Servlet的功能 ;其实吧 Struts2 的控制实现是Filter

    SSH的jar包.rar

    SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层。 一个请求在Struts2框架中的处理大概分为以下几个步骤: 1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2、这...

    Java_SpringMVC_Tutorial

    Spring MVC 就是类似于 Struts2 的 MVC 框架,属于 SpringFrameWork 的后续产品。 2 为什么学 Spring MVC? SpringMVC 与 Struts2 区别 对比项目 SrpingMVC Struts2 优势 国内市场情况 有大量用户,一般新项目启动...

    当当网电商系统全套源码亲测通过(附带邮箱验证功能)

    1.项目介绍 典型电子商务系统(在线购物平台),模拟了当当系统部分功能。...web.xml(配置Filter控制器) ... 4)WebRoot文件结构 /user/* :用户管理的JSP; ... 更多详情尽在压缩文件中,可自行下载查看~

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    8.8.1 Struts Prepare And Execute Filter过滤器 8.8.2 struts.xml文件配置出错 8.9 精彩回顾 第9章 庖丁解牛 ——揭密Struts2高级技术 9.1 本章学习任务 9.1.1 本章知识体系 9.1.2 实例开发任务 9.2 OGNL表达式...

    Java Web程序设计教程

    5.1.3struts2框架的mvc架构 82 5.2struts2概览 84 5.2.1struts2的工作流程 84 5.2.2struts2的简单应用 85 5.3struts2基础 87 5.3.1action详解 88 5.3.2结果与视图 91 5.3.3struts.xml的配置 94 5.4值栈与...

    java web 开发详解

    Java 的 Web框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的...

    spring security 参考手册中文版

    作为用户在Spring MVC测试中使用注释运行 108 12.2.4测试HTTP基本认证 109 12.3 SecurityMockMvcRequestBuilders 109 12.3.1测试基于表单的认证 109 12.3.2测试注销 110 12.4 SecurityMockMvcResultMatchers 110 ...

    当当网全套源码(附带邮箱验证功能)

    web.xml(配置Filter控制器) struts.xml (struts主配置文件) struts-user.xml(用户模块配置文件) struts-main.xml(浏览模块配置文件) struts-order.xml(订单模块配置文件) struts-cart.xml(购物车...

    J2EE应用开发详解

    104 第8章 Struts2框架 105 8.1 Web应用的发展 105 8.2 Struts2的起源和体系结构 106 8.3 Struts2核心部分详解 108 8.3.1 核心控制器FilterDispatcher 108 8.3.2 业务逻辑控制器Action 111 8.3.3 业务逻辑组件 116 ...

    spring4.3.9相关jar包

    包括框架的Servlets,Web MVC框架,控制器和视图支持。当然,如果你的应用使用了独立的MVC 框架,则无需这个JAR 文件里的任何类。 外部依赖spring-web, (spring-support,Tiles,iText,POI)。 spring-aspects.jar...

Global site tag (gtag.js) - Google Analytics