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

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

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

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

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

    在控制台输出如下内容,说明通过ActionContext的getparameters已经获取到表单中的数据:
         同时浏览器跳转到suc.jsp页面中,浏览器显示内容如下,说明request域、session域、应用域已经获得了在action中放的数据:

    

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

3. 使用原生Servlet的API的方式(通过ServletActionContext得到request)(核心类为ServletActionContext类)
* Struts2框架提供了一个类,ServletActionContext,该类中提供了一些静态的方法
* 具体的方法如下
* getPageContext()
* getRequest()
* getResponse()
* 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. 正则表达式(Python)

    课题 使用正则表达式匹配字符串 使用正则表达式 "\d{3}-(\d{4})-\d{2}" 匹配字符串 "123-4567-89" 返回匹配结果:'" ...

  2. wParam与lParam的区别

    wParam与lParam的区别 lParam 和 wParam 是宏定义,一般在消息函数中带这两个类型的参数,通常用来存储窗口消息的参数. LRESULT CALLBACK WindowProc(H ...

  3. Structs复习 ActionMethod

    action在执行的是时候 可以不执行excute方法 可以由自己制定 可以在action标签里指定  也可以在方法里动态指定 推荐使用后者 jar包 web.xml <?xml version ...

  4. Java Script 基础总结

    1学习ajax需要一点CSS的基础和JavaScipt基础 今天重温一下Javascrpt基础 1.<script type="text/javascript">< ...

  5. 设置git的http代理

    如果git仓库不和本地代码之间不可以直达,这个时候就可以考虑使用git 代理的方式提交代码到git仓库了; git http代理或者https代理,配置在~/.gitconfig 文件下,可以直接编辑 ...

  6. java中Integer和int的区别(转)

    int和Integer的区别 1.Integer是int的包装类,int则是java的一种基本数据类型 2.Integer变量必须实例化后才能使用,而int变量不需要 3.Integer实际是对象的引 ...

  7. hdu1002-A + B Problem II-(java大数)

    A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. 《深入理解JAVA虚拟机》----------第三章 垃圾收集器与内存分配策略,笔记(下)

    1.垃圾收集器 1.1 Serial收集器 这个收集器是一个单线程的收集器,它在进行垃圾收集时,必须暂停其他所有的工作线程. 它是虚拟机运行在Client模式下的默认新生代收集器,它简单而高效. 1. ...

  9. QQ传文件测试要点

    总-分-总 UI:   进度:进度条.百分比.速度.已传文件大小 显示传送文件图标.悬浮有文字 功能入口:图标.菜单项 各种提示:开始传送.各种异常信息的提示.传送结束 给好友传文件.给群传文件 功能 ...

  10. OpenCV之Vec3f

    Vec3f表示的是3通道float类型的 Vect,就相当于3通道float类型的图像(这是其中一个具体化),解释可以从源代码中看出来. 下面给出一个具体的例子: Vec3f point = Vec3 ...