struts2知识点总结



struts2框架  业务逻辑层


封装的是servlet,必须用在web项目里面


学习框架最主要是会搭建环境,然后增删改查操作




strut2框架环境搭建:


1.  下载jar包
官网:https://struts.apache.org/

创建web project  ,在web-inf底下lib目录下放入jar包

2. 在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>

/*表示过滤所有

3. 写业务逻辑层代码
struts2的基本构成就是一个action,action底层就是对servlet的封装

构建Action两种方式:

1. 实现Action接口,execute() 是该Action的默认的执行方法

package com.mypack.struts;


import com.opensymphony.xwork2.Action;


public class HelloAction implements Action{


@Override
public String execute() throws Exception {
return "success";
}


}

2. 继承ActionSupport类,execute() 是该Action的默认的执行方法

package com.mypack.struts;


import com.opensymphony.xwork2.Action;


public class HelloAction extends ActionSupport{


@Override
public String execute() throws Exception {
return "success";
}


}

两种方式区别: 都可创建Action,但是要想实现检验功能必须通过继承的方式

因为: ActionSupport类实现了Action, Validateable接口

4. 配置action 在struts.xml文件里面配置:

注意: struts.xml 一般写在src根目录底下,命名一般写成写成struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" >
<struts>
<package name="default" namespace="/" extends="struts-default">

<action name="hello" class="com.mypack.struts.HelloAction">
<result name="success">index.jsp</result>
</action>


</package>

</struts>

注意: 创建该struts.xml文件必须引入dtd文件,否则将不会自动提示


配置文件详解:

package:  包

name: 包名  default 表示没有包名   唯一
namespace: 命名空间,决定访问该包底下的action时的路径的写法
namespace="/"  http://IP地址:端口号/项目名/hello
namespace="aaa"  http://IP地址:端口号/项目名/aaa/hello
extends: 继承,另外一个xml文件,
extends="struts-default" 继承struts-default.xml文件

action:

name:  action名称,唯一
class: 该action对应的包名.类名
method: 表示执行该类里面的那个方法

result:  返回值

name: 表示该方法执行逻辑中的return 返回值;如果是该值,进入result标签中间页面

type: 表示跳转类型 默认值是dispatcher 不写就是默认值

dispatcher: 请求转发  另外页面
redirect: 重定向 另外页面
redirectAction: 重定向 另外一个Action


5. 在浏览器访问该action:

http://IP地址:端口号/项目名/action的name值







----------------------------------------------------------------------------




struts2中的前台和后台之间取值传值:

他们之间是自动传递的,不需手动处理,前提是他们之间互相对应,
前台表单name值和后台action类里面的属性名称对应,并且属性必须有对应的gettersetter方法


1. 方式1:

前台 : name="username" name="password"

后台:

public class UserAction extends ActionSupport{

String username;
String password;
//属性必须和前台对应 但是必须有getter,setter方法
}


2. 方式2:

前台 : name="user.username" name="user.password"

实体类:

public class User{

` String username;
String password;
//gettersetter方法必须有
}
后台:

public class UserAction extends ActionSupport{

User user;
//但是必须有getter,setter方法
}

3. 方式3:

前台 : name="username" name="password"

实体类:

public class User{

` String username;
String password;
//gettersetter方法必须有
}
后台:

public class UserAction extends ActionSupport implements ModelDriven<User>{

User user;
//但是必须有getter,setter方法

public User getModel(){
return user;
}
}




Action 接口里面的内置常量:


public static final String ERROR "error" 
public static final String INPUT "input" 
public static final String LOGIN "login" 
public static final String NONE "none" 
public static final String SUCCESS "success" 
 
 
public String login(){
return SUCCESS;  //  等效于 return "success"
// return INPUT  等效于 return "input";
}
 
仅仅限于这5个
 
 
struts.xml  配置文件里面也可定义常量:

<constant name="" value=""/>

struts2可以定义的常量有:


Struts2常量的具体用法实例 
 


<!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 --> 
 
<constant name="struts.i18n.encoding" value="UTF-8" /> 
 
<!- 国际化-把资源文件定为全局变量 baseName为名字-->
 
<constant name="struts.custom.i18n.resources" value="baseName" /> 
 
<!--该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开-->
 
<constant name="struts.action.extension" value="do,action,htm,html,jsp" /> 
 
<!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 --> 
 
<constant name="struts.serve.static.browserCache" value="false" /> 
 
<!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开--> 
 
<constant name="struts.configuration.xml.reload" value="true" /> 
 
<!-- 开发模式下使用,这样可以打印出更详细的错误信息 --> 
 
<constant name="struts.devMode" value="true" /> 
 
<!-- 默认的视图主题 --> 
 
<constant name="struts.ui.theme" value="simple" /> 
 
<!-- spring 托管 --> 
 
<constant name="struts.objectFactory" value="spring" /> 
 
<!--指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration 
 
开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件--> 
 
<constant name="struts.configuration" value="org.apache.struts2.config.DefaultConfiguration" /> 
 
<!-- 设置默认的locale和字符编码 --> 
 
<constant name="struts.locale" value="zh_CN" /> 
 
<constant name="struts.i18n.encoding" value="GBK" /> 
 
<!--指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name是默认装配模式)> 
 
<constant name="struts.objectFactory.spring.autoWire" value="name" /> 
 
<!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true --> 
 
<cosntant name="struts.objectFactory.spring.useClassCache" value="true"/> 
 
<!-- 指定类型检查,包含tiger和notiger --> 
 
<cosntant name="struts.objectTypeDeterminer" value="tiger" /> 
 
<!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 --> 
 
<constant name="struts.multipart.parser" value="cos" /> 
 
<constant name="struts.multipart.parser" value="pell" /> 
 
<constant name="struts.multipart.parser" value="jakarta" /> 
 
<!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir --> 
 
<constant name="struts.multipart.saveDir" value="/tmpuploadfiles" /> 
 
<!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 --> 
 
<constant name="struts.multipart.maxSize" value="2097152" /> 
 
<!--该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文  
 
件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!)  --> 
 
<constant name="struts.custom.properties"value="application,org/apache/struts2/extension/custom" /> 
 
<!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper -> 
 
<constant name="struts.mapper.class"           value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" /> 
 
<!-- 设置是否支持动态方法调用,true为支持,false不支持. --> 
 
<constant name="struts.enable.DynamicMethodInvocation" value="true" /> 
 
<!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. --> 
 
<constant name="struts.enable.SlashesInActionNames" value="true" /> 
 
<!-- 是否允许使用表达式语法,默认为true. --> 
 
<constant name="struts.tag.altSyntax" value="true" /> 
 
<!-- 设置当struts.xml文件改动时,是否重新加载 --> 
 
<cosntant name="struts.configuration.xml.reload" value="true" />


---------------------------------------------------------------------------------------

struts2里面的校验方式:

1. validate()方法  必须是继承ActionSupport类

2、 validateXXX()方法  校验某个具体方法

后台:
@Override
 public void validate() {//手动后台校验

     
 }
 public void validateLogin() {//手动后台校验  只校验login方法

     
}
 
public String login(){
return SUCCESS;
}
 
struts.xml配置文件:
 
<result name=“input”>/xxx.jsp</result> 
检验必须配  name值为input

前台通过标签来显示校验信息:

<form action="user_execute">
用户名:<input type="text" id="username" name="user.username"/><s:fielderror fieldName="user.username"></s:fielderror><br>


密码:<input type="password" id="password" name="user.password"/><s:fielderror fieldName="user.password"></s:fielderror><br>
<input type="submit" value="login" />
</form>



3. 校验框架  内置的校验框架

注意: 通过命名是否保持一致来确定校验那个方法

1. 校验规则配置文件与Action类必须在同一文件夹下 
2. 校验规则配置文件文件名必须是 
Action类名-validation.xml 
Action类名-别名-validation.xml 
别名对应的是Action配置中name属性的值 ,也就是只校验一个action中的某个方法。


校验规则:

required:必填校验器 
requiredstring:必填字符串校验器 
int:整数校验器 
double:双精度浮点数校验器 
date:日期校验器 
expression:表达式校验器 
fieldexpression:字段表达式校验器 
email:电子邮件校验器 
url:网址校验器 
visitor:Visitor校验器 
conversion:转换校验器 
stringlength:字符串长度校验器 
regex:正则表达式校验器


例子:

1。必填检验
<validators>
<field name="username">
<field-validator type="required">
<message>指定检验失败的提示信息</message>
</field-validator>
</field>
</validators>




2。必填字符串检验
<validators>
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>指定检验失败的提示信息</message>
</field-validator>
</field>
</validators>




3。整数检验器/浮点检验
<validators>
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>年纪必须在1到150之间</message>
</field-validator>
</field>
</validators>




4。日期检验
<validators>
<field name="birth">
<field-validator type="date">
<param name="min">1900-01-01</param>
<param name="max">2050-02-21</param>
<message key="birth.range"/>
</field-validator>
</field>
</validators>




5.字段表达式检验器(要求指定字段满足一个逻辑表达式)
<validators>
<field name="re_pass">
<field-validator type="fieldexpression">
<!--指定逻辑表达式 -->
<param name="expression"> (pass eq re_pass)</param>
<message>密码必须和确认密码相等</message>
</field-validator>
</field>
</validators>




6.邮件地址校验
<validators>
<field name="email">
<field-validator type="email">
<message>你的电子邮件地址必须是一个有效的电邮地址</message>
</field-validator>
</field>
</validators>




7。网址检验
<validators>
<field name="url">
<field-validator type="url">
<message>你的主页地址必须是一个有效的网址</message>
</field-validator>
</field>
</validators>




8.字符串长度检验
<validators>
<field name="user">
<field-validator type="stringlength">
<param name="minlength">4</param>
<param name="maxlength">20</param>
<message>你的用户名长度必须在4到20之间</message>
</field-validator>
</field>
</validators>




9.正则表达式检验
<validators>
<field name="user">
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<message>您输入的用户名只能是字母和数组,且长度必须在4到25之间</message>
</field-validator>
</field>
</validators>




这里有个地方需要注意:form中要加入validate=“true”这个属性

==================================================================

Action接口里面的内置常量:

只有这5个 

public static final String ERROR "error" 
public static final String INPUT "input" 
public static final String LOGIN "login" 
public static final String NONE "none" 
public static final String SUCCESS "success" 
 
public String  login(){
return SUCCESS;   //等效于 return "success";
}


struts.xml配置文件里面可以配置的常量:

配置方式: <constant name="" value="" />

在struts 2中,配置文件需要配置不少常量,其中常用的如下:

<constant name="struts.i18n.encoding" value="UTF-8"/>
struts.i18n.encoding:这个常量会作用于setCharacterEncoding方法和freemarker,velocity(这两种为模板技术)的输出,POST方式提交的数据,可以交由这个常量去设置它的编码格式。

<constant name="struts.configuration.xml.reload" value="true" />
struts.configuration.xml.reload:当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false,开发阶段最好打开,开发完后再关闭。

<constant name="struts.serve.static.browserCache" value="false"/>
truts.serve.static.browserCache:设置浏览器是否缓存,默认值为true,开发阶段最好关闭。

<constant name="struts.devMode" value="true" />
struts.devMode:打印出更详细的错误信息,用于排错,主要用于开发模式,做好了再关闭,在copy sturts-blank中的stuts.xml中,里面有这常量。

<constant name="struts.ui.theme" value="simple" />
struts.ui.theme:标签所使用的额外的自定义样式,不太实用,最好设置成simple,且一般都不用到struts 2的标签库。

<constant name="struts.objectFactory" value="spring"/>
struts.objectFactory:与spring继承时,指定由spring负责action对象的创建,在继承spring时,会用到这个常量.

<constant name="struts.enable.DynamicMethodInvocation" value="true" />
struts.enable.DynamicMethodInvocation:该属性设置struts2是否支持动态方法调用,该属性的默认值是true,如果需要关闭动态方法调用,则可设置该属性为false,
注意:DMI的调用方式Struts2的文档不建议使用,且下载的struts2-2-X.jar中,它的sturts-blank中sturts.xml有这常量,并设其值为false

<constant name="struts.multipart.maxSize" value="20971520" />
struts.multipart.maxSize:设置上传文件的总大小限制,老杨说过它上传无法传太大的,可能是这里没设置。
注意:用HTML方式来上传是无法上传太大的文件,很不稳定,可以说失败率超高。解决方法是用socket编个插件用于上传,而不能直接依赖。

<constant name="struts.action.extension" value="do,lz" />
struts.action.extension:修改后缀名,默认是action,可以修改。若值有多个,可用逗号隔开,这对于常量的值都通用。

<constant name="struts.custom.i18n.resources" value="baseName" />
struts.custom.i18n.resources:用于配置国际化全局XML资源文件,须在指明该全局资源文件的基础名。 

<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
struts.ognl.allowStaticMethodAccess:如其名,用于设置OGNL是否允许静态方法访问,默认为false。



struts2中action的调用:

public class HelloAction extends ActionSupport{


@Override
public String execute() throws Exception {
return "success";
}

public String login(){
return SUCCESS;
}
}


Struts.xml


<struts>
<package name="default" namespace="/" extends="struts-default">


<action name="hello" class="com.mypack.struts.HelloAction">
<result name="success">index.jsp</result>
</action>

<action name="hello2" class="com.mypack.struts.HelloAction">
<result name="success">index.jsp</result>
</action>

<action name="hello3" class="com.mypack.struts.HelloAction" method="login">
<result name="success">index.jsp</result>
</action>
</package>
</struts>



1. 没有配置method属性, 直接访问action,表示执行的是默认的方法execute()
http://localhost:8080/项目名/hello
执行的是execute()方法

2. 没有配置method属性,访问某个方法    action!方法名  动态方法调用
http://localhost:8080/项目名/hello2!login
执行的是login方法


3 . 配置method属性,访问action就是访问配置的method方法
http://localhost:8080/项目名/hello3
执行的是login方法


4. 通配符

HelloAction.java

public class HelloAction extends ActionSupport{
public String addStu(){
return SUCCESS;
}
public String delStu(){
return SUCCESS;
}
}


struts.xml

<struts>
<package name="default" namespace="/" extends="struts-default">
<!--
<action name="add" class="com.mypack.struts.HelloAction" method="addStu">
<result name="success">index.jsp</result>
</action>
<action name="del" class="com.mypack.struts.HelloAction" method="delStu">
<result name="success">index.jsp</result>
</action>
-->

<!--通配符  下面这种效果就等效于上面效果  -->
<action name="{1}" class="com.mypack.struts.HelloAction" method="{1}Stu">
<result name="success">index.jsp</result>
</action>
</package>
</struts>





<struts>
<package name="default" namespace="/" extends="struts-default">

<!--
<action name="addStu" class="com.mypack.struts.StuAction" method="addStu">
<result name="success">index.jsp</result>
</action>
<action name="delStu" class="com.mypack.struts.StuAction" method="delStu">
<result name="success">index.jsp</result>
</action>
<action name="addTea" class="com.mypack.struts.TeaAction" method="addTea">
<result name="success">index.jsp</result>
</action>
<action name="delTea" class="com.mypack.struts.TeaAction" method="delTea">
<result name="success">index.jsp</result>
</action>
-->

<!--通配符 下面这种效果就等效于上面效果-->
<action name="{1}{2}" class="com.mypack.strut.{2}Action" method="{1}{2}">
<result name="success">index.jsp</result>
</action>
</package>
</struts>











拦截器:

自定义拦截器:


1 自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。


public class CheckLoginInterceptor extends AbstractInterceptor {
public String intercept(ActionInvocation actionInvocation) throws Exception {
if (满足条件) {
return actionInvocation.invoke();//放行
}
return login.jsp;//不满足,返回登录页面
}
}
 
2 在strutx.xml中注册上一步中定义的拦截器。

注册拦截器
<interceptors>
<interceptor name="loginInter" class="com.jpleasure.teamware.util.CheckLoginInterceptor"/>
</interceptors>

3 哪个Action需要被拦截直接配置就行了


<action name="login" class="xx.xx.xx.UserAction" method=”login”>
<result name="success">index.jsp </result>
<interceptor-ref name="loginInter "/>
   </action>






ognl表达式;

通过<s:debug>标签来观察取值是否使用#
正常点开debug标签会有上下两部分 ,上面部分为 属性和对应的值;下面部分是键值对类型 ,map集合
如果取属性值 直接取 不用加# <s:property value=”属性”/>
如果取下面键值对值,需在前面加# <s:property value=”#键”/>




struts2标签库:


1. jsp文件引入struts2标签库  <%@ taglib prefix="s" uri="/struts-tags"%>

2. 直接使用标签

4. 表单标签的通用属性
属性名 主题 数据类型 说明
title simple String 设置表单元素的title属性
disabled simple String 设置表单元素是否可用
label xhtml String 设置表单元素的label属性
labelPosition xhtml String 设置label元素的显示位置,可选值 : top 和 left(默认)
name simple String 设置表单元素的name属性,与Action中的属性名对应
value simple String 设置表单元素的值
cssClass simple String 设置表单元素的class
cssStyle simple String 设置表单元素的style属性
required xhtml Boolean 设置表单元素为必填项
requiredpositon xhtml String 设置必填标记(默认为*)相对于label元素的位置,可选值:left 和right(默认)
tabindex simple String 设置表单元素的tabindex属性
5.
6. <form>标签的常用属性及描述
属性名 是否必填 类型 说明
action 否 String 指定提交时对应的action,不需要action后缀
enctype 否 String HTML表单enctype属性
method 否 String HTML表单method属性
namespace 否 String 所提交action的命名空间
7.
8. <s:submit>标签的常用属性
属性名 是否必填 类型 说明
action 否 String 指定提交时对应的action
method 否 String 指定action中调用的方法
9.
10. <s:password>标签的常用属性说明
属性名 说明
Name 用于指定密码输入框的名称
Size 用于指定密码输入框的显示宽度,以字符数为单位
MaxLength 用于限定密码输入框的最大输入字符串个数
showPassword 是否显示初始值,即使显示也仍为密文显示,用掩码代替
11.
12. <s:radio>标签的属性及说明
属性名 是否必填 类型 说明
List 是 Cellection、Map、Enmumeration、Iterator,array 用于生成单选框中的集合
listKey 否 String 指定集合对象中的哪个属性作为选项的value
listValue 否 String 指定集合对象中的哪个属性作为选项的内容
13.
14. <s:checkboxlist>标签的常用属性及说明
属性名 是否必填 类型 说明
name 否 String 指定该元素的name
list 是 Cellection、Map、Enmumeration、Iterator,array 用于生成多选框的集合
listKey 否 String 生成checkbox的value属性
listValue 否 String 生成checkbox后面显示的文字
15.
16. select标签的常用属性及说明
属性名 是否必填 类型 说明
list 是 Cellection、Map、Enmumeration、Iterator,array 用于生成下拉框的集合
listKey 否 String 生成选项的value属性
listValue 否 Strmg 生成选项的显示文字
headerKey 否 String 在所有的选项前再加额外的一个选项作为其标题的value值
headerValue 否 String 显示在页面中header选项的内容
Multiple 否 Boolean 指定是否多选,默认为 false
emptyOption 否 Boolean 是否在标题和真实的选项之间加一个空选项
size 否 Int 下拉框的高度,即最多可以同时显示多少个选项










i18n国际化:

参考百度,直接搜

上传和下载:

主要掌握思路,参考网上例子

ajax:

jquery里面调ajax,传到后台逻辑,后台action


jqueryeasyui: 前端框架

封装好的前端框架  
参考官网,官方文档
http://www.jeasyui.net/











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值