Struts2框架

Struts2框架

              Struts2是一种实现了MVC模式的表现层框架

struts2的远程执行漏洞:

              选择版本 Struts2.3.15+或者2.5.10+,这个漏洞已经被修复  

             

hello Struts2:

              1、添加jar包

                            commons-fileupload和commons-io commons-lang3 freemarkerlog4j-api  ognl[对象图导航语言] sturts2-core javassist

              2、配置前端控制器  web.xml

                            注意:不能将其它Filter配置在前端控制器之内

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

              3、添加Struts2的核心配置文件

                            惯例:位于src根目录下,名称为struts.xml[包括大小写在内,不允许修改;否则必须进行配置]

                                          xml文件头可以在struts2-core.jar中的文件/struts-2.5.dtd中进行查找

                                         

                            <?xmlversion="1.0" encoding="UTF-8"?>

                            <!DOCTYPEstruts PUBLIC

                                          "-//ApacheSoftware Foundation//DTD Struts Configuration 2.5//EN"

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

                            <struts>

                                         

                            </struts>

                           

              4、定义提交数据的页面

                                          <formaction="regist.action" method="post">  Struts2默认的路径后缀为.action或者没有后缀

                                                     <table>

                                                                   <tr><td>用户名称:</td><td><input type="text"name="username"/></td></tr>

                                                                   <tr><td>用户口令:</td><td><input type="password"name="password"/></td></tr>

                                                                   <tr><tdcolspan="2">

                                                                                 <inputtype="submit" value="添加新用户"/>

                                                                   </td></tr>

                                                     </table>

                                       </form>

              5、定义控制器接收用户提交数据

                            public classRegistAction {

                                          // 这里的名称和提交数据的页面中的name一致,如果类型不是String或者String[],则框架自动进行类型转换

                                          private String username;

                                          privateString password;

                                          privateString message;

                           

                                          publicString execute() throws Exception {注意名称必须一致

                                                        具体的处理逻辑,如果需要还会访问其他的bean

                                                        System.out.println(username+ "---" + password);

                                                        if(username == null || username.trim().length() < 1)

                                                                      message= "Hello Struts2!";

                                                        else

                                                                      message= "Hello " + username + "!";

                                                        return"success";  返回的字串值是需要跳转的页面的逻辑地址名,默认请求转发

                                          }

                                         

                                          对应的get/set方法

              6、在struts.xml中配置控制器

                            <packagename="default包名称,可以随意定义,只要不冲突即可" extends="struts-default继承,以减少配置信息" strict-method-invocation="false">

                                          <actionname="regist请求路径,表单提交的action是regist.action,表示调用RegistAction中的execute方法" class="com.yan.action.RegistAction">

                                                        <result name="success">/show.jsp</result>注意:Action的execute方法返回的String值是逻辑地址名,这里配置逻辑地址名对应的物理地址

                                          </action>        

                            </package>

              7、跳转的目标页中如何访问Action中的message属性

                            ${message}   --EL表达式                                                                                                                            

 

struts2大致处理流程:

              1)浏览器发送请求

              2)核心前端控制器StrutsPrepareAndExecuteFilter根据请求决定是否调用相应的Action

              3)struts2内置的拦截器链会自动对请求进行一些操作

              4)调用Action的execute方法,执行操作。

              5)Action会将处理结果存入stack Context中,并返回字符串(逻辑地址名),核心控制器根据字符串跳转到指定的视图资源。

              6)视图资源会读取Stack Context中的信息,向浏览器生成响应数据。

 

 

Struts 2框架的特点:

              POJO表单和POJO动作 - Struts2的Struts框架已经摆脱了动作表单组成部分, Struts2可以使用任何POJO接收的形式输入。同样现在可以看到任何POJO作为一个Action类。

              标签支持 - Struts2中,提高了表单标签和新标签允许开发人员编写更少的代码。

              AJAX支持- Struts2中已确认由Web2.0技术接管,并整合到产品中,通过创建AJAX标签,功能非常相似的标准Struts2 标签AJAX支持。

              易于整合 - Struts2 集成各种整合与其他框架如Spring,Tiles 和SiteMesh是现在更容易。

              模板支持 - 支持生成使用模板。

              插件支持 - 可以提高核心Struts2的特性,并增强使用插件。大量的插件可供Struts2。

              性能分析 - Struts2的分析,调试和分析应用程序提供了集成。除此之外,Struts还提供了集成的内置调试工具调试。

              易于修改标签 - Struts2的标签标注,可以调整使用Freemarker的模板。这并不需要JSP或Java知识。基本HTML,XML和CSS知识是足够修改标签。

              提倡少配置 - Struts2 促进较少的配置的帮助下,使用默认的各种设置值。不必配置的东西,除非它不符Struts2的默认设置。

              视图技术: - Struts2中有一个很大的支持多个视图选项 (JSP, Freemarker, Velocity 和 XSLT)

 

