三 Struts2 添加返回数据
一。struts2如何获取servletAPI
1.解耦和的方式获取封装后的Map对象,这种获取的map对象只有存取数据的功能.
Map request = (Map) ActionContext.getContext().get("request");
//获取session的map封装对象
Map session = ActionContext.getContext().getSession();
//获取application的map封装对象
Map application = ActionContext.getContext().getApplication();
2.非解耦和拿到实际的httpservlet的API,这样拿到的对象具有原来本身的功能.
//获取httpservletrequest
HttpServletRequest req = ServletActionContext.getRequest();
//HttpServletResponse
HttpServletResponse resp = ServletActionContext.getResponse();
//获取httpSession
HttpSession sess = req.getSession();
//获取Application
ServletContext app = ServletActionContext.getServletContext();
3.IOC(反转控制)的方式获取,实现特定接口(如RequestAware,SessionAware,ApplicationAware,ServletRequestAware,ServletResponseAware,ServletContextAware接口),然后给属性相应的set方法就能注入对象.
二。action中的重定向
就是把struts.xml中的result的type属性设置为:redirect
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="login" method="post">
用户名:<input name="username"><br>
密码:<input type="password" name="pwd"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
LoginAction.java
package com.action; import java.util.Map; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.util.ServletContextAware; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;
import com.pojo.User; public class LoginAction implements ModelDriven<User>,RequestAware,SessionAware,ApplicationAware,ServletRequestAware,ServletResponseAware,ServletContextAware{
//1.用属性绑定参数
// String username;
// String pwd;
//
// public String getUsername() {
// return username;
// }
//
// public void setUsername(String username) {
// this.username = username;
// }
//
// public String getPwd() {
// return pwd;
// }
//
// public void setPwd(String pwd) {
// this.pwd = pwd;
// } //2.用pojo对象绑定页面参数
// User user;
//
// public User getUser() {
// return user;
// }
//
// public void setUser(User user) {
// this.user = user;
// } //3.用pojo对象绑定,用ModelDriver接口来实现
User user = new User();
@Override
public User getModel() {
return user;
} //三。注入servletAPI对象
Map request;
Map session;
Map application;
HttpServletRequest servletRequest;
HttpServletResponse servletResponse;
ServletContext servletContext; public void setRequest(Map request) {
this.request = request;
} public void setSession(Map session) {
this.session = session;
} public void setApplication(Map application) {
this.application = application;
} public void setServletRequest(HttpServletRequest servletRequest) {
this.servletRequest = servletRequest;
} public void setServletResponse(HttpServletResponse servletResponse) {
this.servletResponse = servletResponse;
} public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
} public String execute(){
System.out.println("username="+user.getUsername()+"pwd="+user.getPwd()); //一。获取被封装后的servletAPI
//1.获取request被封装后的map对象
Map req = (Map) ActionContext.getContext().get("request");
req.put("user", user);
//2.获取session本封装后的map对象
Map session = ActionContext.getContext().getSession();
session.put("user", user);
//3.获取application被封装后的map对象
Map app = ActionContext.getContext().getApplication(); //二。获取原servletAPI
HttpServletRequest req = ServletActionContext.getRequest();
HttpServletResponse resp = ServletActionContext.getResponse();
HttpSession sess = req.getSession();
ServletContext applicatipn = ServletActionContext.getServletContext(); System.out.println("请求的ip地址是:"+req.getRemoteAddr()+"||"+req.getRemoteHost()); return "success";
}
}
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
欢迎${user.username }登录
</body>
</html>
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="my" namespace="/" extends="struts-default">
<action name="login" class="com.action.LoginAction">
<result name="success" type="redirect">/jsp/success.jsp</result>
</action>
</package>
</struts>
三 Struts2 添加返回数据的更多相关文章
- struts2使用jsp和<s:property>标签获取json格式的返回数据
struts2使用jsp和<s:property>标签获取json格式的返回数据 1.struts2的action中 return "success"; 2.指向的返回 ...
- 第一行Kotlin系列(三)Intent 向上一页返回数据onActivityResult的使用
1.MainActivity.kt跳转处理 声明全局的按钮对象 private lateinit var button8: Button 实例化按钮对象 button8 = findViewById( ...
- 【spring 后台跳转前台】使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中
问题: 使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中 问题展示: 问题解决: 最后发现是因为后台的方法并未加注解:@ResponseBody,导致方法 ...
- Struts2与Ajax数据交互
写在前面: ajax请求在项目中常常使用,今天就平时掌握的总结一下,关于使用ajax请求到Struts2中的action时,前台页面与后台action之间的数据传递交互问题. 这里我主要记录下自己所掌 ...
- {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析
MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...
- 【springMVC 后台跳转前台】1.使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中 ----2.前后台都没有报错,不能进入ajax回调函数
问题1: 使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中 问题展示: 问题解决: 最后发现是因为后台的方法并未加注解:@ResponseBody,导致方 ...
- Fiddler -工具使用介绍(附:拦截请求并修改返回数据)(转)
一.Fiddler 介绍 Fiddler 是一个使用 C# 编写的 http 抓包工具.它使用灵活,功能强大,支持众多的 http 调试任务,是 web.移动应用的开发调试利器. 1,功能特点 同 H ...
- vue项目中使用mockjs模拟接口返回数据
Mock.js 是一个模拟数据生成器,利用它,可以拦截ajax请求,直接模拟返回数据,这样前后端只要约定好数据格式,前端就不需要依赖后端的接口,可以直接使用模拟的数据了. 网上介绍mock的教程也较多 ...
- js 给json添加新的字段,或者添加一组数据,在JS数组指定位置删除、插入、替换元素
JS定义了一个json数据var test={name:"name",age:"12"};需要给test再添加一个字段,需要什么办法,可以让test的值为{na ...
随机推荐
- 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据
为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...
- 【Java基础】【18Map集合&模拟斗D主X排和F排】
18.01_集合框架(Map集合概述和特点) A:Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接 ...
- python基础1--安装、package、数据类型
1.下载python 下载地址https://www.python.org/downloads/ 2.Package以及数据类型 自带package和外部package 自带package举例: os ...
- Linux之Nginx使用
一.nginx安装(编译安装) 1,安装需要的依赖库 yum install -y gcc patch libffi-devel python-devel zlib-devel bzip2-devel ...
- Redux,基础
在学习了React之后, 紧跟着而来的就是Redux了~ 在系统性的学习一个东西的时候, 了解其背景.设计以及解决了什么问题都是非常必要的. 接下来记录的是, 我个人在学习Redux时的一些杂七杂八~ ...
- “/"应用程序中的服务器错误
运行ASP.NET MVC项目时,出现了如下错误: 在网上搜索了很久并没有找到有用的答案,后来请朋友看了一下,最后改了端口号才运行成功,错误应该是之前的端口号被占用导致的.
- VBA批量导入图片到多Word文档并加标题(会飞的鱼)
感谢会飞的鱼大牛~ Public fp$, obmapp As Object Sub kk() 文件夹浏览器 Application.ScreenUpdating = False Set fso = ...
- 冒泡排序/选择排序/插入排序(c#)
---恢复内容开始--- 每次看这些排序都像没见过一样,完全理解不了,可是不久前明明了解的十分透彻.记下来记下来记下来! 1>>>冒泡排序:相邻的两两相比 把大的(或者小的)放后边, ...
- 理解PHP的垃圾回收机制
什么是垃圾回收机制 使用的是“引用计数”方式进行回收.简单地理解的话,就是每个分配的内存区域都有一个计数器,记录有多少个变量指针指向这片内存.当指向该片内存的指针数量为0,那么该片内存区域就可以被回收 ...
- win10安装ubuntu16.04双系统
前话:因为感兴趣吧也是专业需要,所以自学了U盘重装系统以及在win10的情况下安装Ubuntu16.04双系统.借此博客,记录下我安装Ubuntu的过程,方便日后回忆. 正因如此,本篇博客会写的十分简 ...