Struts2基础

<<struts-2.3.16.3-all.zip>>

<<Struts2核心jar包.rar>>

Struts2 简介

Struts2基础

Struts2 HelloWorld

配置项目

Struts2基础

配置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会自动获取请求的数据并设置到对应变量中

Struts2基础

   

Struts2基础

ActionSupport 类引入(一般全部Servlet继承ActionSupport )

被Action类更强大

Struts2基础

Action 设置数据

Struts2基础

第一种方式:属性驱动(FieldDriven)

基本数据类型属性

login.xml提交数据

Struts2基础

提交数据处理

web.xml指定对应的action操作

将参数封装成javaBean对象后由对应Service处理

处理好返回处理结果,根据结果跳转jsp页面,

跳转jsp页面在struts.xml匹配返回的参数分配对应jsp页面,默认跳转到index.jsp

Struts2基础

   

Struts2基础

   

struts.xml配置

Struts2基础

JavaBean类型属性 (一般全部使用这种)

login.xml提交数据

Struts2基础

提交数据处理

Struts2基础

struts.xml配置

Struts2基础

第二种方式:模型驱动(ModelDriven)(只能接收一种类型数据)

login.xml提交数据

Struts2基础

提交数据处理

Struts2基础

struts.xml配置

Struts2基础

Struts2 处理传入多个值

批量获取多个值(使用数组)

处理数目不定的字符串;

jsp请求

Struts2基础

action处理(Struts会自动塞到数组中去)

Struts2基础

处理数目不定的 JavaBean 对象

jsp请求(必须按照javaBean对象的格式填写)

Struts2基础

action处理(Struts会自动塞到JavaBean类型的List集合中去)

Struts2基础

struts.xml 配置(修改后服务器需要重启)

package 配置

Struts2基础

package用于区分action的(分类管理,划分模块的,没有实际作用)

extends用于继承包(继承某些拦截器或其他用)

namespace设置后访问包内部的action必须加namespace设置的url前缀(有前缀区分后里面的action名字可以一样,默认认为是目录作用的)(${pageContext.request.contextPath}/success.jsp这样访问的是绝对路径忽略namespace设置)(用于分类的)

Struts2基础

abstract 抽象包(不可以写具体的实现)(设置好后让其他用于实现的包继承)

Action 配置

name action名字(按照action名字调用action)

class 具体的请求处理类

method 方法 (action默认执行的就是method设置的方法)(指定设置的方法)

acation中设置方法

Struts2基础

分模块配置方法

Struts.xml配置

Struts2基础

cheliang.xml配置

Struts2基础

url请求

Struts2基础

   

Struts2基础

使用通配符(*号)

将action的name名,后缀加*后

Struts2基础

jsp请求(都可以请求到action)

Struts2基础

多个通配符使用

Struts2基础

动态方法调用(默认是false不使用)

开启动态方法调用:<constant name="struts.enable.DynamicMethodInvocation" value="true" />

jsp请求(action名!有使用的action的方法)(自动对应执行action的方法)

Struts2基础

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基础

Struts2 拦截器

拦截器简介(在执行action之前或之后做一些拦截操作)

Struts2基础

Struts2 预定义拦截器&拦截器栈

自定义拦截器简单实例一

Strusts.xml配置

Struts2基础

拦截器处理

Struts2基础

action做对应处理

处理后返回数值struts对应到jsp页面响应

自定义拦截器-登录验证拦截器(使用拦截器栈可以避免重复定义拦截器)

Struts2基础

值栈与 OGNL

值栈简介(每次请求actoion会自动封装使用的数据到一块内存中)

Struts2基础

OGNL 引入

Struts2基础

action设置值栈数据

Struts2基础

jsp页面获取值栈数据

导入标签

Struts2基础

获取值

Struts2基础

OGNL 访问复杂对象(都存在值栈中访问值栈获取)

Struts2基础

访问Javabean对象

创建javabean类

action中设置javabean对象

Struts2基础

jsp页面设置ognl可访问的javabean数据

Struts2基础

访问list集合对象

action中设置list对象集合

Struts2基础

jsp页面设置ognl可访问的数据

Struts2基础

访问map对象

action中设置map对象

Struts2基础

jsp页面设置ognl可访问的数据

Struts2基础

OGNL 访问静态方法和属性

Struts2基础

在类中设置静态属性和静态方法

Struts2基础

jsp页面设置ognl可访问的静态属性和静态方法的数据

Struts2基础

默认不允许访问静态方法的,需要在struts.xml中设置

<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

Struts2 标签

Struts2 标签简介

Struts2基础

Struts2 数据标签(核心标签)

Struts2基础

Property 标签:输出 OGNL 表达式的值

//设置值
<%
        request.setAttribute("name","<font color=red>张三</font>");

%>
//取值

<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:set var="i" value="1"></s:set>
<s:set var="a" value="'action范围的值'" scope="action"></s:set>
<s:set var="p" value="'page范围的值'" scope="page"></s:set>
<s:set var="r" value="'request范围的值'" scope="request"></s:set>
<s:set var="s" value="'session范围的值'" scope="session"></s:set>
<s:set var="app" value="'application范围的值'" scope="application"></s:set>

