Stust2配置

来源:互联网 发布:dnf刷图脚本源码 编辑:程序博客网 时间:2024/05/19 23:00

Struts2配置

目录

Struts2配置 1

Struts2文件加载顺序 1

Struts.Xml的配置 2

constant常量配置 2

package元素 2

namespace命名空间 2

Action元素的配置 3

method属性 3

动态方法调用 3

通配符(*)的使用 4

配置默认Action 5

 

 

Struts2文件加载顺序

 

 

注:Struts 2.0版本的核心控制器为org.apache.struts2.dispatcher.FilterDispatcher

2.1.3之后FilterDispatcher 不推荐使用,而被StrutsPrepareAndExecuteFilter

struts.xml

核心配置文件,主要负责管理Action

通常放在WEB-INF/classes目录下,在该目录下的struts.xml文件可以被自动加载 

 

 

 

Struts.Xml的配置

constant常量配置

常量配置,推荐在struts.properties中进行配置,如我们常写的配置有一下几个。

Ø struts.action.extension=action

Ø struts.custom.i18n.resources= msg

Ø struts.i18n.reload = true

Ø struts.configuration.xml.reload = true

Ø struts.devMode = true

配置方式1<constant name="struts.action.extension" value="action"></constant>

配置方式2:在src下创建struts.properties文件struts.action.extension=action

 

package元素 

包的作用:简化维护工作,提高重用性,组织功能模块

包可以“继承”已定义的包,并可以添加自己包的配置

name属性为必需的且唯一,用于指定包的名称

extends属性指定要扩展的包

namespace属性定义该包中action的命名空间,为可选属性

 

namespace命名空间

该参数在strutspackage中,对整个包中的访问添加命名空间

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

<action name="helloWorld" class="base.HelloAction">

<result name="success">/hello.jsp</result>

</action>

</package>

如果使用以上命名空间访问action helloWorld需要通过路径:

http://localhost:8080/web应用名称/helloWorld

 

如果把配置文件改为

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

<action name="helloWorld" class="base.HelloAction">

<result name="success">/hello.jsp</result>

</action>

</package>

那么访问路径应该改为:

http://localhost:8080/web应用名称/n1/helloWorld

 

至于extends属性,如果没有特殊原因一般的值都是struts-default

 

Action元素的配置

Action类的作用:

封装工作单元

数据转移的场所

返回结果字符串

 

Action标签中class属性可以省略,省略后,服务器会把请求交由ActionSupport处理,默认返回”success”

<action name="classTest">

<result>/hello.jsp</result>

</action>

 

 

 

method属性

实现Action中不同方法的调用

<action name="zhuceXml"class="base.ZhuceXmlAction"method="zhuce">

<result name="success">/loginsuccess.jsp</result>

<result name="input">/zhuce.jsp</result>

</action>

动态方法调用

作用:减少Action数量

使用:actionName!methodName.action

禁用:将属性struts.enable.DynamicMethodInvocation设置为false

Action代码:

public class HelloActionimplements Action{

@Override

public String execute()throws Exception {

return "success";

}

public String test1(){

System.out.println("使用动态方法调用");

return"success";

}

}

 

 

Struts.xml配置

<struts>

<constantname="struts.enable.DynamicMethodInvocation" value="true"></constant>

<packagename="default" namespace="/" extends="struts-default">

<action name="helloWorld" class="base.HelloAction">

<result name="success">/hello.jsp</result>

</action>

</package>

</struts>

访问路径  http://localhost:8080/web应用名称/helloWorld!test1.action

 

通配符(*)的使用

另一种形式的动态方法调用

Struts.xml  

<action name="*user" class="base.UserAction" method="{1}">

<result>/{1}success.jsp</result>

<result name="fail">/{1}.jsp</result>

</action>

*代表任意个字符

{1}就是第一个*的值

访问http://localhost:8080/web应用名称/loginuser 

访问UserAction中的login方法

成功:返回loginsuccess.jsp

  失败:返回login.jsp

访问http://localhost:8080/web应用名称/reguser 

访问UserAction中的reg方法

成功:返回regsuccess.jsp

  失败:返回reg.jsp

 

配置默认Action 

没有Action匹配请求时,默认Action将被执行

通过<default-action-ref … />元素配置默认Action

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

<default-action-ref name="defaultAction">

</default-action-ref>

<action name="defaultAction">

<result>/404.jsp</result>

</action>

<!—省略其他-->

</package>

效果:如果访问action不存在,则跳转到404.jsp页面

多配置文件

serlvet如果采用配置文件去配置,我们会发现,如果servlet类写的太多了,web.xml文件会很庞大。没有一个很好的区分方。Struts就解决了这个问题

Struts框架,可以写很多配置文件,这些配置文件在运行时,也可以采用多种方式整合到一起。struts默认只会读取classpath下的struts.xml这个配置文件。

我们可以把所有自己写的struts配置文件,采用包导入的方式,导入到系统默认读取的struts.xml配置文件中。如:下面有三个strust的配置,但是,系统只读struts.xml

struts.xml文件中,采用下面方法整合

<include file="struts-news.xml"></include>

如果配置文件在某个包下面,导入方法为:

<include file="com/yinhe/struts/xml/struts-news.xml"></include>

注:如果使用include引入xml文件,注意包含的文件中package标签的名称不要重复

 

全局返回结果和局部返回结果

直接在action标签的外部写的result称为全局返回结构,该返回结果可以给所有的action使用。如果既有全局返回结果又有局部返回结果,在该action中,以局部返回结果为主。

全局返回记过声明代码如下:

<global-results>

<result name="error">/error.jsp</result>

</global-results>

注:global-resultsdefault-action-ref标签不要同时出现在同一个package下,不然会报错

Result配置

<result  name=”” type=””></result>

如果name不填,默认那么的值为”success”

如果type不填,默认type的值为“dispatcher

 

 

 

 

Type属性常见值

dispatcher类型

默认结果类型,后台使用RequestDispatcher转发请求(转发到jsp

redirect类型

后台使用的sendRedirect()将请求重定向至指定的URL(重定向到jsp

<result name="success" type="redirect">/loginsuccess.jsp</result>

redirectAction类型

主要用于重定向到Action (重定向到action

<action name="login"class="base.LoginAction">

<result name="success"type="redirectAction">listuser</result>

<result name="fail">/login.jsp</result>

</action>

如果带参数

<action name="login"class="base.LoginAction">

<result name="success"type="redirectAction">

<param name="actionName">listuser</param>

<param name="msg">i love java</param>

<param name="namespace">/</param>

</result>

<result name="fail">/login.jsp</result>

</action>

或者缩写方式

<action name="login"class="base.LoginAction">

<result name="success"

 type="redirectAction">listuser.action?msg=hi</result>

<result name="fail">/login.jsp</result>

</action>

或者可以使用ongl表达式传值

<action name="login"class="base.LoginAction">

<result name="success"

 type="redirectAction">listuser.action?msg=${uname}</result>

<result name="fail">/login.jsp</result>

</action>

 

 

 

 

 

 

 

 

 

 

 

struts的两种驱动:属性驱动;模型驱动

属性驱动

直接在action中声明一些属性,然后生成get/set方法的方式,称为属性驱动,

如:在loginAction类中写上

使用属性驱动封装对象action 代码

public class UserAction extends ActionSupport{

UserService us=new UserService();

private ArrayList<User>al;

private Stringmsg;

private Useruser;

public String add(){

us.add(user);

return "addsuccess";

}

public String list(){

al=us.list();

System.out.println(msg);

return "success";

}//省略get/set方法(包括user对象的)

}

Jsp代码

<form action="adduser" method="post">

    用户名:<input type="text" name="user.uname"/><br/>

    密码:<input type="text" name="user.psw"/><br/>

    手机号:<input type="text" name="user.phone"/><br/>

    <input type="submit" value="新增"/><br/>

    </form>

模型驱动

先写一个普通的action类,然后实现一个ModelDriven接口,在这个接口中直接把你的User让入泛型中,在生成一个getModel方法,这个方法就会返回一个有值的user对象,这个值是在表单调校后,表单的数据被封装在User对象中,由模型驱动把这个对象通过getModel方法带入我们的action类中,我们就可以再我们的逻辑方法中,直接使用该对象的值。

Action

public class UserAction extends ActionSupport implements ModelDriven<User>{

private User user = new User();

 

public String login(){

return null;

}

@Override

public UserBean getModel() {

return user;

}

}

Jsp代码

<form action="loginuser.action"method="post">

   用户名:<input type="text"name="uname"/><br>

        码:<input type="password"name="psw"/><br>

   <input type="submit"value="登陆"/><br>

</form>


原创粉丝点击