Struts总结



Struts实现了MVC模式的JavaEE 企业级的轻侵入性、轻量级表现层 web 开源框架。框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。

 

实现MVC模式

Model:Action(业务控制器),多实例单线程

View:4中视图技术(jsp xslt freemarker velocity)

Controller:PrepareAndExecuteFilter+拦截器s

 

版本

Struts2.3.15+或者struts2.5.10+ 远程执行漏洞

 

新建Struts

  1. 添加必须的jar

ommons-fileupload/commons-io

 commons-lang3          javassist       freemarker

ognl            log4j              struts2-core

 

  1. 配置前端控制器 web.xml

    过滤器的名称 以及路径

    Class 文件为 新建一个类 在继承里面打StrutsPrepareAndExecuteFilter会有提示 复制 粘贴 <filter-class>

    <filter>

      <filter-name>struts2</filter-name>  <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>

    <filter>

    映射路径配置

<filter-mapping>

        <filter-name>struts2</filter-name>

        <url-pattern>/*</url-pattern>

</filter-mapping>

 

定义首页的配置

<welcome-file-list>

       <welcome-file>index.jsp</welcome-file>

</welcome-file-list>

 

所有的在<web-app>   </web-app>  里面写

 

  1. 配置Struts2的核心配置文件

struts2-core.jar中包含了一个配置struts-default.xml,其中定义了一个抽象包

<packagename="default" extends="struts-default"strict-method-invocation="false">

abstract=true表示当前包为抽象包,表示这个包的配置信息不能直接使用,只能供其他包使用

 

<!DOCTYPE strutsPUBLIC

    "-//Apache Software Foundation//DTD StrutsConfiguration 2.5//EN"

    "http://struts.apache.org/dtds/struts-2.5.dtd">

 

struts2-core-2.5.16jar下的    struts-2.5.dtd

 

 

  1. 测试一部署当前应用,查看控制器是否有报错信息

  2. 定义表结构

  3. web.xml里面定义首页

  4. 定义Action

需要请求转发到add.jsp页面,struts.xml中配置

 

<package name=”default” extends=”struts.xml”>

 <action name=”addinput”></action>

 

Struts2为了简化页面编写提供了一套标签库,可以分为2大类:UI标签(有显示的,例如生成输入域的<s:textfield/>)和非UI标签(显示逻辑<s:if>)

 

 

定义Action接收用户提交数据

AddAction 继承自ActionSupport  

Action中有常量  在不同情况下返回 里面有一个execute(); 方法 默认返回值为SUCCESS

 

ActionSupport   里有execute的默认显示   获取success的对应页面

 

ActionSupport里有五大常量   execute方法名

Validateable  ,ValidationAware服务器端数据效验提供支持

TextProvider ,LocalProvide  对于国际化 I18N   本地化L10N

Serializable  序列化接口

 

action中接收用户提交数据有三种方法

  1. 属性驱动

  2. 模型驱动

  3. 对象驱动

 

属性驱动:

<input name=”userbean”>对应Action类中的属性private String username (get/set方法)

 

推荐模型驱动: ModelDriven接口

要实现 ModelDirven<用户类>()   有一个getModel方法

页面不发生变化<input name=”username”/>  

对应值bean中的属性private String username (get/set方法)

Action定义

public class UserAction extends ActionSupportimplemenets ModelDriven<UserBean>{

      privateUserBean user=new UserBean();//建议直接new对象,可以没有get/set方法

      publicUserBean getModel(){return user;   }//保证返回值不能为null

}

 

 

对象驱动

 

页面发生变化 <input  name=”user.username”/> 

其中user对应Action类中的属性private UserBean user;(get/set),username对应值bean中的属性private Stringusername  (get/set方法)

Action类定义

public class UserAction extendsActionSupport{不需要实现接口

      private UserBean user;//可以new也可以不用new,必须get/set方法

}

 

 

Apache Struts 2 体系结构概述 

  1. web浏览器请求一个资源(/mypage.action, /reports/myreport.pdf)

  2. 过滤器StrutsPrepareAndExecuteFilter查找请求和确定适当的 Action

  3. 拦截器自动应用公共功能到请求,像操作,验证和文件上传操作。

  4. Action execute 方法通常用来存储和重新获得信息从数据库。

  5. 结果被返回到浏览器,可能是 html, 图片或其它。

 

 

Namespace的概念

<packet>用于定义一个包,属性名name 用于定义包名,注意包名不能重复

namespace=""用于定义action地址的名空间,可以不配置,不配置则等价于 namespace=""

某个Actiond对应的访问URL= 名空间 /具体Action的名称 。名称空间是当页面名字相同的情况下,可以能过 namespace 来区 分访问路径

 

如果对应的包中没有匹配的action,则查找没有名空间的包(namespace没定义,这是默认的包),在默认包中查找对应的action

如果都找不到则报404

 

Action类中方法的定义

根据面向对象规则,需要将一组相关的操作定义在一个Action类中,MVC部分实现方法的实现

 

 

<action>配置的name是访问当前action对应的URLnamespace),class是对应的类全名。另外还有一个属性method="方法名称"如果不进行配置,则默认调用的方法名称为execute,如果方法名称不是execute则需要配置method属性

 

匹配方法使用的推荐

在配置<action>*号通配符,*可以匹配任意长度的任意字符。ame属性中使用*,则在其它配置位置可以使用{1}引用和*匹配的内容

 

 

Eg: <action name=”*”  class=”com.wu.action.UserAction”  method={1} ><action>

如果定义了多个不同类的方法映射,则直接使用*就可能有二意性

<action name=”user_*” class=”com.wu.action.UserAction”method=”{1}”>

表示user_add.action调用UserAction类中的add方法

 

 

DMI动态方法调用:

默认框架关闭了DMI,对应的运行时常量是 struts.enable. DynamicMethodInvocation= false

 

调试相关的常量配置:拦截器实现打开调试

Struts.devMode=true  依赖于的debugging

struts.i18n.reload= true自动发现并加载修改的properties文件国际化处理

struts.configuration.xml.reload = true 自动发现并加载修改的 struts.xml 之类的配置文件

配置方法:推荐

web.xml配置前端控制器时直接设置

<init-param>

<param-name>struts.devMode</param-name>

<param-value>true</param-value>

</init-param>

 

 

action包下定义校验信息的xml文件

名字叫 类名称-validation.xml

 

定义对应的校验规则文件,说明需要执行什么校验

这里的<field/>标签中的name属性和输入域的name要一致,表示对哪个属性进行验证。Field-validator用于说明要执行什么验证,具体的type名称定义在default.xml文件中/com/opensymphony/xwork2/validator/validators/default.xml

 

<fieldname="username">

        <field-validatortype="requiredstring">

            <message>用户名称不能为空!</message>

        </field-validator>

    </field>

 

Type对应的类型 validators设置好的.

 default.xml文件中/com/opensymphony/xwork2/validator/validators/default.xml

 

 

如何避免客户端缓存的影响

 

3个响应头的设置

服务器端避免客户端缓存的方法:

<meta http-equiv="pragma"content="no-cache">

<metahttp-equiv="cache-control" content="no-cache">

 

<meta http-equiv="expires"content="0">  

 

客户端避免客户端缓存的方法:

response.setHeader("pragma", "no-cache");

response.setHeader("cache-control", "no-cache");

response.setDateHeader("expires", 0);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值