struts2知识点总结doc文档

Struts2  属于业务逻辑层框架  底层封装的是Servlet

                  Servlet用于接收请求和处理响应的一套逻辑过程

                   只能用于web项目  web project 

框架学习特点:

侧重整体流程步骤,再熟悉细节

框架只要会用就行,至于底层无须了解或适当了解就行

每个框架某个功能模块都需要一定的jar包支持 ,再使用中只需调用响应jar包中响应类的相应方法

Api文档来查找

框架各个类之间的设计方式  其实就是设计模式的内容

设计模式就相当与战略战术设计方式 三十六计

框架比如就是阵法

 

Struts2框架 和struts不同  ,很大的区别

Struts2实在struts和webwork在基础上发展起来的

 

下载struts2的驱动包 在官网

·https://struts.apache.org/

下载好之后解压 lib目录底下所有的jar包  太多

Apps目录底下是所有的例子

    取某个例子解压下 取里面的lib所有的驱动包 大概13个左右

搭建框架:

1. 创建web project ,导入jar包

直接复制粘贴到wen-inf下的lib目录里面

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>

/*  表示过滤所有 ,表示所有的逻辑都经过struts2过滤器,进入到struts2框架里面

 

3.  创建业务逻辑层的业务类

Struts2里面的基本单元就是Action,Action就是对servlet的封装

 创建方式:

a. 实现Action接口

 publicclass HelloAction implements Action{

  @Override

  public String execute() throws Exception {

     return"success";

  }

}

b.  继承ActionSupport

   publicclass HelloActionextends ActionSupport{

 @Override

    public String execute() throws Exception {

          return"success";

    }

}

    实现接口和继承都能创建Action,但是ActionSupport里面可以实现校验的功能

因为ActionSupport同时实现了Action, Validateable

  Action里面默认的执行方式是execute()方法

 

4. 配置Action  在struts.xml文件里面配置

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

创建struts.xml时候必须引入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>

    Package标签:表示action所属的包,可以有多个package,但是每个package name值时唯一的

    Namespace代表浏览器访问该包底下的action路径问题

        Namespace=”/”  http://localhost:8080/项目名/hello

        Namespace=”aaa”  http://localhost:8080/项目名/aaa/hello

Extends 表示继承某个配置文件跟java继承概念差不多,一般值都写成 struts-default

 

Action配置:

    Name表示的是该action的name值,表示访问该action时的信息,不能重复

    Class表示对应的包名+类名  对应的action类

    Method:方法名  表示执行某类底下的某个方法不配表示执行默认方法 execute()

    Result:name值表示该action方法执行最终的返回值,如果是该返回值,进入到相应的页面或者逻辑

            Type属性值:

dispatcher: 请求转发没有配置默认值为dispatcher,请求转发到另外页面

redirect:  重定向  重定向到另外的一个页面

redirectAction:重定向到另外一个Action

通过浏览器url来访问该action  通过该Action配置的name值来访问:

http://ip地址:端口号/项目名 /action标签的name属性值

常用配置:

  Struts接口里面内置常量:

  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"

 

    当某个action返回值是上面常量值时,就可以互相替代

        Return“success”  可以写成 return SUCCESS;

Return  “input”     可以写成 return INPUT;

 

    Struts.xml里面配置的常量信息

        <constant name=" "   value="">

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

<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:打印出更详细的错误信息,用于排错,主要用于开发模式,做好了再关闭,在copysturts-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。

方法调用:

     publicclass HelloActionextends ActionSupport{

     @Override

     public String execute() throws Exception {

              return"success";

     }  

     public String login(){

         returnSUCCESS;

     }

}

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. 通配符 

publicclass HelloAction extends ActionSupport{

      public String addStu(){

           returnSUCCESS;

      }

      public String delStu(){

            returnSUCCESS;

      }

}

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

 

Struts2校验:

1. Validate()方法

2. ValidateXXX()方法

publicclass HelloAction extends ActionSupport{

      public String login(){

           returnSUCCESS;

      }

      publicvoid validate(){

           System.out.println("校验的逻辑");

      }

            publicvoid validateLogin() {

           //手动后台校验  只校验login方法

      }

}

 

<action name="login" class="com.mypack.struts.HelloAction"method="login">

              <result name="success">index.jsp</result>

              <!-- 校验的name值为input-->

              <result name="input">login.jsp</result>

     </action>

前台页面如果要看到错误信息:
 页面引入Struts标签 login.jsp

<form action="login">
用户名:<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" />

 

3. 校验框架

Struts2内置了校验框架,通过对应关系起作用

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

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC 
        "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="user.username">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>用户名不能为空!</message>
        </field-validator>
    </field>
 
    <field name="user.password">
        <field-validator type="stringlength">
            <param name="minLength">1</param>
            <param name="trim">true</param>
            <message>密码不能小于${minLength}位!</message>
        </field-validator> 
    </field>
    <field name="user.address">
        <field-validator type="regex">
        <param name="expression"><![CDATA[([a-zA-Z_]+)]]></param>
        <message>地址只能是英文字符和下划线</message>
        </field-validator>
     </field>
</validators>
验证规则:

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>

Struts标签:

 1. jsp引入struts2标签库

<%@ tagliburi="/struts-tags" prefix="s" %>

2. 使用

3. 表单标签

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

下拉框的高度,即最多可以同时显示多少个选项


Ognl表达式取值:

    通过<s:debug>标签来观察取值是否使用#

    正常点开debug标签会有上下两部分 ,上面部分为 属性和对应的值;下面部分是键值对类型 ,map集合

    如果取属性值 直接取 不用加#     <s:property value=”属性”/>

    如果取下面键值对值,需在前面加# <s:property value=”#键”/>

   

Struts2里面的传值取值:

    前端页面和后台逻辑的数据会自动对接,无须自己手动处理

    要求:

        通过属性来对接的,所以属性必须有对应的getter,setter方法

        1前端

            name=”username”  name=”password”;

        后台Action

            Stringusername;

            Stringpassword;

        必须对应起来,并且getter,setter方法

 

        2前端

            name=”user.username”  name=”user.password”;

        实体类

        classUser{

            Stringusername;

            Stringpassword;

            //getter.setter方法

        }

        Action:

            属性: User user;

            //getter,setter方法

       

3 前端

            name=”username”  name=”password”;

        实体类

        classUser{

            Stringusername;

            Stringpassword;

            //getter.setter方法

        }

        ClassUserAction extends ActionSupport implements ModelDriven<User>{

            //属性:

 User user;

            //getter,setter方法

 

            publicUser getModel(){

                returnuser;

}

        }

拦截器:

    自定义过滤器:

 

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

 

public class CheckLoginInterceptorextends AbstractInterceptor {

   public String intercept(ActionInvocation actionInvocation) throwsException {

        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-refname=" loginInter "/>

  </action>

国际化:

    参考百度,直接搜

 

上传和下载:

Ajax:

    异步处理: jquery里面调用ajax 后台使用struts2来实现

    其实跟servlet一样,只不过后台用action实现

 

Jquery easyUI:

    封装好的前端框架 

    参考官网,官方文档

http://www.jeasyui.net/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值