//取值,#范围.属性名

<s:property value="#i" /><br/>
<s:property value="#a" /><br/>
<s:property value="#attr.p"/><br/>
<s:property value="#request.r"/><br/>
<s:property value="#session.s"/><br/>
<s:property value="#application.app"/><br/>

Bean 标签:定义 javaBean 对象

//设置值,定义javabean对象,设置Javabean属性

<s:bean name="model.Student" var="student">
        <s:param name="name" value="'张三'"></s:param>
        <s:param name="age" value="10"></s:param>
</s:bean>
//取值,对象.属性

<s:property value="#student.name"/>
<s:property value="#student.age"/>

Date 标签:日期标签

//设置值
<%
        request.setAttribute("date",new Date());
%>
//取值

${date }<br/>
当前日期:<s:date name="#request.date" format="yyyy-MM-dd"/>

Debug 标签:调试标签(可以看到一些各范围的数据信息)

<s:debug></s:debug>

Url&a 标签:超链接标签

//设置超链接
<s:url action="hello" namespace="/foreground" id="h">
        <s:param name="name" value="'struts2'"></s:param>
</s:url>

//使用超链接()

<s:a href="%{h}">超链接</s:a>

//第二种(一般使用第二种不用单独设置)

<s:a action="hello" namespace="/foreground">
        <s:param name="name" value="'struts2'"></s:param>
        超链接2
</s:a>

Include 标签:动态包含标签

//设置包含的对象
<s:include value="head.html"></s:include>

Struts2 控制标签

Struts2基础

Ifelse 标签:条件判断标签

<s:if test="#request.age<20">

        年龄小于20岁
</s:if>

<s:elseif test="#request.age==20">
        年龄等于20岁

</s:elseif>

<s:else>

        年龄大于20岁
</s:else>

Iterator 标签:遍历标签

<s:iterator value="#request.studentList" status="status">

        <tr>
                <td><s:property value="#status.index+1"/></td>

                <td><s:property value="id"/></td>
                <td><s:property value="name"/></td>

                <td><s:property value="age"/></td>

        </tr>
</s:iterator>

Append 标签:叠加标签

//将两个list中的数据叠加添加到另一个list中(list1后接list2数据)
<s:append var="studentList3">
        <s:param value="#request.studentList1"></s:param>
        <s:param value="#request.studentList2"></s:param>
</s:append>

Generator 标签:分隔标签

//将var的值用,分割获取分割后的单个数据

<s:generator separator="," val="'张三,李四,王五'" var="nameList"></s:generator>

<s:iterator value="#nameList">
        <s:property/>
</s:iterator>

Merge 标签:组合标签

//将两个list中的数据叠加添加到另一个list中(list1和list2数据混合到list3中)

<s:merge var="studentList3">
        <s:param value="#request.studentList1"></s:param>
        <s:param value="#request.studentList2"></s:param>
</s:merge>

Sort 标签:排序标签

//对list1进行排序,根据比较器排序

<s:bean id="myComparator" name="comparator.MyComparator"></s:bean>

<s:sort comparator="#myComparator" source="#request.studentList1" >

        <s:iterator status="status">
        <tr>
                <td><s:property value="#status.index+1"/></td>
                <td><s:property value="id"/></td>
                <td><s:property value="name"/></td>
                <td><s:property value="age"/></td>
        </tr>
        </s:iterator>
</s:sort>

//定义比较器

Struts2基础

Subset 标签:截取标签

//索引数据,count要索引的数据个数,start从第几个开始索引(从零计数)
<s:subset source="#request.studentList1" count="2" start="2">
        <s:iterator status="status">
        <tr>
                <td><s:property value="#status.index+1"/></td>
                <td><s:property value="id"/></td>
                <td><s:property value="name"/></td>
                <td><s:property value="age"/></td>
        </tr>
        </s:iterator>
</s:subset>

Strut2 界面标签

Struts2基础

Form 标签:表单提交标签

//namespace可以区分地址名

<s:form action="hello" method="post" namespace="/foreground">
</s:form>

Text 标签:文本标签

用户名:<s:textfield name="userName"></s:textfield><br/>
密码:<s:password name="password"></s:password><br/>
备注:<s:textarea name="desc"></s:textarea><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其他标签

Struts2基础

Updownselect 标签(用于控制标签的选择)

<s:updownselect
list="#{0:'游泳', 1:'唱歌', 2:'跳舞'}"
name="hobby"
headerKey="-1"
headerValue="请选择" //顶部标题
emptyOption="true" //允许有空项
allowMoveUp="true" //允许向上
allowMoveDown="true" //允许向下
allowSelectAll="true" //允许全选
moveUpLabel="向上" //操作标签
moveDownLabel="向下" //操作标签
selectAllLabel="全选" /> //操作标签

Struts2基础

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="全部左移"
allowSelectAll="true" headerKey="cnKey" headerValue="选择图书" emptyOption="true" doubleHeaderKey="enKey"

