您的位置:首页 > 编程语言 > Java开发

Struts2基础知识

2012-08-01 18:17 288 查看
(1) 部署Struts2项目步骤

1.1 copy struts.xml文件到项目的src目录

1.2 copy
所需要的jar文件

1.3 配置web.xml文件

<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>

1.4 配置struts.xml文件

<package name="default"
namespace="/"
extends="struts-default">

<action name="hello">

<result>

/Hello.jsp

</result>

</action>

</package>

Package与java中包的概念相似,一般情况下,namaspace的路径设置为与package一样。

如果namespace为空,则可以接受所有的请求。

Action中的name属性负责接受指定的请求;class属性,表示访问该name的请求时会转向指定的action;method属性表示调用的具体的方法。

(2)
Struts2接收参数的方法


2.1 通过url地址里传递与action中属性名字相同的参数

参数的名字与action里面属性的名字一样,实质上是地址栏传递的参数应该与set和get方法后面的名字一样;

2.2 使用Domain Model接收参数

例如:user.username=aaa&user.password=123456;

注意不要忘记写getUser()和setUser(User user)方法。但由于域模型的模型的属性往往比传递的参数要少(如注册时传递的参数往往有多一个密码确认的参数),因此使用的时候采用dto(data transform object),即创建一个UserDTO类,然后该类就可以包含模型中没有的参数,用UserDTO接收到相应的参数后,再生成需要的User对象;

2.3 实现ModelDriven<>接口

如:public class UserAction extends ActionSupport implements

ModelDriven<User> {}

则此时的参数传递又可以采用第一种的方法了。

private UserInfo userInfo = new UserInfo();

public UserInfo getModel()
{

return userInfo;

}

(3) Struts2乱码问题的解决

首先,form表单的提交方式必须是post,然后在struts.xml文件中加入配置:<constant name="struts.i18n.encoding" value="GBK" />要注意的是struts2中的2.1.7之前的版本都有bug,这句话不能解决中文问题。

注意: form表单提交的时候都要尽量使用post方式,这样才能有效避免中文的乱码问题。

除此之外也可以使用Spring的filter进行配置

<filter>

<filter-name>encodingFilter</filter-name>

<filter-class>

org.springframework.web.filter.CharacterEncodingFilter

</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>GBK</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

(4) Struts2中Action向前台传递参数

4.1 后台向前台传递错误信息

this.addFieldError(“name”, “name is error”);

一般情况下,name为属性名,可以为同一个错误名设置多个错误信息

this.addFieldError("name", "name is too long");

然后前台通过struts2标签读取错误信息。步骤如下:

首先添加调用标签库的语句:

<%@taglib uri="/struts-tags" prefix="s" %>

其中,uri指定标签库的位置,prefix指定前缀。

然后通过filelderror标签读取:

<s:fielderror fieldName="name" theme="simple"/>

则页面显示为:.name is error (后台指定的错误信息)上面语句的具体含义是取出的是名字为name的全部错误信息。

另外一种方法是通过读取debug里面的内容读取后台传递的信息

<s:debug></s:debug>

可以在页面展现debug标签[debug],其中有一项称为Value Stack Contents(值栈内容),主要用于放置action定义的属性,里面的内容是可以直接取出的。

然后用标签读取debug里面的内容

<s:property value="errors.name[0]"/>

errors既包括了actionErrors和filedErrors,上面语句的含义是取出errors中名字为name的第一个错误信息。

4.2 取得Map类型的request、session、application来传递参数(有两种方式)

ü 方式一:

首先,在后台中设置传递的值

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;

private Map
request;

private Map
session;

private Map
application;

……

request = (Map)ActionContext.getContext().get("request");

session = ActionContext.getContext().getSession();

application = ActionContext.getContext().getApplication();

……

//设置具体的值

request.put("r1",
"r1");

session.put("s1",
"s1");

application.put("a1",
"a1");

……

//实现三者的get、set方法(容易忽略)

public Map getRequest() {

returnrequest;

}

publicvoid setRequest(Map request) {

this.request = request;

}

然后,前台可以通过标签和request、session、application的方式获取

通过Struts2标签获取后台传递的值<br
/>

<s:property
value="#request.name"
/><br/>

<s:property
value="#session.name"
/><br/>

<s:property
value="#application.name"
/><br/>

通过request、session、application获取<br
/>

<%=request.getAttribute("name")
%><br/>

<%=session.getAttribute("name")
%><br/>

<%=application.getAttribute("name")
%><br/>

注意:通过Struts2标签取值时,由于request、session、application都是Stack
Context属性里面的值,必须通过格式“#request” + “属性名“才能取出。而放在了ActionContext中的属性则直接加#。


ü
方式二:

实现Struts2提供的3个接口:RequestAware、SessionAware、

ApplicationAware,然后实现对应的setRequest、setSession、setApplication方法,是取得request、session、application对象最常用的方法。实例:

publicclass LoginAction2
extends ActionSupport
implements RequestAware,SessionAware, ApplicationAware {

private Map<String, Object>
request;

private Map<String, Object>
session;

private Map<String, Object>
applicationStruts2基础知识
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: