Struts2基础

来源:互联网 发布:狗哥王兆辉 知乎 编辑:程序博客网 时间:2024/05/17 23:36

认识Struts2

Struts2中的控制器分为两部分:

核心控制器:web.xml中配置的StrutsPrepareAndExecuteFilter(过滤器),负责过滤所有的用户请求,根据不同的请求,分发给不同的Action处理。

业务控制器:业务控制器就是Action,负责调用模型来实现请求的业务,并把结果交给视图来展示。

 

 

搭建Struts2开发环境的步骤:

在项目中导入Struts2所必须的jar包。常用的jar包有:

commons-fileupload-1.2.2.jar struts文件的上传下载。

Commons-io-2.0.1.jar 文件读取

Commons-lang3-3.1.jar 为java.lang包提供扩展

Freemarker-2.3.19.jar 一个基于模板生成文本输出的通用工具

Ogln-3.0.5.jar 支持OGNL表达式

Struts2-core-2.3.4.1.jar struts2的核心包

Xwork-core-2.3.4.1.jar x-work的核心包

Javassist-3.11.0.GA.jar 分析、编辑和创建Java字节码的类库

修改web.xml配置文件。在web.xml文件的<web-app>节点下添加             StrutsPrepareAndExecuteFilter过滤器。它是struts2的核心控制器,负责拦截用户的请求,交给struts2的框架进行处理。

Web.xml

<web-app>

<filter>

<filter-name>

<filter-class>

org.apache.Struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

</filter-class>

</filter-name>

</filter>

<filter-mapping>

<filter-name>Struts2</filter-name>

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

</filter-mapping>

</web-app>

添加struts.xml配置文件。Struts.xmlstruts2的核心配置文件,该文件通常放在Src目录下,编译部署后,它就到了应用程序的WEB-INF\classes目录下。

 

使用struts2输出 “hello word” 需要完成以下两个步骤

添加并实现Action

struts.xml中配置<action><result>

HelloAction.java 关键代码

public class HelloAction extends ActionSupport{

public String print() throws Exception {

System.out.println(“hello world”);

return “success”;

}

}

 

Struts.xml配置文件关键代码:

<struts>

<package name=”default” namespace=”/” extends=”sturts-default”>

<action name=”hello” class=”com.action.HelloAction” method=”print”>

<result name=”success”>

/hello.jsp

</result>

</action>

</package>

</struts>

 

 

Action(业务控制器)

 

action接收参数的三种方式

属性方式接收

JavaBean方式接收

ModelDriven方式接收

 

属性方式接收:

Action.java关键代码:

public class UserAction extends ActionSupport{

Private String userName;

Private String password;

Getter()....setter().....

 

public String login() throws Exception{

Dao.login()......

return ”success”

}

Javabean方式接收:

public class UserAction extends ActionSupport{

Private User user;

Getter()....setter().....

 

public String login() throws Exception{

Dao.login()......

return ”success”

}

Jsp文件中属性要写成:name=”user.userName”  name=”user.password”

 

ModelDriven方式接收参数

UserAction.java要实现ModelDriven接口

public class UserAction implements ModelDriven{

private User user = new User();

public User getModel(){

return user;

}

 

 

public String login(){

.....

return “success”;

}

}

 

 

Method属性

使用method属性指定调用的方法,在一个Action中一般会有多个业务方法。

public class xxxAction extends ActionSupport{

//添加

Public String add(){

....

Return “add”;

}

Public String update(){

...

Return “update”;

}

...

 

Struts.xml文件

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

<action name=”xxx_add” class=”com.action.xxxAction” method=”add”>

<result>

/xxxadd.jsp

</result>

</action>

<action name=”xxx_update” class=”com.action.xxxAction” method=”update”>

<result>

/xxxupdate.jsp

</result>

</action>

</package>

使用通配符简化<action>的配置

<include>包含配置文件

Struts.xml文件:

<include file=”struts-user.xml”></include>

<include file=”struts-sale.xml”></include>

 

<result>的配置

<result>name属性可以根据Action中方法的返回值跳转到相应的页面。

如:

loginAction.java

public class UserAction extends ActionSupport{

...

public Stirng login(){

...

if(....){

return “login”;

}else{

return “relogin”;

}

}

}

 

Struts-user.xml文件

<package name=”default” namespace=”/user” extends=”struts-default”>

<action name=”login” class=”com.action.UserAction” method=”login”>

<result name=”login”>/index.jsp</result>

<result name=”relogin”>/login.jsp</result>

</action>

</package>

 

<result>type属性 

Ø dispatcher : 请求转发到指定的URL (默认)

Ø redirect : 请求重定向到指定的URL

Ø redirectAction : 请求重定向到指定的Action

Ø chain : Action 链式处理,将请求转发到指定的Action

Ø json: 实现Ajax时,返回JSON对象。

 

 

全局结果的配置

<global-results>

<result name=”error”>

/error.jsp

</result>

</global-results>

 

异常映射的配置

<global-results>

<result name=”error1”>/error1.jsp</result>

<result name=”error2”>/error2.jsp</result>

...

</global-results>

<global-exception-mapping>

<exception-mapping result=”error1” exception=”java.lang.NullPointerException”>

</exception-mapping>

<exception-mapping result=”error2” exception=”java.sql.SQLException”>

</exception-mapping>

</global-exception-mapping>

 

 

 

使用ActionContext访问 Servlet API

Struts2提供了一个ActionContext类,该类被称为action上下文或者action环境,action可以通过该类来访问最常用的Servlet API 最常用的方法:

getContext() 静态方法,获取当前的ActionContext实例

getSession() 返回一个Map对象,该对象模拟了session作用域

getApplication() 返回一个Map对象,该对象模拟了application作用域

get(String key) 对该方法传入”request”参数,即可返回一个Object对象,该对象模拟了request 作用域。

getParameters() 返回一个Map对象,该对象中保存了浏览器上传的参数。

 

例:

public class UserAction extends ActionSupport{

public String login(){

Map<String,Object> session = ActionContext.getContext().getSession();

session.put(“username”,user.getUserName());

 

 

拦截器

拦截器是Struts2处理请求的核心机制,它可以在Action被调用之前和之后执行代码。

Action接收参数和实现数据校验为例,说明拦截器的工作原理:

Struts2接收到请求后,创建Action的实例,此时Action中还没有接收上传的参数,

也没有对参数进行验证。

Struts2运行名称为params的拦截器,把请求中附带的参数转存到Action的属性中。

Struts2再运行名称为validation的拦截器,对Action属性中的参数进行验证。

验证通过后,运行Action中处理业务的方法,并得到处理结果,如“success”等

Action把处理结果返回给validation拦截器,再返回给params拦截器,最后Struts2

根据这个结果调用相应的视图来展示数据。

 

0 0