<<struts-2.3.16.3-all.zip>>
<<Struts2核心jar包.rar>>
Struts2 简介
Struts2 HelloWorld
配置项目
配置web.xml
<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>
配置Struts2的核心控制器 |
Struts配置文件(struts.xml)
<<struts.xml>>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> </struts> |
Struts2 原理介绍
根据web.xml配置筛选请求,获取后与Struts.xml中的信息匹配到对应的action,处理对应操作
Struts2 核心知识
Struts2 get/set 自动获取/设置数据
struts2会自动获取请求的数据并设置到对应变量中
ActionSupport 类引入(一般全部Servlet继承ActionSupport )
被Action类更强大
Action 设置数据
第一种方式:属性驱动(FieldDriven)
基本数据类型属性
login.xml提交数据
提交数据处理
web.xml指定对应的action操作
将参数封装成javaBean对象后由对应Service处理
处理好返回处理结果,根据结果跳转jsp页面,
跳转jsp页面在struts.xml匹配返回的参数分配对应jsp页面,默认跳转到index.jsp
struts.xml配置
JavaBean类型属性 (一般全部使用这种)
login.xml提交数据
提交数据处理
struts.xml配置
第二种方式:模型驱动(ModelDriven)(只能接收一种类型数据)
login.xml提交数据
提交数据处理
struts.xml配置
Struts2 处理传入多个值
批量获取多个值(使用数组)
处理数目不定的字符串;
jsp请求
action处理(Struts会自动塞到数组中去)
处理数目不定的 JavaBean 对象
jsp请求(必须按照javaBean对象的格式填写)
action处理(Struts会自动塞到JavaBean类型的List集合中去)
struts.xml 配置(修改后服务器需要重启)
package 配置
package用于区分action的(分类管理,划分模块的,没有实际作用)
extends用于继承包(继承某些拦截器或其他用)
namespace设置后访问包内部的action必须加namespace设置的url前缀(有前缀区分后里面的action名字可以一样,默认认为是目录作用的)(${pageContext.request.contextPath}/success.jsp这样访问的是绝对路径忽略namespace设置)(用于分类的)
abstract 抽象包(不可以写具体的实现)(设置好后让其他用于实现的包继承)
Action 配置
name action名字(按照action名字调用action)
class 具体的请求处理类
method 方法 (action默认执行的就是method设置的方法)(指定设置的方法)
acation中设置方法
分模块配置方法
Struts.xml配置
cheliang.xml配置
url请求
使用通配符(*号)
将action的name名,后缀加*后
jsp请求(都可以请求到action)
多个通配符使用
动态方法调用(默认是false不使用)
开启动态方法调用:<constant name="struts.enable.DynamicMethodInvocation" value="true" />
jsp请求(action名!有使用的action的方法)(自动对应执行action的方法)
Action 生命周期
每次请求都创建一个action实例(不是单例模式)(数据安全但资源占用高)
result 配置
type 默认是 dispatcher 内部转发
type 为 redirect 重定向(重定向到一个页面,数据不能共享)
type 为 chain 链条(返回到一个新的页面继续处理,数据共享不同处理)
type 为 redirectAction 重定向到 action(重定向到一个新的action,数据无法共享)
上面 4 个常用,一定要掌握
其他
其他 freemarker freemarker 模版
httpheader 返回一个已配置好的 HTTP 头信息响应
stream 将原始数据作为流传递回浏览器端,
velocity 呈现 Velocity 模板
xslt 该 XML 可以通过 XSL 模板进行转换
plaintext 返回普通文本类容
result 全局配置
Struts2 拦截器
拦截器简介(在执行action之前或之后做一些拦截操作)
Struts2 预定义拦截器&拦截器栈
自定义拦截器简单实例一
Strusts.xml配置
拦截器处理
action做对应处理
处理后返回数值struts对应到jsp页面响应
自定义拦截器-登录验证拦截器(使用拦截器栈可以避免重复定义拦截器)
值栈与 OGNL
值栈简介(每次请求actoion会自动封装使用的数据到一块内存中)
OGNL 引入
action设置值栈数据
jsp页面获取值栈数据
导入标签
获取值
OGNL 访问复杂对象(都存在值栈中访问值栈获取)
访问Javabean对象
创建javabean类
action中设置javabean对象
jsp页面设置ognl可访问的javabean数据
访问list集合对象
action中设置list对象集合
jsp页面设置ognl可访问的数据
访问map对象
action中设置map对象
jsp页面设置ognl可访问的数据
OGNL 访问静态方法和属性
在类中设置静态属性和静态方法
jsp页面设置ognl可访问的静态属性和静态方法的数据
默认不允许访问静态方法的,需要在struts.xml中设置
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant> |
Struts2 标签
Struts2 标签简介
Struts2 数据标签(核心标签)
Property 标签:输出 OGNL 表达式的值
//设置值 %> <s:property value="#request.name" /><br/> //没有name2的值,default设置值 <s:property value="#request.name2" default="某某人"/><br/> //escapeHtml设置false,开启使用html显示信息 <s:property value="#request.name" default="某某人" escapeHtml="false"/><br/> |
Set 标签:设置变量
//设置值,scope设置范围 //取值,#范围.属性名 <s:property value="#i" /><br/> |
Bean 标签:定义 javaBean 对象
//设置值,定义javabean对象,设置Javabean属性 <s:bean name="model.Student" var="student"> <s:property value="#student.name"/> |
Date 标签:日期标签
//设置值 ${date }<br/> |
Debug 标签:调试标签(可以看到一些各范围的数据信息)
<s:debug></s:debug> |
Url&a 标签:超链接标签
//设置超链接 //使用超链接() <s:a href="%{h}">超链接</s:a> //第二种(一般使用第二种不用单独设置) <s:a action="hello" namespace="/foreground"> |
Include 标签:动态包含标签
//设置包含的对象 |
Struts2 控制标签
Ifelse 标签:条件判断标签
<s:if test="#request.age<20"> 年龄小于20岁 <s:elseif test="#request.age==20"> </s:elseif> <s:else> 年龄大于20岁 |
Iterator 标签:遍历标签
<s:iterator value="#request.studentList" status="status"> <tr> <td><s:property value="id"/></td> <td><s:property value="age"/></td> </tr> |
Append 标签:叠加标签
//将两个list中的数据叠加添加到另一个list中(list1后接list2数据) |
Generator 标签:分隔标签
//将var的值用,分割获取分割后的单个数据 <s:generator separator="," val="'张三,李四,王五'" var="nameList"></s:generator> <s:iterator value="#nameList"> |
Merge 标签:组合标签
//将两个list中的数据叠加添加到另一个list中(list1和list2数据混合到list3中) <s:merge var="studentList3"> |
Sort 标签:排序标签
//对list1进行排序,根据比较器排序 <s:bean id="myComparator" name="comparator.MyComparator"></s:bean> <s:sort comparator="#myComparator" source="#request.studentList1" > <s:iterator status="status"> //定义比较器 |
Subset 标签:截取标签
//索引数据,count要索引的数据个数,start从第几个开始索引(从零计数) |
Strut2 界面标签
Form 标签:表单提交标签
//namespace可以区分地址名 <s:form action="hello" method="post" namespace="/foreground"> |
Text 标签:文本标签
用户名:<s:textfield name="userName"></s:textfield><br/> |
Radios 标签:单选标签
//list里是要设置的选项,value是默认选中那个 性别:<s:radio list="#{0: '男 ', 1:'女 '}" name="sex" value="0" /> area><br/> |
Checkboxlist 标签:复选框标签
//同radio一样 爱好:<s:checkboxlist list="#{0: '游泳', 1:'唱歌 ',2:'跳舞'}" name="hobby" value="1" /> |
Select 标签:下拉框标签
//同radio一样,multiple为false支持多选 爱好:<s:select list="#{0: '游泳', 1:'唱歌 ',2:'跳舞'}" name="hobby" value="1" multiple="true"/> |
Strut2支持ui多个主题(都封装可以更好地换主题)
Strut2其他标签
Updownselect 标签(用于控制标签的选择)
<s:updownselect |
Optiontransferselect 标签 (根据显示的各部分自己修改)
<s:optiontransferselect label="选择你喜欢图书" //标题 //左边的 name="cnbook" leftTitle="中文图书" list="{'struts2权威指南','轻量级javaeye 企业应用空实战','ajax讲义'}" //右边的 doubleName="enBook" rightTitle="外文图书" doubleList="{'JavaScrip:The definitive Guide','export one-to-one'}" multiple="true"
addToLeftLabel="向左移动" addToRightLabel="向右移动" addAllToRightLabel="全部右移" addAllToLeftLabel="全部左移" doubleHeaderValue="选择外文图书" doubleMultiple="true" doubleEmptyOption="true"
leftDownLabel="向下移动" //操作标签 |
Struts2 国际化
国际化简介
Struts2 国际化设置
设置Strut.xml(java1234为配置文件的名字)
<constant name="struts.custom.i18n.resources" value="java1234"></constant> |
设置配置文件
配置java1234.properties文件(默认中文)
//属性=要显示信息的Unicode编码 userName=u7528u6237u540d
//用户名的Unicode编码 |
分别配置对应的显示信息(自动根据环境匹配的信息)
英文使用({0}为要使用的参数)
中文使用
JSP页面(传递要使用的参数)
选择Unicode编码
Struts2 验证框架
Struts2 验证简介
Struts2 内置验证
目录结构
配置文件
<validators> //普通字段验证 <field name="user.userName"> //字段验证器,必填项 <field-validator type="requiredstring"> //提示信息
<message>请输入用户名</message> //对字段长度进行设置
<field-validator type="stringlength"> //int型默认自动设置为0 <field-validator type="int"> //字段必须大于 <param name="min">18</param> //必须是邮件类型的字段
<field-validator type="email"> //必须是网页类型的字段
<field-validator type="url"> //验证表达式 //表达式类型 <validator type="expression"> //字段与已存储字段的比较(表达式<![CDATA[表达式内容]]>) <param name="expression"><![CDATA[!user.name.equals(user.userName)]]></param>
|
配置Strut.xml文件
自定义验证(使用validators)
自定义验证器类(继承FieldValidatorSupport)
将验证器添加到配置文件中
<<validators.xml>>
配置文件
<validators> |
配置Strut.xml文件
设置jsp页面请求
Struts2 文件上传和下载
Struts2 文件上传
配置jsp页面(type为file)
action处理(上传文件的名字和处理文件的名字保持一致)
配置struts.xml(使用拦截器)
配置文件的大小及类型
大文件上传(默认2M)
<constant name="struts.multipart.maxSize" value="20000000"></constant> |
设置struts.multipart.maxSize的value值 |
多文件上传(改成数组)
配置jsp页面(变成数组)
action处理(文件对象,文件名,文件类型都变成数组)
配置struts.xml
Struts2 文件下载(返回的是文件流(默认ISO8859-1))
action处理(将指定位置的文件对象转化为文件流)
配置struts.xml
配置jsp页面
Struts2 防重复提交
重复提交
页面在刷新时用户再次提交,延迟时的提交处理
使用<s:token/>标签防重复提交
配置jsp页面(每次都会进行记录一次)
配置struts.xml(通过返回值识别重复提交进行处理)
使用 tokenSession 拦截器防重复提交(无视重复提交)
配置struts.xml
<interceptor-ref name="tokenSession"></interceptor-ref> |