Struts中API介绍

ServletAPI

在使用Struts2的框架的过程中,发现Struts2和Servlet的API是解耦合的。

在实际开发中,经常使用到Servlet的API,比如进行登录,将用户的信息保存到Session中,有的时候需要向页面输出一些内容,用到response对象。涉及到Servlet的API的访问。

如何获得到servlet中的API

完全解耦合的方式

  • 使用ActionContext来进行获取
  • 注意
    • 此方法只能从域中取数据和保存数据
    • 不能获取其它的方法
使用步骤
  1. <form action="${pageContext.request.contextPath }/myform.action"
  2. method="get">
  3. 用户名:<input type="text" placeholder="请输入用户名..." name="username"><br />
  4. 昵称:<input type="text" placeholder="请输入用户名..." name="nick"><br />
  5. 爱 好:
  6. <input type="checkbox" value="足球" name="hobby">足球
  7. <input type="checkbox" value="篮球" name="hobby">篮球
  8. <input type="checkbox" value="乒乓球" name="hobby">乒乓球<br />
  9. <input type="submit" value="提交">
  10. </form>
  1. <struts>
  2. <package name="struts" extends="struts-default" namespace="/">
  3. <action name="myform" class="com.xzh.struts2.MyFormAction">
  4. <!-- 结果页 -->
  5. <result name="success">/myxq.jsp</result>
  6. </action>
  7. </package>
  8. </struts>
  1. public class MyFormAction extends ActionSupport {
  2. public String execute() {
  3. // 获取参数
  4. ActionContext context = ActionContext.getContext();
  5. HttpParameters parameters = context.getParameters();
  6. // 根据key取值
  7. String username = parameters.get("username").getValue();
  8. System.out.println(username);
  9. String nick = parameters.get("nick").getValue();
  10. System.out.println(nick);
  11. String[] hobbys = parameters.get("hobby").getMultipleValues();
  12. System.out.println(Arrays.toString(hobbys));
  13. // 获取所有参数
  14. Set<Map.Entry<String, Parameter>> MapEntry = parameters.entrySet();
  15. for (Map.Entry<String, Parameter> entry : MapEntry) {
  16. System.out.println(entry.getKey());
  17. System.out.println(Arrays.toString(entry.getValue().getMultipleValues()));
  18. }
  19. // 把数据存放到域中
  20. context.put("resName", "resValue");
  21. context.getSession().put("sessionName", "sessionValue");
  22. context.getApplication().put("ApplicationName", "ApplicationValue");
  23. return SUCCESS;
  24. }
  25. }
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Title</title>
  5. </head>
  6. <body>
  7. <h1>myxq</h1>
  8. res:${reqName }
  9. session:${sessionName }
  10. Application:${ApplicationName }
  11. </body>
  12. </html>
示例表单
  1. <form>
  2. 用户名:<input type="text" placeholder="请输入用户名..." name="username"><br/>
  3. 昵称:<input type="text" placeholder="请输入用户名..." name="nick"><br/>
  4. 爱 好: <input type="checkbox" value="足球" name="hobby">足球
  5. <input type="checkbox" value="篮球" name="hobby">篮球
  6. <input type="checkbox" value="乒乓球" name="hobby">乒乓球<br/>
  7. <input type="submit" value="提交">
  8. </form>

使用Servlet的API的原生方式

  • servletActionContext
  • 这种方式可以操作域对象的数据,同时也可以获得对象的方法。
  • 使用步骤
  1. <form action="${pageContext.request.contextPath }/myform.action"
  2. method="get">
  3. 用户名:<input type="text" placeholder="请输入用户名..." name="username"><br />
  4. 昵称:<input type="text" placeholder="请输入用户名..." name="nick"><br />
  5. 爱 好:
  6. <input type="checkbox" value="足球" name="hobby">足球
  7. <input type="checkbox" value="篮球" name="hobby">篮球
  8. <input type="checkbox" value="乒乓球" name="hobby">乒乓球<br />
  9. <input type="submit" value="提交">
  10. </form>
  1. <struts>
  2. <package name="struts" extends="struts-default" namespace="/">
  3. <action name="myform" class="com.xzh.struts2.MyFormAction">
  4. <!-- 结果页 -->
  5. <result name="success">/myxq.jsp</result>
  6. </action>
  7. </package>
  8. </struts>
  1. public class MyFormAction extends ActionSupport {
  2. public String execute() {
  3. // 获取原生api
  4. HttpServletRequest request = ServletActionContext.getRequest();
  5. // 根据key取值
  6. String username = request.getParameter("username");
  7. System.out.println(username);
  8. String nick = request.getParameter("nick");
  9. System.out.println(nick);
  10. String[] hobbys = request.getParameterValues("hobby");
  11. System.out.println(Arrays.toString(hobbys));
  12. // 获取所有参数
  13. Map<String, String[]> parameterMap = request.getParameterMap();
  14. for (String key : parameterMap.keySet()) {
  15. String[] values = parameterMap.get(key);
  16. System.out.println(key + " " + Arrays.toString(values));
  17. }
  18. // 把数据存放到域中
  19. request.setAttribute("resName", "resValue");
  20. request.getSession().setAttribute("sessionName", "sessionValue");
  21. ServletActionContext.getServletContext().setAttribute("ApplicationName", "ApplicationValue");
  22. return SUCCESS;
  23. }
  24. }
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Title</title>
  5. </head>
  6. <body>
  7. <h1>myxq</h1>
  8. res:${reqName }
  9. session:${sessionName }
  10. Application:${ApplicationName }
  11. </body>
  12. </html>

