Struts入门
来源:互联网 发布:java 函数缺省参数 编辑:程序博客网 时间:2024/06/11 19:13
Struts
使用方式
- 编写Action,有三种方法:实现Action接口,继承ActionSupport类,普通类
- 配置文件:src下配置struts.xml(package标签,action标签,result标签)
- web.xml中配置过滤器
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <package name="demo" extends="struts-default" namespace="/"> //声明拦截器 <interceptors> <interceptor name="loginintercept" class="自定义拦截器包类路径"> </interceptor> </interceptors> <action name="访问路径_*" class="action类包类路径" method="{1}"> //使用自定义的拦截器 <interceptor-ref name="loginintercept"> /*配置让action里面哪个方法不进行拦截 param标签的name属性值 固定的:excludeMethods 在param标签里面,不进行拦截的方法名称 */ <param name="excludeMethods">不拦截的方法名</param> </interceptor-ref>//使用自定义的拦截器特点:struts2默认拦截器不会执行了需要把默认的拦截器手动使用一次 <interceptor-ref name="defaultStack"></interceptor-ref> <result name="list">/jsp/customer/list.jsp</result> </action> </package></struts>
拦截器
- 底层原理主要两部分
(1)aop思想:面向切面(方面)编程
在开发中,有基本功能,扩展基本功能,使用aop思想,不修改源代码扩展功能
(2)责任链模式: 类似于过滤链
过滤链:一个请求,可以有多个过滤器进行过滤,每个过滤器只有做放行,才能到下一个过滤器 - 拦截器在action对象创建之后,action里面的方法执行之前执行
使用方式
1)自定义拦截器实现
第一种 创建类,继承AbstractInterceptor
第二种 创建类,继承 MethodFilterInterceptor(常用)
2)struts.xml中声明拦截器
3)在具体使用拦截器的action标签里面使用声明拦截器
4)使用自定义拦截器之后,默认的拦截器不执行了,手动把默认的拦截器使用一次
5)通过配置方式,让action里面哪些方法不进行拦截
// web.xml中配置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>
执行流程
当我们发出一次请求的时后,会先经过过滤器,然后通过request的方法得到访问路径,拆分字符串就能得到一个值,拿着这个字符串去找struts.xml,使用dom4j解析xml之后,用这个值去和action标签的name属性值比较,如果一样的话就能得到class属性值,这个class属性值就是action类的路径,再利用反射技术加载该类执行里面的方法,然后得到一个返回值,在按着这个返回值去和resullt标签比较,一样就跳转到对相应的页面
获取表单数据
- ActionContext类获取:
该类不能直接new,有静态方法getContext,得到该对象再使用getParameters方法,返回一个map集合 - ServletActionContext类获取:
该类有静态方法能获取到HttpServletRequest,HttpServletresponse,ServleteContext,PageContext对象 - 实现接口
servletRequestAware
servletResponseAware
SessionAware
ServletContextAware
封装数据
- 传统封装:
先用HttpServletRequest获取到值,再创建对象赋值 - 属性封装:
在action类中创建成员变量,名称和页面中输入项的name属性值要一样,然后生成get,set方法 - 模型驱动:
让Action实现ModelDriven接口(泛型为要封装的数据类型),重写getModel方法,创建实体类对象,注意表单输入项的name属性值要和实体类的属性名称一样,getModel方法返回实体类对象- 复杂数据的封装
与属性封装步骤一致,但需要注意表单输入项name的写法对象 (页面)object.property
Map<String,Object> (页面)map['key'].property
List<Object> (页面)list[0].property
- 复杂数据的封装
OGNL
ognl表达式:获取值栈里面的数据
使用前提: 必须有ognl的jar包,还要引入struts 的标签库,与struts2的标签结合使用
使用 格式:<s:property value="ognl" />
特殊符号 # 获取到context中得值
%{}表单标签中的ognl表达式能按照原意执行
值栈
值栈:类似于域对象,可以存取值
- 内部结构
- root:是一个list集合,我们我操作的数据大多在list中
- context:是一个map集合,Context里面key名称是固定的,request、session、application、parameters、attr
- 像值栈中存值有三种方式:
第一种方式: 获取值栈(ValueStack)对象,调用值栈对象里面的set方法
第二种方式:获取值栈对象,调用值栈对象里面的push方法
第三种方式:在action成员变量位置定义变量,生成这个变量的get方法
1 1
- Struts 入门
- Struts入门
- Struts入门
- Struts入门
- struts 入门
- Struts入门
- struts入门
- struts入门
- Struts入门
- Struts入门
- Struts 入门
- Struts入门
- Struts入门
- struts入门
- struts入门
- Struts 入门
- struts入门
- struts入门
- PHP+jQuery+Flash完美演示翻盘抽奖
- 使用JavaWeb服务器管理数据源:Tomcat
- LeetCode: 3Sum Closest
- Android——Fragment(碎片)的静态加载方式....
- 美国MAK Technoligies介绍
- Struts入门
- cocos2d-JS导入demo工程
- 欢迎使用CSDN-markdown编辑器
- 利用html创建pdf文件
- 一个java白痴的努力录
- MySQL-创建计算字段
- 寻址存储器
- AIZU AOJ 2309 Vector Compression 最小树形图(朱—刘算法)
- 移植Freetype 到S3C2440