doubleHeaderValue="选择外文图书" doubleMultiple="true" doubleEmptyOption="true"

leftDownLabel="向下移动" //操作标签
rightDownLabel="向下移动" //操作标签
leftUpLabel="向上移动" //操作标签
rightUpLabel="向上移动" > //操作标签
</s:optiontransferselect>

Struts2基础

Struts2 国际化

国际化简介

Struts2基础

Struts2 国际化设置

Struts2基础

设置Strut.xml(java1234为配置文件的名字)

<constant name="struts.custom.i18n.resources" value="java1234"></constant>

设置配置文件

Struts2基础

配置java1234.properties文件(默认中文)

//属性=要显示信息的Unicode编码

userName=\u7528\u6237\u540d //用户名的Unicode编码
password=\u5bc6\u7801 //密码的Unicode编码
login=\u767b\u5f55
welcomeInfo=\u6b22\u8fce{0}

分别配置对应的显示信息(自动根据环境匹配的信息)

英文使用({0}为要使用的参数)

Struts2基础

中文使用

Struts2基础

JSP页面(传递要使用的参数)

Struts2基础

选择Unicode编码

Struts2基础

Struts2 验证框架

Struts2 验证简介

Struts2基础

Struts2 内置验证

Struts2基础

目录结构

Struts2基础

配置文件

Struts2基础

   

<validators>

//普通字段验证

<field name="user.userName">

//字段验证器,必填项

<field-validator type="requiredstring">

//提示信息

<message>请输入用户名</message>
</field-validator>

//对字段长度进行设置

<field-validator type="stringlength">
        <param name="minLength">6</param> //最短长度
        <param name="maxLength">10</param> //最长长度
<message>用户名必须在${minLength}和${maxLength}之间</message> //提示信息
</field-validator>
</field>
<field name="user.name">
        <field-validator type="requiredstring">
<message>请输入姓名</message>
</field-validator>
</field>
<field name="user.age">

//int型默认自动设置为0

        <field-validator type="int">

//字段必须大于

                <param name="min">18</param>
<message>年龄必须满18周岁</message>
</field-validator>
</field>
<field name="user.email">
        <field-validator type="requiredstring">
<message>请输入邮件</message>
</field-validator>

//必须是邮件类型的字段

<field-validator type="email">
<message>邮件格式不对</message>
</field-validator>
</field>
<field name="user.homePage">
        <field-validator type="requiredstring">
<message>请输入主页</message>
</field-validator>

//必须是网页类型的字段

<field-validator type="url">
<message>主页格式不对</message>
</field-validator>
</field>

//验证表达式

//表达式类型

<validator type="expression">

//字段与已存储字段的比较(表达式<![CDATA[表达式内容]]>)

        <param name="expression"><![CDATA[!user.name.equals(user.userName)]]></param>
        <message>用户名和真实姓名不能相同</message>
</validator>
</validators>

  

配置Strut.xml文件

Struts2基础

   

自定义验证(使用validators)

自定义验证器类(继承FieldValidatorSupport)

Struts2基础

将验证器添加到配置文件中

<<validators.xml>>

Struts2基础

配置文件

Struts2基础

<validators>
<field name="name">
<field-validator type="requiredstring">
<message>请输入姓名</message>
</field-validator>
//使用自定义验证器
<field-validator type="sensitive">
<message>有敏感词汇</message>
</field-validator>
</field>
</validators>

配置Strut.xml文件

Struts2基础

设置jsp页面请求

Struts2基础

Struts2 文件上传和下载

Struts2 文件上传

Struts2基础

配置jsp页面(type为file)

Struts2基础

action处理(上传文件的名字和处理文件的名字保持一致)

Struts2基础

配置struts.xml(使用拦截器)

Struts2基础

配置文件的大小及类型

Struts2基础

   

Struts2基础

   

Struts2基础

大文件上传(默认2M)

Struts2基础

<constant name="struts.multipart.maxSize" value="20000000"></constant>

设置struts.multipart.maxSize的value值

多文件上传(改成数组)

配置jsp页面(变成数组)

Struts2基础

action处理(文件对象,文件名,文件类型都变成数组)

Struts2基础

配置struts.xml

Struts2基础

Struts2 文件下载(返回的是文件流(默认ISO8859-1))

Struts2基础

action处理(将指定位置的文件对象转化为文件流)

Struts2基础

配置struts.xml

Struts2基础

配置jsp页面

Struts2基础

Struts2 防重复提交

重复提交

页面在刷新时用户再次提交,延迟时的提交处理

使用<s:token/>标签防重复提交

Struts2基础

配置jsp页面(每次都会进行记录一次)

Struts2基础

   

Struts2基础

配置struts.xml(通过返回值识别重复提交进行处理)

Struts2基础

使用 tokenSession 拦截器防重复提交(无视重复提交)

Struts2基础

配置struts.xml

   

<interceptor-ref name="tokenSession"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>

   

上一篇:【java框架】-- Struts2(一)


下一篇:吴裕雄--天生自然轻量级JAVA EE企业应用开发Struts2Sping4Hibernate整合开发学习笔记:使用Struts2的标签库(1)