Struts中API介绍

ServletAPI

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

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

如何获得到servlet中的API

完全解耦合的方式

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

使用Servlet的API的原生方式

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

    1.alias :查看系统中所有的命令别名 2.设定别名 alias 别名='原命令' 3.删除别名 unalias 别名 4.使别名永久生效    vi  ~/.bashrc  写入这个文件中即可永 ...

  2. 信息安全学习笔记--XSS

    一.XSS简介 XSS (Cross Site Scripting)是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中.比如这些代码包括HTML代 ...

  3. css3兼容性问题归纳

    Android2.3的overflow问题 在android2.3及以下系统版本的浏览器不支持overflow:scroll / auto,即在页面元素里面的内容如果超过了父元素或祖先元素的高度是无法 ...

  4. Material Design In Action——重构bilibili客户端

    前言 哔哩哔哩动画是中国大陆的一家弹幕视频网站,在中国二次元用户中颇受欢迎. 哔哩哔哩动画之前推出过采用 Android Design 的 Android 客户端,虽然有使用了部分过时控件(例如 Sc ...

  5. openjudge-NOI 2.5-1700 八皇后问题

    题目链接:http://noi.openjudge.cn/ch0205/1700/ 题解: 经典深搜题目…… #include<cstdio> ][]; int num; void pri ...

  6. C基础 旋转数组查找题目

    前言 - 引言 题目: 一类有序数组旋转查值问题. 例如: 有序数组 [ , , , , , , , , ] 旋转后为 [ , , , , , , , , ] 如何从中找出一个值索引, not fou ...

  7. RabbitMQ--work queues(二)

    封装一个task到一个message,并发送到queue.consumer会去除task并执行这个task. 这里我们简化了操作,发送消息到队列中,consumer取出消息计算里面'.'号有几个就sl ...

  8. mac下PHPStorm2018.2破解教程

    1.首先安装phpstorm 2.下载JetbrainsCrack-3.1-release-enc.jar然后把这个文件放入安装phpstorm/contents/lib目录下 3.用文本编辑器打开p ...

  9. python基础--os模块和sys模块

    os模块提供对操作系统进行调用的接口 # -*- coding:utf-8 -*-__author__ = 'shisanjun' import os print(os.getcwd())#获取当前工 ...

  10. fsevents npm install是报错

    npm install 安装插件的时候,fsevents报错,这是node 8.x版本的问题,解决办法,把node 版本切换到6.x