本文主要是一个模拟的Struts2的简单实现
真正的MVC架构
实现主要思路
定义一个过滤器,接收传递过去的Action,根据处理的结果重定向或者转发。
首先定义index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="${pageContext.request.contextPath}/addCustomer.action" method="post">
姓名:<input type="text" name="name"/><br/>
年龄:<input type="text" name="age"/><br/>
<input type="submit" value="保存"/>
</form>
</body>
</html>
在web.xml中配置过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>MyStruct2</display-name>
<filter>
<filter-name>CenterFilter</filter-name>
<filter-class>cn.itcast.framework.core.CenterFilter</filter-class>
<!-- <init-param>-->
<!-- <param-name>aciontPostFix</param-name>-->
<!-- <param-value>action,do</param-value>-->
<!-- </init-param>-->
</filter>
<filter-mapping>
<filter-name>CenterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- 核心配置文件 -->
<framework>
<!--
action:
name:必须有,且唯一。如同之前请求的什么operation
class:必须有,要执行哪个JavaBean的类名
method:可以没有。没有的话就是默认值execute。JavaBean中对应的操作方法。该方法的特点是:public String addCustomer(){}
-->
<action name="addCustomer" class="cn.itcast.domain.Customer" method="addCustomer">
<!--
result:代表着一种结果。
type:可以没有,默认是dispatcher。转向目标的类型。dispatcher代表着请求转发
name:必须有。对应的是JavaBean中addCustomer的返回值
主体内容:必须有。目标资源的URI
-->
<result type="redirect" name="success">/success.jsp</result>
<result type="dispatcher" name="error">/error.jsp</result>
</action>
<action name="updateCustomer" class="cn.itcast.domain.Customer" method="updateCustomer">
<result type="dispatcher" name="success">/success.jsp</result>
</action>
</framework>
核心过滤器实现
- 初始化配置文件,读取XML配置文件:把配置文件中的信息封装到对象中.再放到actions中
- 取配置参数,如果你请求的地址以action\do\空结尾的话,才真正过滤。
- 解析用户请求的URI,截取后缀名,看看是否需要我们的框架进行处理
- 如果需要框架处理,解析uri中的动作名称,获得相应方法处理
- 根据结果中的type决定是转发还是重定向,重定向的目标就是结果中的targetUri
javabean如下
完成