<package name="front" extends="struts-default" namespace="/front">
<action name="index">
<result>/Namespace.jsp</result>
</action>
</package>
<package name="main" extends="struts-default" namespace="">
<action name="index">
<result>/Namespace.jsp</result>
</action>
</package>
package 中的name用来解决action重名的现象(例如:前台和后台都有相同名字的action,这个时候就可以用package做区分)
1.namespace
namespace决定了action的访问路径,默认为"",可以接受所有路径的action
namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,/xxx/index.action,或者/xxx/yyy/index.action
namespace最好用模块来进行命名
2.copy web project时容易出现的问题
要对copy以后重命名的project,右键,选择Properties,进行如下图配置:
3.import web project时需要注意的问题
JRE System Library可能需要remove,然后重新给项目bulid path,add library
4.ActionSupport
具体视图的返回可以由用户自己定义的Action来决定
具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容
具体Action的实现最常用的是从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法
<action name=''" class="">
public String execute() {
}
5.Path路径问题说明
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
虽然可以用redirect方式解决,但redirect方式并非必要。 (最好不用这种方法)
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)
或者使用myeclipse经常用的,指定basePath
JSP文件中:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<head>
<base href="<%=basePath%>" /> <!-- 指定base后,默认前面都加上basePath>
6.动态方法调用(DMI)
可以在配置文件中配置Action的时候用method=来指定执行哪个方法(这个不推荐使用)
也可以在url地址中动态指定(动态方法调用DMI),url中指定调用action的方法,使用感叹号!
例如/Struts2_0500_ActionMethod/user/user!add(这个就是调用user Action的add方法)
7.Wildcards通配符
使用通配符,将配置量降到最低
不过,一定要遵守"约定优于配置"的原则
例子:
<?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>
<constant name="struts.devMode" value="true" />
<package name="actions" extends="struts-default" namespace="/actions">
<action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">
<result>/Student{1}_success.jsp</result>
</action>
<action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">
<result>/{1}_{2}_success.jsp</result>
<!-- {0}_success.jsp -->
</action>
</package>
</struts>
其中:{1}代表第一个*,{2}代表第二个*
7.使用Action接收参数
例子:
Note:参数的名字必须要Action的get和set方法的名字一致
URL:Struts2_0700_ActionAttrParamInput/user/user!add?name=a&age=8
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" extends="struts-default" namespace="/user">
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
</package>
</struts>
UserAction代码:
package com.bjsxt.struts2.user.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private String name;
private int age;
public String add() {
System.out.println("name=" + name);
System.out.println("age=" + age);
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
8.使用Domain Model接收参数
URL:user/user!add?user.name=a&user.age=8
Note:Action类中应有一个user实例,或者使用UserDTO,UserDTO先接收参数,然后通过UserDTO创建User。
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" extends="struts-default" namespace="/user">
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
</package>
</struts>
UserAction代码:
public class UserAction extends ActionSupport {
private User user;
//private UserDTO userDTO;
public String add() {
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
User代码:
package com.bjsxt.struts2.user.model;
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
9.使用ModelDriven接收参数(这个方法不太常用)
Note:Action要实现ModelDriven接口,重写public <T> getModel()方法
URL:user/user!add?name=a&age=8
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" extends="struts-default" namespace="/user">
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
</package>
</struts>
UserAction代码:
package com.bjsxt.struts2.user.action;
import com.bjsxt.struts2.user.model.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class UserAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();
public String add() {
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
return SUCCESS;
}
@Override
public User getModel() {
return user;
}
}
User类同上。
10.解决中文乱码问题
参考:Struts2_1000_CharacterEncoding
struts2-core-2.1.7.jar包下的org.apach.struts2中static文件中的default.properties
struts.xml中进行如下配置:
<constant name="struts.i18n.encoding" value="GBK" />
11.简单数据验证(这个项目还不是太明白)
参考:Struts2_1100_SimpleDataValiation
12.访问Web元素(这个项目还是不太明白)
参考:Struts2_1200_AccessWebElements
13.Struts2模块包含
参考:Struts2_1300_IncludeModules
可以用include细分模块的管理
struts.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>
<constant name="struts.devMode" value="true" />
<include file="login.xml" />
</struts>
login.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>
<package name="login" extends="struts-default" namespace="/login">
<action name="login*" class="com.bjsxt.struts2.user.action.LoginAction{1}">
<result>/user_login_success.jsp</result>
</action>
</package>
</struts>
14.默认的Action
参考:Struts2_1400_DefaultAction
当URL为不存在的Action时,自动跳转到设置好的默认Action(前提要满足相应的namespace条件)
<?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>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index"></default-action-ref>
<action name="index">
<result>/default.jsp</result>
</action>
</package>
</struts>