servlet中Request与response使用
服务器根据请求自动创建传入HttpServletRequest对象和HttpServletResponse对象
|
@Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ……处理代码 } |
HttpServletRequest(请求)
处理请求行(http:\localhost:8080\pro\haha?name=zs&age=18)
getRequestURL() 获取?前的路径 (http:\localhost:8080\pro\haha)
getRequestURI() 获取站点名到?前的路径 (pro\haha)
getQueryString() 获取请求参数(name=zs&age=18)
getMethod() 获取请求类型(get post)
其他:getProtocol获取http版本号,getContexPath获取webapp名(项目名)
处理请求头
getHeader(String) 获取单个请求头内容 string为key值不区分大小写
getHeaderName() 获取请求头名的枚举集合通过Enumeration<String>接收
获取请求参数
getParameter(“key”) 获取客户端上传的参数
getParameterValues(“key”) 若一个key对应多个值(多选框等)返回数组对象
getParameterNames() 获取所有请求参数的名称, 枚举类集合接收
getParametermap() 获取所有请求参数,Map<String,String[]>接收
设置请求的参数(用于对象传递中使用)
setAttribute(“key”,value) 设置域对象内容
getAttribute(“key”) 获取域对象内容
removeAttribute(“key”) 删除域对象内容
解决请求参数乱码问题
request接收的参数,在解析过程中使用了默认的编码方式为 (ISO-8859-1)不支持中文
post请求在Tomcat中都存在报错,get在Tomcat7中存在报错
解决方式
post解决方式
request.setCharacterEncoding("UTF-8") 直接设置解析编码 对get无效
get解决
new String(request.getParameter(key).getBytes("ISO-8859-1"),"UTF-8")
只能一次处理一个参数值的编码错误
若参数本身无编码错误,反而会造成编码错误
请求转发
用于服务内部的资源跳转,浏览器的地址不会变更
request.getRequestDispatcher(“目标资源”).forward(request,response)
指定转发路径,并传递请求对象和响应对象.实现对象共享.
目标资源使用外部访问名
request 作用域只在一次请求中有效中有效,包含请求转发
HttpServletResponse(响应)
处理响应头
addHeader(“key”, “value”) 增加响应头参数
setHeader(“key”, “value”) 设置响应头参数
设置自动刷新或重定向(不设url可自刷新)
setHeader("refresh", "3;http://www.baidu.com") 3秒后刷新至百度
sendError(500, “错误描述”) 设置页面报错(响应头)
输出响应数据
setContentType(“参数;参数”) 设置响应数据类型和编码格式
参数在Tomcat 的 web.xml 文件中<mime-mapping>查找获取
text/html类型为html类型
image/jpeg响应jpg图片
getOutputStream() 获取输出的字节流
getWriter() 获取输出的字符流
注: 两个流不能同时使用 否者报错(java.lang.IllegalStateException)
流需要关闭.close()
常用文本输出getWriter().write("输出文本")
sendRedirect(“url”) 重定向
服务器指导客户端的行为,客户端根据重定向立即重新请求对应的数据
http://www.baidu.com或者 端口之后的绝对路径/相对
乱码处理
服务器响应的数据编码与客户端解析编码方式存在差异
setContentType("text/html;charset=UTF-8")
设置响应头中数据类型和编码类型
响应图片
获取当前项目路径,获取图片的绝对路径
拼接得到图片完整路径,生成file, io传输
String realPath = getServletContext().getRealPath("/")
获取项目在服务器中的真实路径
String filePath = realPath + "/WEB-INF/images/jay.jpg"
获取图片路径,并完成拼接
File file = new File(filePath)
获取文件
请求转发和重定向区别
请求转发
request.getRequestDispatcher(“url”).forward(request,response)
返回请求地址栏不发生改变,只执行一次请求
服务端内部跳转, request作用域共享,
转发对象为当前项目资源()
地址站点名后的不完全路径,从项目名之后开始
重定向
1、地址栏发生改变 2、客户端跳转 3、存在两次请求request作用域不共享
4、指定任意地址,可跨域 若是本服务内容 地址从端口号之后开始
路径问题
相对路径 相对于当前资源的路径开头不设/
绝对路径(完整路径)
1完整绝对路径
以 http://开头的,能够跨域
2部分绝对路径
以"/"开头,从当前域名|IP|主机后的端口号开始的
"/"的含义:
请求转发:
代表的是 http://localhost:8080/站点名/
重定向(客户端跳转):
代表的是 http://localhost:8080/
servlet中Request与response使用的更多相关文章
- servlet中request和response
一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...
- JSP Servlet中Request与Response所有成员方法的研究
HttpServletRequest与HttpServletResponse作为Servlet中doGet.doPost等方法中传递的参数,承接了Http请求与响应中的大部分功能,请求的解析与响应的返 ...
- python的scrapy框架的使用 和xpath的使用 && scrapy中request和response的函数参数 && parse()函数运行机制
这篇博客主要是讲一下scrapy框架的使用,对于糗事百科爬取数据并未去专门处理 最后爬取的数据保存为json格式 一.先说一下pyharm怎么去看一些函数在源码中的代码实现 按着ctrl然后点击函数就 ...
- javaWeb核心技术第七篇之HTTP、Tomcat、Servlet、Request和Response
- Web服务器 - 概念: - web资源: "英文直译"网"的意思 资源:一切数据文件 web资源:通过网络可以访问到的资源,通常指的是一切放在服务器上的文件&quo ...
- Servlet之Request和Response 解析
原理 tomcat服务器会根据请求url中的资源路径,创建对应的Servlet的对象 tomcat服务器.会创建request和response对象,request对象中封装请求消息数据. tomca ...
- Servlet中request对象得到路径问题
1.项目源码:假设现在有一个名为JavaWeb的项目,其中有一个名为TestServlet的serlvet,其doGet方法为: protected void doGet(HttpServletReq ...
- servlet之request和response的使用区分
有的时候在写servlet程序时,我总是被一个方法该用request去调用.还是用response去调用而困惑.从而造成编程时间的延长. 我在区分request和response的使用时,使用的方法是 ...
- Web jsp开发学习——终极解决jsp中request和response中文乱码的问题(加个过滤器)
中文乱码真的很烦人的.而且每次都要写,可麻烦了,而且有时候写了还不一定管用,所以我们可以试试过滤器 1.每个jsp头上当然要写上utf8啦 <%@ page language="jav ...
- javaWeb中 servlet 、request 、response
1.Servlet (1)Servlet是JavaEE的一个动态web资源开发技 术,就是在服务器上运行的小程序,这个小程序是由服务器调用的,服务器为了能调用这个小程序,就要求这样的程序必须实现一个S ...
随机推荐
- Docker最全教程——从理论到实战(十八)
前言 VS Code是一个年轻的编辑器,但是确实是非常犀利.通过本篇,老司机带你使用VS Code玩转Docker——相信阅读本篇之后,无论是初学者还是老手,都可以非常方便的玩转Docker了!所谓是 ...
- C语言 sizeof()用法介绍
本文 转自https://www.cnblogs.com/huolong-blog/p/7587711.html 1. 定义 sizeof是一个操作符(operator). 其作用是返回 ...
- CSS-定义样式表
1.HTML标记定义 p{属性:属性值;属性1:属性1} <p>...</p> 注:p可以叫做选择器,定义那个标记中的内容执行其中的样式.一个选择器可以控制若干个样式属性,他们 ...
- 2020牛客寒假算法基础集训营1 I-nico和niconiconi
#include <bits/stdc++.h> #define dbg(x) cout << #x << "=" << x < ...
- IDEA模板注释及相关快捷键设置
IDEA模板注释及相关快捷键设置 最近使用IDEA时发现自带的模板注释不怎么好用,因此自己根据网上的教程总结了适合自己的模板设置,可以一键生成类和方法的注释,废话不多说一起看看吧: 第9步的类模板注释 ...
- mysql cmd 常用命令
环境变量配置配置好以后,打开cmd 连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样) 断开:exit (回车) 创建授权:grant selec ...
- 简写函数字面量(function literal)
如果函数的参数在函数体内只出现一次,则可以使用下划线代替: val f1 = (_: Int) + (_: Int) //等价于 val f2 = (x: Int, y: Int) => x + ...
- python | 网络编程(socket、udp、tcp)
一.套接字 socket 1.1 作用:实现不同主机间的进程间通信(不同电脑.手机等设备之间收发数据) 1.2 分类:udp.tcp 1.3 创建 socket import socket socke ...
- 使用yaml格式进行接口测试报错
前言:本人公司使用yaml做接口测试.某日开发写了一个字典嵌套列表,列表里面再嵌套字典的接口. yaml的值应该为下图(注意缩进问题) 加了-代表下面是一个列表 {'uid': '3a61479f ...
- 2019牛客多校第五场 G subsequence 1 dp+组合数学
subsequence 1 题意 给出两个数字串s,t,求s的子序列中在数值上大于t串的数量 分析 数字大于另一个数字,要么位数多,要么位数相同,字典序大,位数多可以很方便地用组合数学来解决,所以只剩 ...