1. 1. Action类中也可以获取到Servlet一些常用的API
  2. * 需求:提供JSP的表单页面的数据,在Action中使用ServletAPI接收到,然后保存到三个域对象中,最后再显示到JSP的页面上。
  3. * 提供JSP注册的页面,演示下面这三种方式
  4. <h3>注册页面</h3>
  5. <form action="${ pageContext.request.contextPath }/xxx.action" method="post">
  6. 姓名:<input type="text" name="username" /><br/>
  7. 密码:<input type="password" name="password" /><br/>
  8. <input type="submit" value="注册" />
  9. </form>
  10. 2. 完全解耦合的方式(完全不需要Servletapi)(使用的核心类为:ActionContext类)
  1.    * 如果使用该种方式,Struts2框架中提供了一个类,ActionContext类,该类中提供一些方法,通过方法获取ServletAPI
        * 一些常用的方法如下 * static ActionContext getContext() -- 获取ActionContext对象实例
        ActionContext是上下文,也就是明星和经纪人的关系,action相当于明星,什么都不用准备,而actionContext就相当于经纪人(上下文),经纪人去拿action需要的东西。)
  2. * java.util.Map<java.lang.String,java.lang.Object> getParameters() -- 获取请求参数,相当于request.getParameterMap();
  3. * java.util.Map<java.lang.String,java.lang.Object> getSession() -- 获取的代表session域的Map集合,就相当于操作session域。
  4. * java.util.Map<java.lang.String,java.lang.Object> getApplication() -- 获取代表application域的Map集合
  5. * void put(java.lang.String key, java.lang.Object value) -- 注意:向request域中存入值。(直接使用put是向request域中存放数据)
  6.     
        例:
        1.创建一个Actiondemo1Action),内容如下:
  1. import java.util.Arrays;
  2. import java.util.Map;
  3. import java.util.Set;
  4.  
  5. import com.opensymphony.xwork2.ActionContext;
  6. import com.opensymphony.xwork2.ActionSupport;
  7.  
  8. /*
  9. * 完全解耦合方式,使用servlet的api
  10. */
  11. public class demo1Action extends ActionSupport{
  12. @Override
  13. public String execute() throws Exception {
  14. //完全解耦合方式
  15. ActionContext context=ActionContext.getContext();
  16. //封装所有参数到一个map集合中
  17. Map<String, Object> map=context.getParameters();
  18. //再写一个表单来获取参数表单为index.jsp
  19.  
  20. //遍历获取数据
  21. Set<String> keys=map.keySet();
  22. for(String key:keys){
  23. //因为从一个标签中获得的值不止一个,如爱好可能有多个,所以这里我们使用数组
  24. String[] values=(String[]) map.get(key);
  25. //姓名和密码只有一个,所以这里我们又强转为了字符串
  26. System.out.println(key+"..."+Arrays.toString(values));
  27. }
  28. //如果向request对象中存入值
  29. context.put("msg", "jack");//向request域中存放数据 request只有在请求转发时才有效
  30. context.getSession().put("msg", "rose");//向session中存放数据。通过getSession获得Session域对象
  31. context.getApplication().put("msg", "tom");//向应用域中存放数据。通过getAppication获得整个应用
  32.  
  33. return SUCCESS;
  34. }
  35. }

      2.再写一个表单来获取参数表单为index.jsp,将获取到的数据存储到map集合中:

  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <h3>完全解耦合的方式使用servlet的api</h3>
  11. <form action="${ pageContext.request.contextPath }/demo1Action.action" method="post">
  12. 姓名<input type="text" name="username"/><br/>
  13. 密码<input type="text" name="password"/><br/>
  14. <input type="submit" value="登录">
  15.  
  16. </form>
  17. </body>
  18. </html>

      3.最后demo1Action返回值为SUCCESS,跳转到suc界面,所以书写suc.jsp文件,suc.jsp文件中的内容如下:

  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10.  
  11. 使用el表达式获取值<br/>
  12. ${requestScope.msg}<br/>
  13. ${sessionScope.msg}<br/>
  14. ${applicationScope.msg}<br/>
  15.  
  16. </body>
  17. </html>
  1.     4.为了访问Action,需要对其进行配置,struts.xml文件的内容如下:
        
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5.  
  6. <struts>
  7.  
  8. <package name="default" namespace="/" extends="struts-default">
  9.  
  10. <action name="demo1Action" class="com.huida.action.demo1Action">
  11. <result name="success">/suc.jsp</result><!-- 从demo1Action中跳转到suc.jsp页面,默认的方式为请求转发的方式。如果在result标签中设定转发类型为重定向redirect,那么在request域中就不能通过put获取到值 -->
  12. </action>
  13. </package>
  14.  
  15. </struts>
  1.     运行index.jsp后,在浏览器中的表单中输入姓名以及密码,然后点击提交。
  2.     在控制台输出如下内容,说明通过ActionContextgetparameters已经获取到表单中的数据:
        
  3.     同时浏览器跳转到suc.jsp页面中,浏览器显示内容如下,说明request域、session域、应用域已经获得了在action中放的数据:

    

    通过配置文件我们可以看到,直接从action跳转到suc.jsp页面中,然后获得request域中的内容。而request只存在于请求转发过程中,所以从demo1Action中                   跳转到suc.jsp页面,默认的方式为请求转发方式。如果在result标签中设定转发类型为重定向redirect,那么在request域中就不能通过put获取到值。

  1. 3. 使用原生ServletAPI的方式(通过ServletActionContext得到request)(核心类为ServletActionContext类)
  2. * Struts2框架提供了一个类,ServletActionContext,该类中提供了一些静态的方法
  3. * 具体的方法如下
  4. * getPageContext()
  5. * getRequest()
  6. * getResponse()
  7. * getServletContext()

在Struts2框架中使用Servlet的API的更多相关文章

  1. Struts2框架中使用Servlet的API示例

    1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的 ...

  2. struts2:在Action中使用Servlet的API,设置、读取各种内置对象的属性

    有两种方式可以实现在Action中使用Servlet的API.一种是使用org.apache.struts2.ServletActionContext类,另一种是使用com.opensymphony. ...

  3. 5.Struts2框架中的ServletAPI如何获取

    1.完全解耦合的方式 如果使用该种方式,Struts2框架中提供了一个类,ActionContext类,该类中提供一些方法,通过方法获取Servlet的API 一些常用的方法如下 * static A ...

  4. 请求在Struts2框架中的处理步骤

    上图来源于Struts2官方站点,是Struts 2 的整体结构. 一个请求在Struts2框架中的处理大概分为以下几个步骤 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2 ...

  5. 一个请求在Struts2框架中的处理流程

    1.客户端向Servlet容器发起一个请求,将请求封装为HttpServletRequest对象. 2.HttpServletRequest首先经过web.xml中配置的struts2的过滤器,以及s ...

  6. Android已有的原生Camera框架中加入自己的API的实现方案。

    版权声明:本文为CSDN博主(天才2012)原创文章.未经博主同意不得转载. https://blog.csdn.net/gzzaigcn/article/details/25707389     在 ...

  7. 在Struts2框架中使用OGNL表达式(在jsp页面中使用OGNL表达式)

    1. Struts2引入了OGNL表达式,主要是在JSP页面中获取值栈中的值 2. 具体在Struts2中怎么使用呢?如下步骤 * 需要先引入Struts2的标签库(在JSP页面的最上面位置) > ...

  8. 关于用struts2框架中iframe对应的jsp页面的不到action的值的问题

    我们做web项目经常会用到frameset.frame以及iframe,这大大方便了我们页面的构建以及模块功能的划分.但是,再使用这些技术的同时也会遇到各种各样的问题,其中一个就是子页面中得不到str ...

  9. 一个请求在Struts2框架中的处理的步骤

随机推荐

  1. Java API下载和查阅方法

    使用来自API的类是简单的.只要把它当做自己写的就可以,采用import来引用,可以节省自己编程的气力~ 1.API文档下载地址 https://www.oracle.com/technetwork/ ...

  2. linux thread_info 与thread_struct

    有个同事看3.10代码中,看着两个结构,会混淆,所以我简单答复了一下. thread_info是和内核栈放一块的,网上到处都是thread_info的资料,但thread_struct的资料比较少,在 ...

  3. c 时间 学习

    linux #include <stdio.h> #include <time.h> int main(int argc,char **argv) { //两种时间的获取方法 ...

  4. 4.HTTP入门.md

    目录 什么是http协议 http协议:对浏览器客户端 和 服务器端 之间数据传输的格式规范 查看http协议的工具* 使用火狐的firebug插件(右键->firebug->网络) Ht ...

  5. MySQL C#连接ySQL保存当前时间,时分秒都是0,只有日期

    原因:MySQL的字段格式是:date 解决: 1.把 字段格式 改为 datetime 2.映射 的字段类型 也要改为 datetime

  6. mysql 数据导出

    windowos: select * from pj_zzspdz_fpmx  order by kprq desc LIMIT 0,1000000 into outfile 'd:\fpmx.xls ...

  7. 常见三种字符编码的区别:ASCII、Unicode、UTF-8

    什么是字符编码? 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255( ...

  8. html实现导航栏效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. linus上运行jar包文件增删查

    package com.osplat.util; import com.alibaba.fastjson.JSON; import com.osplat.bean.Resultmodel; impor ...

  10. linux shell 学习笔记01

    1.命令历史记录history !$     :调用上一条命令的执行结果 !100   :运行history记录里的第100条命令 !ser   :调用以ser开头的最后一次执行的命令 ctrl+r  ...