开发环境:win7+Tomcat7+MyEclipse8.6
项目框架如图:
第一步:新建webproject项目,并添加struts2的支持,同时myeclipse会为我们配置好web.xml。不需要我们手工配置。
第二步:新建PersonAction文件
package com.stone.Action; import com.opensymphony.xwork2.ActionSupport; public class PersonAction extends ActionSupport { private static final long serialVersionUID = 1L; 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; } public String execute() throws Exception { if(username.equals("stone") && password.equals("stone")) return "success"; else return "failure"; } }
第三步:在struts.xml文件中注册PersonAction。主要代码如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="myFirst" namespace="/struts2" extends="struts-default"> <action name="login" class="com.stone.Action.PersonAction"> <result name="success">/WEB-INF/Page/loginSuccess.jsp</result> <result name="failure">/WEB-INF/Page/loginfailure.jsp</result> </action> </package> </struts>
包配置:
Struts2 框架中核心组件就是Action、拦截器等,Struts2 框架使用包来管理Action 和拦截器等。每个包就是多个Action、多个拦截器、多个拦截器引用的集合。
在struts.xml 文件中package 元素用于定义包配置,每个package 元素定义了一个包配置。它的常用属性有:
name:必填属性,用来指定包的名字。
extends:可选属性,用来指定该包继承其他包。继承其它包,可以继承其它包中的Action 定义、拦截器定义等。
namespace:可选属性,用来指定该包的命名空间。
第四步:提供jsp页面
login.jsp主要代码:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=gbk"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> <form action="${pageContext.request.contextPath}/struts2/login.action"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="登陆"> </form> </body> </html>
failue.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=gbk"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> 登录失败!错误的用户名:<s:property value="username"/><br> <a href="${pageContext.request.contextPath}/login.jsp">返回</a> </body> </html>
success.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=gbk"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> 登陆成功! </body> </html>
运行如图所示:
简要分析执行流程:
当输入login.jsp 访问jsp 页面填写完相关信息并提交给login.action 时,它会首先被在web.xml 中配置的过滤器监听到,过滤器会去查找strust.xml 文件,并结合namespace 查找名为login 的action,查找到此action 便交给其处理,LoginAction 内部会执行execute 方法,并返回结果result(result
也是参照的struts.xml 中action 下的result 配置)。 关于表单传参,主要是参照的action 中的方法名,而非属性名。
登陆界面,用户名输入stone,密码输入stone
单击登陆
当输入错误的密码时”: