在JSP中服务器端保存数据的作用域通常有request、session、application,它们对应的Servlet API分别是HttpServletRquerst、HttpSession、ServletContext。同样在Struts2的控制器中也需要访问这些作用域。

Struts2提供了一个ActionContext类,该类被称为Action上下文或者Action环境,Action可以通过该类访问最常用的ServletAPI。

 ServletAPI有多种访问方式:

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

      常用方法有:

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

        getSession():返回一个Map对象,该对象模拟了session作用域。

        getApplication():返回一个Map对象,该对象模拟了application作用域。

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

        getParamenters();返回一个Map对象,该对象中保存了浏览器上传的参数。代码如下:

         //获得上下文
ActionContext context=ActionContext.getContext();
//关联request范围的数据
Map requestMap=(Map)context.get("request");
requestMap.put("req_user",users);
//保存在session范围
Map sessionMap=context.getSession();
sessionMap.put("session_user", users);
//保存在全局范围
Map appMap=context.getApplication();
appMap.put("app_user", users);

    2. 以IoC的方式访问Servlet API

       在上面的代码中,request,session,application这些作用域对象都是由Action类自己来获取的,这个做法的特点是获取对象和使用对象的代码放在了一个类中,还    有一种做法是:Action类中只保留使用这些对象的代码,而获取对象的代码由Struts2来实现,Struts2获取这些对象后再把这些对象注入到Action类中,Action类即可使    用这些对象。这种实现思想就是著名的IoC。它能够分离获取对象和使用对象的代码,使系统进一步“解耦和”。

    代码如下:

 public class UserAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{

     private Map<String, Object>request;
private Map<String, Object>session;
private Map<String, Object>application; @Override
public void setApplication(Map<String, Object>application) {
// TODO Auto-generated method stub
this.application=application;
}
@Override
public void setSession(Map<String, Object> session) {
// TODO Auto-generated method stub
this.session=session;
}
@Override
public void setRequest(Map<String, Object> request) {
// TODO Auto-generated method stub
this.request=request;
}
}

    在上面的代码中,Action实现了RequestAware,SessionAware,ApplicationAware接口,这样Struts2就可以为该Action注入request、session、application对象    了。以session为例,Struts2取得session对象,当UserAction对象被创建后,Struts2会判断UserAction是否实现了SessionAware接口,若已实现,就会调用Useraction

   的setSession()方法,并把session作为参数传入该方法,该方法的“this.seesion=session”代码会把session保存为一个成员变量,这样就实现了session对象的注入。

  3.Servlet API耦合的访问方式

    通过ServletActionContext类获取ServletAPI对象

      Strutes2提供了ServletActionContext用来获取原始的Servlet API

      ServletActionContext  getServletContext();

      HttpServletResponse  getResponse();

      HttpServletRequest   getRequest();    

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

      通过xxx.setAttribute()设置值

代码如下:

         HttpServletRequest request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
HttpSession session=request.getSession();
ServletContext application=ServletActionContext.getServletContext();
request.setAttribute("req_user", users);
session.setAttribute("session_user", users);
application.setAttribute("app_user",users);

  

Struts2的数据校验

继承ActionSupport类来完成Action开发

ActionSupport类不仅对Action接口进行简单实现,同时增加了验证、本地化等支持

如果出错会查找result input页面如果没有会报404

        <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 取消样式

  

Struts2学习第三天——保存登陆信息及数据校验的更多相关文章

  1. Struts2学习(三)———— 输入校验和拦截器

    一.输入校验 在以前我们写一个登录页面时,并没有限制用户的输入,不管用户输入什么,我们都存入数据库中,很显然这是不行的,我们需要检测用户输入的文本是否合法,是否符合我们需要的文本格式,符合菜放行,而s ...

  2. SpringMVC学习笔记六:使用 hibernate-validator注解式数据校验

    对客户端传过来的参数,在使用前一般需要进行校验. SpringMVC框架内置了Validator验证接口,但是实现起来太麻烦.我们一般使用 hibernate-validator进行数据校验. 1:j ...

  3. Struts2学习笔记(三)——Action详解

    Action是用于处理请求操作的,它是由StrutsPrepareAndExceuteFilter分发过来的. 1.Action的创建方式 1) POJO类(PlainOldJavaObjects简单 ...

  4. Struts2学习笔记三:深入Action

    一:Action中获取参数值 在Servlet中,我们通过doGet()/doPost()方法中的参数,获取request/response对象,然后提取参数值: 处理请求结束后,有数据需要携带返回客 ...

  5. struts2学习笔记三

    一.国际化概念(了解) 1.什么是国际化 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 2.什么需要国际 ...

  6. Struts2学习第三课 访问Web资源

    1.什么是WEB资源? HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么访问WEB资源? B/S的应用的Contr ...

  7. Struts2学习笔记三 访问servlet

    结果跳转方式 转发 <!-- 转发 --> <action name="Demo1Action" class="cn.itheima.a_result. ...

  8. Struts2学习(三)

    一.值栈 1.OGNL表达式 OGNL的概述:对象图导航语言,是一门功能强大的表达式语言. 2.值栈 值栈的概述(ValueStack):是一个接口,实现类OgnlValueStack.是数据的中转站 ...

  9. Struts2 学习(三)

    一.访问Servlet API 的三种方式 1.什么是 Action 访问 Servlet 的 API 1.访问 Servlet 的API: 1.获取 request 对象. 2.接受请求参数. 3. ...

随机推荐

  1. node项目初始化的一些配置

    1. const port = process.env.PORT || 9001; 本地开发用9001端口 2. package.json中配置几个启动命令 "scripts": ...

  2. [持续交付实践] 开篇:持续集成&持续交付综述

    前言 随着微服务架构与容器虚拟化技术的发展,持续集成与持续交付的概念又重新回到了大家的视野,越来越多的公司开始使用持续集成的系统来解决频繁发布带来的质量问题:使用持续交付的工具来实现代码在不同环境上的 ...

  3. orcal 安装失败解决办法

    若安装失败

  4. 第一篇、Python初识

    1.Python文件后缀是否可以任意? 单独执行的时候没关系,但当文件需要导入(即导入模块)的时候,如果不是py后缀的,会出错. 2.执行方法 1) python +文件路径 python + fil ...

  5. python爬虫之scrapy

    架构概览 本文档介绍了Scrapy架构及其组件之间的交互. 概述 接下来的图表展现了Scrapy的架构,包括组件及在系统中发生的数据流的概览(绿色箭头所示). 下面对每个组件都做了简单介绍,并给出了详 ...

  6. Android应用开发中,第三方集成新浪微博(sinaWeiboSDK)的过程记录

    作为一个android开发人员,不可避免的要学会使用和集成第三方API的能力 而新浪微博作为现在最主要的新闻速递媒体,使用十分普遍,并且提供了较为详细的API接入方法,故此选择集成sinaWeibiS ...

  7. 通过jquery 获取用户当前所在的城市名称和IP地址

    下面这段JS代码是通过jquery 结合新浪IP地址库和QQip地址库接口获取用户当前所在的城市(省份)名称. 用户当前IP地址等数据.其中当前IP是通过 QQip地址库接口获取,其他数据都是通过 新 ...

  8. 1.MySQL基础

    1.创建一个数据库: create database db_test; 2.创建一个表: MySQL [mysql]> use db_test; Database changed MySQL [ ...

  9. cmake find_package 中,include_directories,target_link_libraries 的值怎么知道?

    拿Sophus库为例: find_package(Sophus REQUIRED) include_directories(${Sophus_INCLUDE_DIRS}) target_link_li ...

  10. eclipse git(版本回退)

    https://www.cnblogs.com/duex/p/6389999.html