Struts2从本质上看来源于Webwork,它同时具有Struts和Webwork的优点。WebWork是一个强大的基于Web的MVC框架, 它构建在一个命令模式框架XWork之上。下面就让我们来了解一下 Struts2吧。
1.Struts2配置文件
Struts2相关的配置文件有web.xml,struts.xml,struts.properties,struts-default.xml,velocity.properties,struts-default.vm。其中web.xml,struts.xml是必须的,其它的配置文件可选择。它们在web应用中的功能如下:
web.xml:包含所有必须的框架组件的web部署描述符。
Struts.xml:配置包含result/view类型、action映射、拦截器等的Struts2的主要配置文件。
Struts.properties:配置struts2的框架属性。
Struts-default.xml:在文件在struts-action-x.x.jar中,该文件是应该被包含在struts.xml中的缺省配置。
Welocity.properties:重写了velocity的配置文件。
Struts-default.vm:相对于velocity的缺省配置。
2.下面我们用一个登录实例来了解一个基本Struts2应用
A.建立基本JSP页面
<body>
<form action="login.action" method="post" >
用户名:<input type="text" name="username"><br>
密 码:<input type="password" name="password"><br>
<input type="submit" value="提交">
</form>
</body>
B.建立Action类
public class LoginAction {
//这个类会在struts2框架中自动调用setter getter方法
private String username;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute()throws Exception {
return "success";
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
注意:其中setter getter方法会被Struts2容器直接调用,他们的定义应该和客户端请求表单中input的name相对应。
C.配置文件
(1)web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<!-- filter过滤客户端发来的请求 (struts的控制器)-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<!-- 表示客户端所有请求都要经过这个filter处理-->
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
以上是最基本的配置形式,具体含义就不多介绍了
(2)struts.xml
这是struts2的核心配置类,他的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标签内,具体配置如下:
<struts>
<package name="struts2" extends="struts-default">
<action name="login" class="com.test.action.LoginAction">
<result name="success">/result.jsp</result>
</action>
</package>
</struts>
这里action name="login"要与login.jsp中的表单的 action="login.action"对应 ,class配置其对应的Action处理类,result定义了在Action的execute()方法中各种情况下跳转的页面。
D.登录结果页result.jsp
我们可以引入标签库,方便取得Action类属性
<%@ taglib prefix="s" uri="/struts-tags" %>
用户名:<s:textfield value="%{username}"/><br>
密码: <s:property value="password"/>
当然也可以采用传统JSP方式:
username:${requestScope.username} <br>
password:${requestScope.password}
总结一下Struts2的基本调用流程:
No1.客户端请求定义对应的Action
No2.Struts2容器会自动通过调用对应Action的get,set方法,把请求的数据传入Action中
No3.执行Action中的exxcute()方法,来实现页面的跳转活着其他处理。