Struts 2的缺点:

              更大的学习曲线 - 要使用MVC与Struts,你必须是习惯使用标准的JSP,Servlet API和大量精心设计的框架。

              欠佳的文档 - Struts有标准的servlet和JSP API的相比,更少的在线资源,许多用户第一时间发现网上Apache文档混乱和管理不善的组织。

              较少透明度 - Struts应用程序中,有很多幕后比正常的基于Java的Web应用程序,这使得它很难理解的框架。           

              执行性能较差

             

Struts2实现了MVC模式

              Model:Action的定义支持,运行特征是多实例单线程(不用考虑线程安全问题)

              View: Struts2默认提供了4种视图技术的支持,JSP, Freemarker, Velocity 和 XSLT

              Controller: 前端控制 StrutsPrepareAndExecuteFilter和一组拦截器

 

Action的定义方法:

              1、不继承任何类,不实现任何接口,就是一个POJO,这里体现了struts2的轻侵入性

                            public classMyAction{

                                          publicString execute()throws Exception{}  这是唯一要求

                            }            

                            问题:逻辑地址名缺少规范,execute方法签名IDE不能进行检查

                           

              2、引入Action接口

                            有5个常量(字串类型)是建议的逻辑地址名

                                          ERROR表示出错,跳转出错处理页

                                          SUCESS表示执行正常,跳转到成功页面

                                          Input表示跳转到输入页,实际上一般用于实现提交数据的报错显示

                                          NONE表示执行正常,但是不跳转任何页面,一般用于测试

                                          LOGIN表示跳转的登录页

                            抽象方法execute用于规范方法签名      

                                          public classAddAction implements Action {                           

                                                        publicString execute() throws Exception {

                                                                      returnSUCCESS;

                                                        }

                                          }

             

              3、为了进一步简化Action编程,Struts2提供了一个父类ActionSupport

                            public classcom.opensymphony.xwork2.ActionSupport

                            implementscom.opensymphony.xwork2.Action,所以5大常量有效,同时ActionSupport提供了execute方法的默认实现,所以子类中execute方法不是必须的

                                                         public String execute() throws Exception {                return SUCCESS;    }

                                                        com.opensymphony.xwork2.Validateable,com.opensymphony.xwork2.interceptor.ValidationAware,提供了服务器端数据校验的支持

                                                        com.opensymphony.xwork2.TextProvider,com.opensymphony.xwork2.LocaleProvider,提供了国际化和本地化的支持

                                                        java.io.Serializable

                                                       

                            public classUserAction extends ActionSupport {

                                          privateString username;  //必须有对应的get/set方法,否则注入请求参数失效

                                          publicString execute() throws Exception {

                                                        System.out.println(username);

                                                        returnNONE;

                                          }

                            }

                            <actionname="user" class="com.yan.action.UserAction"></action>     这里没有配置method属性,所以调用的方法名称一定是execute

                           

              如果需要进行服务器端数据校验?  例如:username不允许为空

                                                        @Override

                                                        publicvoid validate() {

                                                                      //这个用法用于在执行execute方法之前进行服务器端数据校验

                                                                      if(username==null|| username.trim().length()<1)

                                                                                    this.addFieldError("username","用户名称不能为空");//addFieldError用于添加和输入域相关的报错信息,参数1是输入域的名称,实际就是报错显示的位置;参数2是报错提示信息

                                                                      //主要添加了报错信息,则不会执行execute方法,而是默认直接跳转到INPUT页面,所以必须配置<result name=input>

                                                        }

                           

              如何显示报错信息?

                            使用Struts2的标签库,Struts2标签库可以分为两大类:UI标签和非UI标签

                            在开发中可以直接使用html标签定义页面,但是定义比较繁琐,显示报错信息比较麻烦,建议使用Struts2的标签

                                  引入标签库:<%@ taglib uri="/struts-tags"prefix="s" %>

                                          引入UI标签的css和相关的js文件<s:head/>

                                          定义form表单<s:form action="user.action">

                                          定义单行输入域<s:textfield name="username" label="用户名称"/>                name是输入域名称,label是对应的显示提示信息

                                          定义密码输入域<s:password name="password" label="用户口令"/>

                                          定义提交按钮<s:submit value="提交数据"/>

                                          使用<s:form>默认自动显示报错信息

                           

 

运行时常量的配置 struts2-core.jar中/org/apache/struts2/default.properties

              Struts2中默认的后缀是.action或者没有后缀

                            struts.action.extension=action,,

                            如果需要修改配置  struts.xml中定义

                            <constantname="struts.action.extension" value="action"/>

                            这里表示只能使用.action后缀,没有后缀不识别                                                 

                        

                                                                                                                              

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值