简单的总结一下一个Struts2应用遇到的问题
1.下载Struts2的jar包
我用的是struts-2.3.16.1-all.zip这个版本
2.建立一个web procejt
3. 配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" 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">
<display-name>Struts Blank</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
4.配置struts.xml
这里要特别注意不能漏写会报错
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 定义一个名称为test的包 继承Struts2的默认包 -->
<package name="test" extends="struts-default">
<!-- 配置业务控制器的结果视图映射 -->
<action name="sayWelcome" class="myActions.sayHello">
<!-- 配置成功时的视图资源 -->
<result name="success">/welcome.jsp</result>
<!-- 配置验证不成工时的视图资源 -->
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
5.写action类
package myActions;
import com.opensymphony.xwork2.ActionSupport;
public class sayHello extends ActionSupport {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String execute() throws Exception {
return SUCCESS;
}
public void validate() {
if (username == null || username.trim().length() < 5) {
addFieldError(username, "用户名错误!");
}
}
}
6.写jsp页面第一个为登录第二个登录成功跳转后的
<%@page contentType="text/html;" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html" http-equiv="Content-Type" charset="utf-8">
<title>第一个Struts应用</title>
</head>
<body>
<s:form action="sayWelcome">
请输入用户名:<s:textfield name="username" size="20" />
<s:submit value="确定" />
<s:reset value="重写" />
</s:form>
<s:if test="hasFieldErrors()">
<s:fielderror />
</s:if>
</body>
</html>
<%@ page contentType="text/html" 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>
<!--${username}OGNL表达式用于获取username变量值 -->
${username}
</body>
</html>
下面简单的描述一下执行过程
1.通过浏览器访问index.jsp页面单击提交按钮,请求sayWelcome
2.sayWelcome请求被Struts2的核心拦截器ActionContextCleanUp和FliterDispatcher拦截处理,FliterDispatcher拦截器查询Action映射器,然后将请求交给Action处理。
3.Action根据配置管理器查询struts.xml配置文件,找到sayWelcome控制器类sayHello,然后创建Action实例。
4.在Action运行环境中,首先调用Struts拦截器,然后调用validate()方法验证表单 ,验证通过则调用execute()方法处理。