1. Struts2的下载
官方下载地址:http://struts.apache.org/download.cgi
Struts2完整版结构如下:apps(应用示例),docs(帮助文档,API),lib(核心类库),src(全部源码)
2. 导入struts2核心类库到项目
基本包包括:antlr-2.7.2.jar,commons-fileupload-1.3.jar,commons-io-2.0.1.jar,commons-logging-1.1.3.jar,commons-lang3-3.1.jar,freemarker-2.3.19.jar,javassist-3.11.0.GA.jar,ognl-3.0.6.jar,struts2-core-2.3.15.3.jar,
xwork-core-2.3.15.3.jar,如需使用Struts2的更多特性,则需导入其它jar包
3. 在web.xml中配置Struts2的核心Filter
<!-- 定义Struts2的核心Filter -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- 让Struts2的核心Filter拦截所有请求 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4. 创建登陆页面login.jsp,测试Struts2
<script type="text/javascript">
function regist(){
//获取页面的第一个表单
targetForm = document.forms[0];
//动态修改表单的action属性
targetForm.action = "regist";
}
</script>
<body bgcolor="pink">
<center>
用户登陆<br><hr>
<form action="login">
账 号:<input type="text" name="username"><br>
密 码:<input type="text" name="password"><br>
<input type="submit" value="登陆">
<input type="submit" value="注册" οnclick="regist();">
</form>
</center>
</body>
5. 为Struts2添加配置文件struts.xml
<?xml version="1.0" encoding="GBK"?><!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<!-- 指定Struts 2配置文件的根元素 -->
<struts>
<!-- 指定全局国际化资源文件 -->
<constant name="struts.custom.i18n.resources" value="mess"/>
<!-- 指定国际化编码所使用的字符集 -->
<constant name="struts.i18n.encoding" value="GBK"/>
<!-- 所有的Action定义都应该放在package下 -->
<package name="userManager" extends="struts-default">
<!-- 不配置method属性,交给默认的execute()方法处理 -->
<action name="login" class="test.action.LoginAction">
<!-- 定义三个逻辑视图和物理资源之间的映射 -->
<result name="input">/login.jsp</result>
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
<!-- 配置method属性,交给regist()方法处理 -->
<action name="regist" class="test.action.LoginAction" method="regist">
<result name="success">/welcome.jsp</result>
</action>
</package>
<!-- 导入其它完整的配置文件 -->
<include file="struts-xxx.xml"></include>
</struts>
6. 编写Action处理类BaseAction.java,LoginAction.java
/// 1.BaseAction
package test.action;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class BaseAction extends ActionSupport {
private transient HttpServletRequest request = null;
private transient HttpServletResponse response = null;
private transient ServletContext servletContext = null;
private transient HttpSession session = null;
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public void setResponse(HttpServletResponse response) {
this.response = response;
}
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
public void setSession(HttpSession session) {
this.session = session;
}
public HttpServletRequest getRequest(){
if(request != null){
return request;
}
return ServletActionContext.getRequest();
}
public HttpServletResponse getResponse(){
if(response != null){
return response;
}
return ServletActionContext.getResponse();
}
public ServletContext getServletContext(){
if(servletContext != null){
return servletContext;
}
return ServletActionContext.getServletContext();
}
public HttpSession getSession(){
if(session != null){
return session;
}
return getRequest().getSession();
}
}
/ 2. LoginAction
package test.action;
public class LoginAction extends BaseAction{
//定义封装请求参数的username和password属性
private String username;
private String password;
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username = username;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password = password;
}
//注册Action
public String regist() throws Exception {
System.out.println(this.getRequest().getAttribute("username"));
this.getRequest().setAttribute("username", "regist");
return SUCCESS;
}
//默认的登陆Action
public String execute() throws Exception {
// 1. 通过request对象得到表单的值
System.out.println(this.getRequest().getParameter("username"));
// 2. 直接通过getter和setter得到表单的值
if (getUsername().equals("a")&& getPassword().equals("a")){
// 3. 设置、得到session的值
this.getSession().setAttribute("username", "ok");
System.out.println(this.getSession().getAttribute("username"));
// 4. 设置响应的字符串
this.getResponse().setCharacterEncoding("UTF-8");
this.getResponse().getWriter().print("ccccc");
return SUCCESS;
} else {
return ERROR;
}
}
}
7. 其它跳转页面welcome.jsp
<body>
登陆成功!<%=request.getAttribute("username")%><br>
<a href="login.jsp">退出</a><hr>
</body>