保存登陆新闻及数量校验爱博体育app下载

1. 什么是Struts2
struts二是以WebWork的统筹思想为骨干,吸收了Struts一的片段有点,建立了特出WebWork和Struts一的MVC框架。

  
在JSP中劳动器端保存数据的效率域日常有request、session、application,它们对应的Servlet
API分别是HttpServletLacrossequerst、HttpSession、ServletContext。同样在Struts2的控制器中也亟需拜访这么些功用域。

1.一 WebWork: 强调系统里头的松耦合,使用拦截器来落到实处控制。
不借助于于web容器,
从而消除了框架对ServletAPI的紧凑耦合,使得测试越发便宜。同时,在表现层辅助越来越多的视图技术,开发越来越灵活。

 
Struts二提供了1个ActionContext类,该类被称为Action上下文或然Action环境,Action可以因此此类访问最常用的ServletAPI。

贰. struts的得失
【优点】
二.1. 达成MVC情势,结构清晰,使开发者只关怀业务逻辑的完结.
2.2. 有加上的tag能够用
,Struts的标记库(Taglib),如能灵活采纳,则能大大进步开发功效。其它,就近来国内的JSP开发者而言,除了运用JSP自带的常用标记外,很少开发协调的符号,或然Struts是3个很好的起源。
二.3.
页面导航.页面导航将是之后的三个向上趋势,事实上,那样做,使系统的脉络特别鲜明。通过贰个布局文件,即可把握总体种类各部分之间的关系,那对于早先时期的保卫安全有着中度的补益。特别是当另一堆开发者接手那么些类型时,那种优势呈现得尤为旗帜明显。
二.4. 提供Exception处理体制 .
二.伍. 多少库链接池管理
2.6. 支持I18N
【缺点】
2.1转到浮现层时,供给配置forward,每2回转到呈现层,相信大多数都以平素转到jsp,而涉嫌到转会,必要安顿forward,假如有十一个呈现层的jsp,要求配置十一次struts,而且还不包涵有时候目录、文件变更,供给再行修改forward,注意,每回修改配置之后,须求重新铺排整个项目,而tomcate这样的服务器,还非得重新起动服务器,借使事情转移复杂频仍的系统,那样的操作简易不可想像。以后正是这么,几10浩大个人同时在线使用大家的系统,大家能够想像一下,烦恼有多大。
2.二 Struts
的Action必需是thread-safe格局,它只是允许一个实例去处理全体的请求。所以action用到的持有的能源都至关重要统1联合,这么些就挑起了线程安全的问题。
贰.叁 测试不方便.
Struts的每种Action都同Web层耦合在同步,那样它的测试正视于Web容器,单元测试也很难完毕。但是有二个Junit的扩展工具Struts
TestCase能够兑现它的单元测试。
二.4 类型的转换.
Struts的FormBean把富有的数额都当做String类型,它能够动用工具Commons-Beanutils举办项目转化。但它的转载都以在Class级别,而且转化的类型是不可配置的。类型转化时的错误新闻再次来到给用户也是可怜困难的。
二.伍 对Servlet的借助过强. Struts处理Action时必必要正视ServletRequest
和ServletResponse,所有它摆脱不了Servlet容器。
二.陆前端表达式语言方面.Struts集成了JSTL,所以它至关心珍视要采用JSTL的表明式语言来获取数据。然则JSTL的表达式语言在Collection和索引属性方面处理显得很弱。

 ServletAPI有多样走访格局:

3. Struts2 的获取
http://struts.apache.org

   1. Servlet
API解耦的拜访方式,使用ActionContext访问ServletAPI

4. Struts2 的应用

      常用方法有:

  • 四.1 确认环境

        getContext():静态方法,获取当前ActionContext实例。

一) 在档次中引进Struts二 jar包
struts2-core xwork-core ognl fremarker javassist commons-fileupload
commons-io Commons-lang
二) 修改工程的web.xml文件,配置过滤器

        getSession():重返3个Map对象,该指标模拟了session作用域。

  • 四.二 代码编写

        getApplication():再次回到1个Map对象,该对象模拟了application作用域。

一)
编写开发处理请求的Action类,并落实具体的处理请求的方法,该方式需要再次来到1个字符串类型的结果【action类,
extends ActionSupport】
2) 编写struts.xml文件,对Action实行安排【位于src的根目录下】
3) 编写与Action相关的JSP页面

        get(String
key):对该方法传入“request”参数,既可回到一个Object对象,该目的模拟了request功用域。

5. Struts2访问servletAPI对象

        getParamenters();再次来到贰个Map对象,该对象中保存了浏览器上传的参数。代码如下:

  • 五.一使用ActionContext类获取ServletAPI对象对应的MAP对
 1         //获得上下文
 2         ActionContext context=ActionContext.getContext();
 3         //关联request范围的数据
 4         Map requestMap=(Map)context.get("request");
 5         requestMap.put("req_user",users);
 6         //保存在session范围
 7         Map sessionMap=context.getSession();
 8         sessionMap.put("session_user", users);
 9         //保存在全局范围
