struts介绍
Struts 2是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。lStruts 2以WebWork为核心,采用拦截器的机制,来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开。
Struts和Webwork同为服务于Web的一种MVC框架。
框架:就是半成品,框架已经完成一些通用功能。只需要实现与业务有关功能。
框架的优势:
- 不用侵入性比较高的Servlet.可以直接写普通java类作为处理请求逻辑的处理类.
- 这样更易于测试.
- 整合了一些之前需要手动来做的功能. 后台验证,表单回显,自动将表单参数封装,防止表单重复提交...
- 如果不够用我们还可以扩展框架的功能.
struts核心功能
- 在Action的实现方面,可以是一个普通的POJO
POJO(Plain Old Java Objects)。 - 线程模型方面,Action是一个请求对应一个实例(新new一个对象),没有线程安全方面的问题。
- Servlet依赖方面,Action不再依赖于Servlet API,有利于测试
实现TDD(Test-Driven Development,测试驱动开发)。 - 封装请求参数,可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。
- 表达式语言方面,整合了OGNL
OGNL(Object Graph NavigationLanguage)对象图形导航语言。 - 绑定值到视图技术,使用"ValueStack"技术。
- 类型转换,使用OGNL进行转换,可以更方便的使用。
- 数据校验,支持重写validate方法或者使用XWork的验证框架。
- 基于Spring AOP思想的拦截器机制,更易扩展
struts目录结构
struts的jar包介绍
struts的架构图解
编写hello world
- 导入jar包
- Action类(请求处理类)
package cn.itcast.b_constant; import java.util.Arrays; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; public class Demo1Action { public String execute(){ return "success"; } }
- 核心配置文件:struts.xml
<!-- http://localhost:8080/struts2-mini/HelloAction.action http://localhost:8080/struts2-mini/aaa/HelloAction.action name:单纯的给包起一个名字,不要与其他包名重复 namespace: 为action访问加上一层或多层路径 extends: 继承一个其他包,目的是引入其他包的配置 --> <package name="hello" namespace="/aaa" extends="struts-default" > <!-- name: 为我们的action类加上一个标识,在访问时填入name名称.就可以找到action class: action完整类名 method:处理的方法 --> <action name="HelloAction" class="cn.itcast.action.HelloAction" method="execute" > <!-- name:返回结果的标识,用于找到结果路径 type: 可以决定跳转到结果的方式=> 转发,重定向..... --> <result name="success" type="dispatcher" >/index.jsp</result> </action> </package>
- web.xml配置过滤器
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <!-- 重要: 配置struts2的核心过滤器 --> <!-- 注意: 配置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> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
- 测试