博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(4)获取servlet常用api
阅读量:4543 次
发布时间:2019-06-08

本文共 5018 字,大约阅读时间需要 16 分钟。

*五)与ServletAPI解耦

方式1

AddAction

public String execute() throws Exception, IOException{        //获取请求对象request 响应对象response 应用对象ServletContext        HttpServletRequest request=ServletActionContext.getRequest();        HttpServletResponse response=ServletActionContext.getResponse();        ServletContext context=ServletActionContext.getServletContext();        //获取表单参数        Integer num1=Integer.parseInt(request.getParameter("num1"));        Integer num2=Integer.parseInt(request.getParameter("num2"));        Integer sum=num1+num2;        //将请求结果放在应用对象中        context.setAttribute("sum", sum);        //将结果放在域对象request中        //request.setAttribute("sum", sum);        //转发到add.jsp中  由struts.xml中的result代替        //request.getRequestDispatcher("/add.jsp").forward(request, response);        return "success";    }

struts_add.xml

/add.jsp

add.jsp

${applicationScope.sum}

方式2

AddAction

public String execute() throws Exception, IOException{        //获取请求对象request 响应对象response 应用对象ServletContext        HttpServletRequest request=ServletActionContext.getRequest();        HttpServletResponse response=ServletActionContext.getResponse();        //方式2        Map
applicationMap=ActionContext.getContext().getApplication(); //获取表单参数 Integer num1=Integer.parseInt(request.getParameter("num1")); Integer num2=Integer.parseInt(request.getParameter("num2")); Integer sum=num1+num2; applicationMap.put("sum", sum); //将结果放在域对象request中 //request.setAttribute("sum", sum); //转发到add.jsp中 由struts.xml中的result代替 //request.getRequestDispatcher("/add.jsp").forward(request, response); return "success"; }

add.jsp仍然是${applicationScope.sum}

原则:Action不要与传统ServletAPI耦合  目的:解耦

方式3AddAction

public String execute() throws Exception, IOException{        //获取请求对象request 响应对象response 应用对象ServletContext        //HttpServletRequest request=ServletActionContext.getRequest();        HttpServletResponse response=ServletActionContext.getResponse();        //方式3        HttpSession session=request.getSession();//用了Servlet的API,不推荐        Map
sessionMap=ActionContext.getContext().getSession(); //获取表单参数 Integer num1=Integer.parseInt(request.getParameter("num1")); Integer num2=Integer.parseInt(request.getParameter("num2")); Integer sum=num1+num2; sessionMap.put("sum", sum); //将结果放在域对象request中 //request.setAttribute("sum", sum); //转发到add.jsp中 由struts.xml中的result代替 //request.getRequestDispatcher("/add.jsp").forward(request, response); return "success"; }

add.jsp  ${sessionScope.sum}

(1)获取HttpServletRequest请求对象/域对象【ServletActionContext.getRequest()】

    的父类【ActionContext.getContext().put("username",username);】

  ActionContext.getContext()返回Map<String,Object>

  获取HttpServletResponse请求对象/域对象【ServletActionContext.getResponse()】
(2)获取ServletContext域对象【ActionContext.getContext().getApplication()】
(3)获取HttpSession域对象【ActionContext.getContext().getSession()】
(4)为什么(2)(3)会返回Map类型呢?
  这是因为Struts2的Action中,不推荐引用ServletAPI,因为只返回Map对象。
  拦截器会将Map中的值,再一次绑定到真实的域对象中,其中key就是Map中的key值。

(5)

day31\WebRoot\register.jsp

新用户注册(struts2版本)

用户名
密码
cn.itcast.web.struts2.user.UserAction
package cn.itcast.web.struts2.user;public class UserAction {        //表单参数        private String username;        private String password;        //提供对应的setter方法(拦截器会将表单参数通过setter方法自动注入进来)        public void setUsername(String username) {            this.username = username;        }        public void setPassword(String password) {            this.password = password;        }        //注册的业务控制方法         public String registerMethod(){            System.out.println("用户名:" + username);            System.out.println("密码:" + password);            return "success";        }}

/day31/src/cn/itcast/web/struts2/user/struts_user.xml(在总的文件/day31/src/struts.xml中包含)

 

/WEB-INF/register_success.jsp

/day31/WebRoot/WEB-INF/register_success.jsp

    注册成功

对于POST请求,框架默认采用UTF-8编码方式,无需设置/day31/src/struts.properties

struts.i18n.encoding=UTF-8  类似于:request.setCharacterEncoding("UTF-8")

以上配置,只针对POST请求。

struts2框架提倡按如下原则发送请求:
A)无参使用GET,框架没提交解决方案
B)有参使用POST
(6)项目中使用POST和GET请求方式的原则
【struts2以POST或GET方式传中文参数】

转载于:https://www.cnblogs.com/mao-19/p/5707231.html

你可能感兴趣的文章
switch
查看>>
HTTP错误code大全
查看>>
PAT Advanced Level 1043
查看>>
决策树基础
查看>>
献给程序员之如何与陌生人交谈
查看>>
C++重载运算符练习--对people类重载“= =”运算符和“=”运算符
查看>>
Nmap命令的实用范例
查看>>
7-1 查找整数编程总结
查看>>
安装PHP以及搭建博客(一)
查看>>
关于WORD文档的读取乱码问题
查看>>
[问题记录.dotnet]取网卡信息报错"找不到"-WMI - Not found
查看>>
Codeforces Round #254 (Div. 2):B. DZY Loves Chemistry
查看>>
linux 安装虚拟机
查看>>
Thinkphp5笔记二:创建模块
查看>>
centos 安装mysql
查看>>
Redis 禁用FLUSHALL FLUSHDB KEYS 命令
查看>>
Matlab中imread函数使用报错“不应为MATLAB 表达式”分析
查看>>
MFC ADO数据库操作
查看>>
图像质量评价-NQM和WPSNR
查看>>
面试准备——相关知识
查看>>