strut2

strut2


Struts2是一个基于MVC设计模式的Web应用框架,Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求。



Struts 2的Action是一个请求对应一个实例(每次请求时都新new出一个对象),没有线程安全方面的问题。


Struts2整合了OGNL(Object Graph NavigationLanguage)表达式(对象图形导航语言)。


Struts2使用“ValueStack”技术(值栈)。


拦截器:拦截是AOP的一种实现策略。在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。

AOP(Aspect Oriented Programming)面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延

续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从

而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率

AOP详细:http://www.tuicool.com/articles/QNny6r   或者  http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html


环境,jar包

核心包struts2-core-2.3.28.1strut2框架核心类库
xwork-core-2.3.28.1webwork核心包,strut2基于webwork
ognl-3.0.14ognl表达式支持包,用于读写 对象属性
依赖包commons-fileupload-1.3.1文件上传组件
commons-io-2.2文件传输依赖包
commons-lang3-3.2对java.lang 包增强
javassist-3.11.0.GA代码生成工具,运行时扩展java类
freemarker-2.3.22UI标签模板
commons-logging-版本.jarASF出品的日志包,在这里支持log4j和jdk日志记录
log4j-1.2.17.jar日志处理
asm-3.3.jar字节码读写
asm-commons-3.3.jar基于事件的表现形式
asm-tree-3.3.jar基于对象的表现形式


maven 创建struts2 的项目
1.添加jar包依赖
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.3.16.3</version>
</dependency>


2.配置web.xml  添加过滤器  让所有的请求都经过struts2处理 
StrutsPrepareAndExecuteFilter  核心控制器
 <!-- 添加过滤请求  交由struts2处理-->
    <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>


备注: init() 读取配置资源和常量

destroy() 销毁占用资源

doFilter() struts2入口

3.添加对应的请求的类  继承 ActionSupport类  (也可以使用实现Action接口)重写  excute的方法
public class LoginAction extends ActionSupport{


@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
}


4.添加struts.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundataion//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
   
<struts>
       <package name="helloworld" extends="struts-default">
       <action name="helloworld" class="com.controller.LoginAction">
           <result name="success">index.jsp</result>
       </action>
      </package>
</struts>


5.测试  发送helloworld请求-》到对应的xml中找匹配的action
->交给对应的action类来处理 ->重写了action的excute方法->返回对应的result
->在找struts.xml中匹配的result来处理->jsp  


Struts2 可以配置开发模式  


好处  修改XML文件后无需在次重启,能够显示更多的信息
 

缺点  运行效率降低

  <!-- 设置开发模式 -->
  <constant name="struts.devMode" value="true" />
  <!-- 热部署 -->
  <constant name="struts.configuration.xml.reload" value="true"/>


xml:配置说明:

<struts>下面可以多个package  package可以有多个action

package  主要用分包管理

name 名字  名字要见名知意

namespace  请求空间 相当在请求上面多加一个请求的地址(叫做请求前缀也可以)

extends    继承某个文件

name  代表着请求路径

class  由哪一个action 类来处理

method  表明该请求由哪一个方法来进行处理


Action 路径(命名空间):

相对路径:namespace + / + action.name

绝对路径:http://localhost:8080/project/namespace + / + action.name


动态调用 

package action;

import com.opensymphony.xwork2.ActionSupport;

public class EmployeeCrudAction extends ActionSupport {

public String create() {
System.out.println("employee create");
return SUCCESS;
}

public String retrieve() {
System.out.println("employee retrieve");
return SUCCESS;
}

public String update() {
System.out.println("employee update");
return SUCCESS;
}

public String delete() {
System.out.println("employee delete");
return SUCCESS;
}

}


package action;

import com.opensymphony.xwork2.ActionSupport;


public class StudentCrudAction extends ActionSupport {

public String create() {
System.out.println("student create");
return SUCCESS;
}

public String retrieve() {
System.out.println("student retrieve");
return SUCCESS;
}

public String update() {
System.out.println("student update");
return SUCCESS;
}

public String delete() {
System.out.println("student delete");
return SUCCESS;
}

}


xml 

   <package name="default" namespace="/" extends="struts-default">
    <action name="employee" class="action.EmployeeCrudAction">
<result>/index.jsp</result>
</action>

<action name="student" class="action.StudentCrudAction">
<result>/index.jsp</result>
</action>
    </package>


jsp:

<body>
<h1>测试DMI动态方法调用</h1>
<a href="employee!create.action">增加员工</a><br/>
<a href="employee!retrieve.prop">查询员工</a><br/>
<a href="employee!update.aaa">修改员工</a><br/>
<a href="employee!delete">删除员工</a><br/>
<hr />
<a href="student!create">增加学员</a><br/>
<a href="student!retrieve">查询学员</a><br/>
<a href="student!update">修改学员</a><br/>
<a href="student!delete">删除学员</a><br/>
</body>


Action的创建方式:

1 一个普通的java类,加上一个public String execute()方法        
优点:简单

2 实现 Action 接口,实现里面的execute方法, com.opensymphony.xwork2.Action

优点:可以使用Action中的常量;必须实现execute方法

3 ActionSupport 继承,添加execute方法。这好处在于可以直接使用Struts2封装好的方法。所以也最常用。

优点:包含2的优点;提供数据校验,国际化,序列化等功能。


如果在action配置中省略了class属性配置,默认是执行的什么?
action不指定class,默认会是com.opensymphony.xwork2.ActionSupport类, 它的execute()方法默认返回 "success"。


结果集:http://blog.csdn.net/jwq525727/article/details/5036954  详细类型

<result-types>元素可以知道Struts2支持的结果类型(14种)
dispatcher:默认方式
redirect: 重定向
redirectAction: 重定向到一个Action
chain:转发

plainText: 表示显示某个页面的原代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值