接口注入的方式

让Action实现一些接口,让接口提供的一些方法,设置一些具体的值

使用步骤

结果页配置

全局配置

  • 全局结果页面:全局结果页面指的是,在包中配置一次,
  • 其他的在这个包中的所有的action只要返回了这个值,都可以跳转到这个页面。

使用场景

有些功能需要用户登入才能使用,只要没有登录,就让它返回到登录页面,很多地方都要返回到登录,所以可以把登录页做为一个全局的

使用方法

局部配置

局部结果页面:局部结果页面指的是,只能在当前的action中的配置有效

使用方法

注意点:全局和局部名称相同时,会优先找局部

Struts2 (中)的更多相关文章

  1. struts2中从后台读取数据到<s:select>

    看到网上好多有struts2中从后台读取数据到<s:select>的,但都 不太详细,可能是我自己理解不了吧!所以我自己做了 一个,其中可能 有很多不好的地方,望广大网友指出 结果如图 p ...

  2. struts2中各个jar包作用

    Struts2.3.4 所需的Jar包及介绍 Jar包的分类 jar包名称 jar包版本 jar包 文件名 jar包 的作用 jar包内包含的主要包路径及主要类 依赖的自有jar包名称 依赖的第三方j ...

  3. Struts2中Date日期转换的问题

      今天跑程序的时候莫名其妙的出现了下面的一个异常: java.lang.NoSuchMethodException:com.ca.agent.model.mybatis.ApprovalInforC ...

  4. struts2中的jar包

    核心包: (后面数字是版本号,不同struts2版本,数字可能不一样.) struts2-core-2.1.8.1 struts2的核心jar包,不可缺少的 xwork-core-2.1.6 xwor ...

  5. Struts2中的EasyUI

    Struts2中的EasyUI 一.easy UI是类似于jQuery UI的插件库,它提供了丰富的各种常用插件:tree.datagrid... tree插件: 语法:$(selector).tre ...

  6. struts2中的jsp值传到后台action接收的三种方法

    struts2中的Action接收表单传递过来的参数有3种方法: 如,登陆表单login.jsp: <form action="login" method="pos ...

  7. Struts2中动态方法的调用

    Struts2中动态方法调用就是为了解决一个action对应多个请求的处理,以免action太多. 主要有一下三种方法:指定method属性.感叹号方式和通配符方式.推荐使用第三种方式. 1.指定me ...

  8. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  9. 关于struts2中的相对路径与绝对路径

    从昨天开始复习了struts2的课程,之所以重新走上java的道路,是觉得写了一年的go程序,并没有感觉到学习了什么,反而把java给忘得干干净净的.想想我的计划,年后就要换工作了,至于要换到什么方向 ...

  10. 5.Struts2中的拦截器

    拦截器是Struts2中的核心,其自带很多很多的拦截器,这里主要介绍一下自定义拦截器,恩多一半情况下呢?我们不需要使用到自定义的拦截器,Struts2本身已经提 供了很多的拦截器供我们使用,对于自定义 ...

随机推荐

  1. Python练习-无参装饰器的正确打开方式

    import time def DecoUserPrint(UserFunc):#定义一个DecoUserPrint接收参数的多重方法 def DecoPrint(): StartTime = tim ...

  2. Grunt、gulp、webpack、不要听着高大上你就上,试试Codekit?

    下载地址:https://incident57.com/codekit/ 官方网站了解更多 要编译Less.Sass.Stylus, CoffeeScript, Typescript, Jade, H ...

  3. JDK1.8源码ArrayList

    线程不安全的,如果要想线程安全必须在创建的时候就采用线程安全的方式创建: List list = Collections.synchronizedList(new ArrayList(...)); 引 ...

  4. flask基础之请求处理核心机制(五)

    前言 总结一下flask框架的请求处理流程. 系列文章 flask基础之安装和使用入门(一) flask基础之jijia2模板使用基础(二) flask基础之jijia2模板语言进阶(三) flask ...

  5. DRM学习总结(1)--- DRM框架介绍

    一.DRM 简介 In computing, the Direct Rendering Manager (DRM), a subsystem of the Linux kernel, interfac ...

  6. NuGet服务器搭建教程

    本文主要来自网络,进行整理而成,相关文章如下: http://diaosbook.com/Post/2012/12/15/setup-private-nuget-server https://www. ...

  7. linux终端操作快捷键

    终端操作快捷键: 新建家目录下终端窗口:Ctrl+Alt+t在当期当前路径下新建终端窗口:Ctrl+Shift+n退出终端窗口:Ctrl+Shift+q 多个终端窗口之间相互切换:Tab+Alt 终端 ...

  8. linux之发送邮件--sendmail服务配置

    新手入门也不知道什么日志分析服务好,鸟哥说logwatch,那我就从logwatch开始吧! logwatch用到了emai发邮件,先从配置邮件发送sendmail开始: 安装sendmail服务,我 ...

  9. 【前端】上拉加载更多dropload.min.js的使用

    代码如下:入职代码修改接口及html为自己的即可(下面主要展示js部分) <!DOCTYPE html><html> <head> <meta charset ...

  10. es6遍历数组forof