首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

struts2总结1

2012-10-07 
struts2小结1Struts2小结1???????????????????????????????????????????????????????????????????????????

struts2小结1

Struts2小结1

?????????????????????????????????????????????????????????????????????????????????????????????????????? 作者:卢海

struts2每次访问一个action时都会new一个新的对象出来,不会出现线程同步问题
struts1每次初始化时会将action new出来,相同请求会调用同一个action,会出现线程同步问题

和spring-test-2.5.6.jar不需copy 到lib目录下。

注意将commons-logging.jar ?copy到lib 下 有的struts版本此实例中没后此jar包需从其他实例中copy入

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

? <constant name="struts.devMode" value="true" />

在相应jar包上右键Property 添加相应路径

核心包的路径 \struts-2.1.8.1-all\struts-2.1.8.1\src\core\src\main\java

核心包doc 文档路径:/struts-2.1.8.1-all/struts-2.1.8.1/docs/struts2-core/apidocs/

在window –preferences中搜索catalog 添加? 选择 uri 名称写stuts.xml 中的地址

如http://struts.apache.org/dtds/struts-2.0.dtd 然后将location 中填入core核心包中的相应DTD文件

Window –preferences 搜索jsp 将encoding改为 Chinese

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

??????? <action name="hello">

??????????? <result>

??????????? /hello.jsp

??????????? </result>

??????? </action>

</package>

?

解析 namespace 代表访问时的命名空间只有在此命名空间下才能调用其下的action

??? <action>中的name属性代表访问路径 result代表返回的页面

?

访问此action:
??????????????? http://localhost:8080/项目名/action名

namespace 必须用/开头 访问对应的action时要加上相应的namespace名称

若namespace为空时在任何路径都可访问,可解决特殊问题

没有名称时就加代表success

Struts2 可以将任何一个类的名称为execute 返回值为String 的方法当做action

即一个普通java类 便于测试。

若在action中没有写class 则action会自动执行默认的action类。

Action类的定义方法

定义返回值为String 方法名为execute的方法。

实际开发中采用第三种方法因为它为我们提供了一些工具方法,方便调用。

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

??????? <action name="hello" class="actions.Test1">

??????????? <result name="success">

??????????? /hello.jsp

??????????? </result>

??????? </action>

??? ??? </package>

?

??? 类的代码:

package actions;

?

import com.opensymphony.xwork2.ActionSupport;

?

?

?

public class Test1? extends ActionSupport{

?

??? @Override

??? public String execute() throws Exception {

?????? // TODO Auto-generated method stub

?????? System.out.println("hello");

?????? return "success";

??? }

}

?

在jsp界面中加入

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

???????? 在<head></head>中加入

?????????????????? <base href="<%=basePath%>">

??? 这样所有的链接会自动定位到项目根路径

Stuts2.0中的所有的链接界面对应的路径为映射路径而不是实际路径,所以在struts2.0中应尽量使用绝对路径

Action执行的时候并不一定要执行execute方法

可以在配置文件中配置Action的时候用method 属性来指定执行哪个方法

也可以在调用时使用同一个action然后加!号后加方法名

<a href="user/user!add">添加用户</a>

一般使用后一种方法避免出现过多的action

使用通配符可以最少化代码量

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

??????? <action name="*_*" class="actions2.{1}" method="{2}">

??????? <result name="success">/{1}_{2}.jsp</result>

??????? </action>

</package>

可以根据统配符的内容自动找到相关类相关方法

注意 通配符的占位符是从1开始的

在调用的Action中定义与参数名相同的String类型的参数,添加get set方

即可得到相应的参数值。

十一、通过域模型DomainMode得到参数

???????? 即写一个pojo类 此类中含有相应的参数值,在传值时采用对象.属性名传参,接受action类只需写pojo类的get set 方法即可。

?

十二、ModelDriven接受参数

???????? 在传参时写字段名称=值,在接收的Action类实现ModelDriven接口实现其getModel方法,返回值为接受的pojo对象,即可得到封装好的pojo对象。

例:

???????? 传参:?name=aa&age=12"

???????? 接受类:implements ModelDriven<pojo.Student>

???????? 实现方法:???? public pojo.Student getModel() {

?????????????????? ??????????????????????????? return stu;

???????? ???????????????????????????????????? }

???????? 返回值为new 好的stu对象

???????? pojo.Student stu=new pojo.Student();

?

十三、中文乱码问题

在stucts的配置文件中加入:

<constant name="struts.i18n.encoding" value="GBK" />

国际化配置

有些版本设置后还会出现乱码问题,应自己手写一个filter来解决

在2.1.7版本后会解决

或将web.xml的Stuts配置换成2.0的 配置

<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

十四、 简单数据校验

???????????????????????????????????? 在action中放入错误信息

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

?

1 楼 passtheball 2010-04-02   楼主,标题写错了 2 楼 greatwqs 2010-04-02   很乱,什么都在说.. 3 楼 adairfly 2010-04-02   还不错啊 关于Struts2的部分小结 4 楼 pochonlee 2010-04-02   木有什么现实意义! 5 楼 ivyshark 2010-04-02   能不能行?
我就问能不能 我就问能不能???? 6 楼 rsmh 2010-04-02   这几天都在看马士兵的struts2视频教程,貌似楼主的帖子是从中总结出来的。对于我经常的复习巩固很有帮助,谢谢咯 7 楼 meiowei 2010-04-02   为什么很多人都会把struts写成structs或者strutcs呢?无解 8 楼 Diego玄霄 2010-04-02   struts2 中标签还是有BUG,  队友input中的值如果有空格间隔的话,取不到第一个空格之后的值! 9 楼 edgar615 2010-04-02   都忘记struts有些什么配置了
每次都是复制粘贴 10 楼 jwx0925 2010-04-02   楼主写的不错!我也在学习基础,感觉很实用~ 11 楼 changeItMore 2010-04-02   继续加油吧,距离还很远 12 楼 xbcoil 2010-04-03   Struts 通配符挺好.的... 13 楼 rubys 2010-04-03   它的 convention + rest 会更舒服的,呵呵 14 楼 JesseyHu 2010-04-03   期待楼主小结X出现。

热点排行