10         Map appMap=context.getApplication();
11         appMap.put("app_user", users);        

【使用Map对象替代ServletAPI中的HttpServletRequest, HttpSession和
ServletContext】

 

1) 获得request参数 【get()】
ActionContext ac = ActionContext.getContext();
Map request = (Map)ac.get(“request”);

    二.
以IoC的办法访问Servlet API

二) 获取对象的HttpSession对象的Map对象【getSession()】
Map session = ActionContext.getContext().getSession();

       在地点的代码中,request,session,application这一个成效域对象都以由Action类本人来获得的,那么些做法的天性是获得对象和使用对象的代码放在了二个类中,还    有壹种做法是:Action类中只保留使用这么些目的的代码,而获取对象的代码由Struts2来兑现,Struts2获取那么些目的后再把这么些指标注入到Action类中,Action类即可使    用这几个指标。那种完结思想正是威名昭著的IoC。它亦可分离获取对象和选取对象的代码,使系统特别“解耦和”。

三) 获取相应的ServletContext对象的Map对象 【getApplication()】
Map app = ActionContext.getContext().getApplication();

    代码如下:

以身作则: Action页面保存用户名: session.put(“name”,”values”);
         JSP页面获取用户名: ${sessionScope.name}

 1 public class UserAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{
 2 
 3     private Map<String, Object>request;
 4     private Map<String, Object>session;
 5     private Map<String, Object>application;
 6 
 7     @Override
 8     public void setApplication(Map<String, Object>application) {
 9         // TODO Auto-generated method stub
10         this.application=application;
11     }
12     @Override
13     public void setSession(Map<String, Object> session) {
14         // TODO Auto-generated method stub
15         this.session=session;
16     }
17     @Override
18     public void setRequest(Map<String, Object> request) {
19         // TODO Auto-generated method stub
20         this.request=request;
21     }
22 }
  • 五.贰 struts二 向Action
    注入ServletAPI对象对应的Map对象

    在上头的代码中,Action达成了RequestAware,SessionAware,ApplicationAware接口,那样Struts二就能够为该Action注入request、session、application对象    了。以session为例,Struts2取得session对象,当UserAction对象被创制后,Struts2会判断UserAction是不是落实了SessionAware接口,若已实现,就会调用Useraction

 

   的setSession()方法,并把session作为参数字传送入该格局,该方法的“this.seesion=session”代码会把session保存为一个分子变量,那样就兑现了session对象的流入。

  • 5.三 与Servlet
    API耦合的拜会情势

  叁.Servlet API耦合的走访格局

 

    通过ServletActionContext类获取ServletAPI对象

6. Struts 2 标签

      Strutes二提供了ServletActionContext用来获得原始的Servlet
API

标签分为两类: UI标签(UI Tag) 和通用标签 (Generic Tag)
<%@taglib uri=”/struts-tags” prefix=”s” %>

      ServletActionContext  getServletContext();

陆.壹 UI标签: 表单标签、非表单标签、Ajax标签
<s:form></s:form> <s:textfield></s:textfield>
……

 

陆.二 通用标签: 条件标签 <s:if> <s:elseif> <s:else>
迭代标签: <s:iterator>

      HttpServletResponse  getResponse();

 

 

      HttpServletRequest   getRequest();    

      通过request.getSession()获取session对象

 

      通过xxx.setAttribute()设置值

代码如下:

1         HttpServletRequest request=ServletActionContext.getRequest();
2         HttpServletResponse response=ServletActionContext.getResponse();
3         HttpSession session=request.getSession();
4         ServletContext application=ServletActionContext.getServletContext();
5         request.setAttribute("req_user", users);
6         session.setAttribute("session_user", users);
7         application.setAttribute("app_user",users);

  

Struts二的多大校验

继承ActionSupport类来完结Action开发

ActionSupport类不仅对Action接口举行简易完成,同时扩展了印证、本地化等支撑

万一出错会查找result
input页面借使未有会报40肆

        <action name="UserAction" class="com.house.action.UserAction" method="reg">
            <result name="show" type="dispatcher">/ch01/show.jsp</result>
            <result name="input">/ch01/reg.jsp</result>
        </action>

public class HouserUserAction extends ActionSupport{
//...省略代码
        public void validate(){
            if(uname==null||uname.equals("")){
            super.addFieldError("uname_err","用户名必须填写");
            }
            if(upwd==null||upwd.equals("")){
                super.addFieldError("upwd_err","密码必须填写");
            }
        }
}

HTML显示导入struts2标签
 <%@ taglib uri=“/struts-tags” prefix=“s” %>

<s:fielderror fieldName=“uname_err”/>突显错误新闻,假使name属性不做设置会把错误音信全部输出且因为struts标签没经过fiter过滤器,jsp页面不识别,必须在web.Xml里展开安排  /* 过滤全数

Struts 标签会自带样式能够活动安装,只怕在struts中设置   struts.ui.them 打消样式

 

 

  

相关文章