搭建Struts2开发环境步骤
- 创建JavaWeb工程
- 导入Struts2所需要的jar包
- 创建jsp文件
- 创建action文件(就是新建一个类,继承父类ActionSupport)
- 编写Struts2的配置文件
- 在web.xml中加入Struts2 mvc 框架启动配置
以上是搭建Struts2开发环境的步骤,使用MyEclipse一般会省去步骤6,创建项目时会自动帮我们搭建好。
Struts2执行过程如下:
接下来通过一个例子帮助理解
先创建一个Action类,代码如下:
package se1414080902225;
import com.opensymphony.xwork2.ActionSupport;
public class CheckLogin extends ActionSupport {
private String account;
private String password;
public String getAccount()
{
return account;
}
public void setAccount(String account)
{
this.account = account;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String execute()
{
String message=null;
if (!account.equals("")&&!password.equals(""))
{
message="成功登录";
}
else
{
message="登录失败";
}
return message;
}
public CheckLogin() {}
}
创建一个login.jsp页面
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<style type="text/css">
#div1{
background:#666;
margin:10% 10% 10% 10%;
padding:5% 5% 5% 5%;
}
body{
background:#444;
}
</style>
</head>
<body>
<div id="div1">
<form action="login.go" method="post">
<input type="text" name="account"/><br/><br/>
<input type="password" name="password"/><br/><br/>
<input type="submit" name="登录"/><br/>
</form>
</div>
</body>
</html>
接下来就是往struts.xml配置文件添加元素
<?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>
<!--配置struts2框架的请求action的后缀名,如果配置多个的话用","隔开-->
<constant name="struts.action.extension" value="do,go,"></constant>
<!--package表示包,action标签的所有配置放在包下,属性name表示包的名称,要求唯一,可被继承-->
<!--namespace属性表示命名空间,名字也需要唯一;extends属性表示继承其它配置文件-->
<package name="se1414080902225" extends="struts-default">
<action name="login" class="se1414080902225.CheckLogin">
<result name="成功登录" type="redirect">/success.jsp</result>
<result name="登录失败">/login.jsp</result>
</action>
</package>
</struts>
在struts标签内加入如下代码可以修改请求action的后缀名
<!--配置struts2框架的请求action的后缀名,如果配置多个的话用","隔开-->
<constant name="struts.action.extension" value="do,go,,"></constant>
value=”do,go,,”的作用在于定义访问action的方式应该为actionName.do或者actionName.go.
action访问的路径问题:
上面那个action的name属性为”login”,package中的 namespace 属性省略不写,访问Action的相对路径为”/login.go”.
如果在package标签里加上namespace属性,修改后代码如下:
<package name="se1414080902225" extends="struts-default" namespace="/hello">
<action name="login" class="se1414080902225.CheckLogin">
<result name="成功登录" type="redirect">/success.jsp</result>
<result name="登录失败">/login.jsp</result>
</action>
</package>
这时Action的访问路径就为“/hello/login.go”
接下来看一下execute( )方法,该方法返回一个字符串,在此本人建议字符串不要太长太复杂,最好是常量。
public String execute()
{
String message=null;
if (!account.equals("")&&!password.equals(""))
{
message="成功登录";
}
else
{
message="登录失败";
}
return message;
}
<action name="login" class="se1414080902225.CheckLogin">
<result name="成功登录" type="redirect">/success.jsp</result>
<result name="登录失败">/login.jsp</result>
</action>
下面要说的就是execute( )方法的返回值与result标签”name”属性间的关系:
message的值要与result标签里的name属性的值保持一致,如果返回的值是可变化的,
execute()方法返回结果有多少中可能,action标签下就会有多少个result标签与之对应,
如果返回结果与任何一个name属性值都不匹配,就会出现404 not Found的错误
result标签的属性type=”redirect”表示对页面进行重定向,如果不写type=”redirect”则默认进行的是转发请求。一般为转发请求。
在没有为action的class属性指定类时,struts2默认执行的action是
com.opensymphony.xwork2.ActionSupport类的execute()方法,
可以在struts-default.xml文件中找到没有指明class属性时的默认配置。