一、 经典的MVC模式
二、 Struts1.x对MVC的实现
三、 Struts1.x的主要组件和作用
组件 | 作用 |
ActionServlet | 中央控制器 |
Action | 分控制器,调用JavaBean实现业务逻辑,Action可以分为Action、DispatchAction等不同类型 |
ActionForm | 封装参数,实现服务器验证,文件上传等 |
Forward | 转发到目的地,可以是JSP,也可以是另一个Action |
Struts-config.xml | 配置文件,配置有ActionForm,Action,Forward等,通过XML解析,然后使用反射技术使用该文件 |
Struts标签库 | 和JSTL类似,和Struts-config.xml、ActionForm、Action等对象可以紧密集成 |
四、 Struts1.x 开发实例-登录程序
见案例。
五、 Struts2(WebWork)的MVC
Struts2的MVC架构
六、 Struts2的主要组件
组件 | 作用 |
FilterDispatcher | 起中央控制器作用的过滤器 |
Action | 处于Model层的Action,调用JavaBean实现业务逻辑 |
struts.xml | 核心配置文件,配置有Action、Result等 |
result | 和forward类似,转发的目的地,支持多种视图技术。 |
七、 Struts2的实例-登录
在MyEclipse环境中建立一个新的web工程,名称“Struts2Login”,存放路径“f:/Struts2Login”。
在Struts2.0.11版本中找到war包struts2-blank-2.0.11.war,解开该war包,在WEB-INF/lib目录下复制出所有的jar包,这些jar包就是一个Struts2程序所需要的基础jar包,把它们复制到新建的web工程的WEB-INF/lib目录中。
在src目录下建立一个类,包名mypack,类名UserAction,其代码如下:
package mypack;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport { private String username; private String userpass;
public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getUserpass() { return userpass; } public void setUserpass(String userpass) { this.userpass = userpass; } @Override public String execute() throws Exception { if ("Mike".equals(username) && "123".equals(userpass) || "张三".equals(username) && "abc".equals(userpass)) return "success"; else return "error"; } } |
在src目录下建立Struts2的配置文件struts.xml,内容如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 定义包管理配置的action 继承struts-default.xml中的配置 --> <package name="actions" extends="struts-default"> <!-- 定义Action(login.action) --> <action name="login" class="mypack.UserAction"> <!-- 定义转发路径对应的字符串名 --> <result name="success">/Success.jsp</result> <result name="error">/Error.jsp</result> </action> </package> </struts> |
修改web.xml,在其中加入一个过滤器,过滤/*路径。
<!-- 过滤器类 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <!-- 过滤所有的url请求 --> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
在webroot目录下编写3个jsp页面,index.jsp、Success.jsp和Error.jsp,注意这里把page指令中的pageEncoding设置为“utf-8”,就没有中文问题了。
l index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> </head>
<body> <!-- 提交到action --> <form action="login.action" method="post"> 用户名: <!-- 参数名和action中的属性名一样 --> <input type=text name=username> <br> 密 码: <input type=password name=userpass> <br> <input type=submit name=subm value="提交"> <input type=reset name=reset value="取消"> </form> </body> </html> |
l Success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'Success.jsp' starting page</title> </head> <body> <h1> 欢迎 <%=request.getParameter("username")%> ,登录 </h1> </body> </html> |
l Error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'Error.jsp' starting page</title> </head> <body> <h1> 用户名或密码错误! </h1> </body> </html> |
把程序部署在tomcat5.5以上的版本中运行。