Java实战之04JavaWeb-02Request和Response
一、Response和Request的生态环境
二、HttpServletResponse---代表响应对象
1.设置状态码
void setStatus(int sc)
状态码:
200:一切正常 正常返回数据
302:重定向
304:拿缓存
404:找不到资源
500:服务器端报错(一般情况,代码有异常)
2.设置响应头
(1)设置响应头的API
(2)案例-重定向
重定向:
实现重定向:302+Location
servlet1:
response.setStatus(302);
response.setHeader(“Location”,”url地址”);
servlet2:
response.getWriter().write(“hello”);
重定向的特点:
1)客户端访问两次
2)客户端的地址栏的地址发生了变化
response中便捷的重定向的方法:
void sendRedirect(String location)
(3)案例-定时跳转
refresh头代表定时跳转
头对应的值的写法:秒值;url=url地址
response.setHeader("refresh","5;url=/response2");
(4)304状态码的原理
3.设置响应体
(1)写给客户端字符
PrintWriter writer = response.getWriter();
writer.write(字符);
原因:write方法在写的时候 其实是将内容写到response的缓冲区,response的缓 冲区本有默认的编码格式 iso-8859-1问题:写给客户端的中文乱码
解决:手动的设置response的缓冲区编码
void setCharacterEncoding(String Charset)
问题:设置response的编码为UTF-8之后 发现页面显示
解决:通过代码去指定页面解析时的编码原因:页面默认解析的编码是GBK
通过Content-Type头去指导浏览器使用哪种编码进行页面的解析
response.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
response.setContentType("text/html;charset=UTF-8");
注意:设置Content-Type的方法内部有两个功能
1)自行设置response的缓冲区的编码是UTF-8;
2)指导浏览器的解析页面时的编码是UTF-8;
记住:解决response发中文乱码
response.setContentType("text/html;charset=UTF-8");
(2)写给客户端字节
1)获得字节流
ServletOutputStram response.getOutputStream();
2)需求:输出验证码图片
3)需求:文件下载
两个流:
输入流:读取文件
输出流:写给客户端---写到response缓冲区
两个头:
//显示的告诉客户端文件的mime类型
response.setContentType("audio/mpeg");
//告知客户端回写的文件要以附件的形式打开(下载)
response.setHeader("Content-Disposition","attachment;filename=1.mp3");
4.Response的一些细节
1)getWriter和getOutputSteam在一个Servlet中不能同时调用
2)通过response获得的流不用手动关闭
web容器在service方法结束后会检查response获得的流是否关闭,没有关闭容器会关闭这个流。
3)response缓冲区的大小是8k 可以设置大小 只能向更大的范围设置
三、HttpServletRequest
1.获取请求行
1)获取请求方式
String method = request.getMethod(); //GET POST
2)获得请求的资源
request.getRequestURI()
request.getRequestURL()
request.getContextPath():web应用的名称
//1、请求方式
String method = request.getMethod();
System.out.println(method);//GET
//2、获得请求资源
String requestURI = request.getRequestURI();
StringBuffer requestURL = request.getRequestURL();
System.out.println(requestURI);
System.out.println(requestURL.toString());
String contextPath = request.getContextPath();
System.out.println(contextPath);
3)获取get提交的数据的字符串形式
//3、获取get提交的字符串形式的 参数
String queryStr = request.getQueryString();
System.out.println(queryStr);
4)获取客户机的参数
//4、获得客户机的ip
String remoteAddr = request.getRemoteAddr();
System.out.println(remoteAddr);
2.获取请求头
//1、获取一个指定的头
String header = request.getHeader("User-Agent");
System.out.println(header);
//2、判断客户端的浏览器的类型
if(header.contains("MSIE")){
System.out.println("这是IE");
}else if(header.contains("Firefox")){
System.out.println("这是火狐");
}else{
System.out.println("这是其他");
}
//3、获得所有的头的名称
System.out.println("-------------------------------------------");
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()){
String headerName = (String) headerNames.nextElement();
System.out.println(headerName+":"+request.getHeader(headerName));
}
3.获得请求体(获得post提交的参数)
请求体的格式:
username=zhangsan&password=123&hobby=zq&hobby=pq
1)String getParamter(name)
获得zhangsan:request.getParameter(“username”);
2)String[] getParameterValues(name)
获得爱好hobby:request.getParamterValues(“hobby”);
3)Map<String,String[]> getParameterMap()
获取上述的请求体:
username:{zhangsan}
password:{12345}
hobby:{zq,pq}
4)getParameterNames():获得所有的请求参数的名称
获取上述的请求体:
[ username,password,hobby ]
//1、获取username---????
String username = request.getParameter("username");
//get方式
//编码---字节数组
byte[] bytes = username.getBytes("iso8859-1");
//解码---utf-8
username = new String(bytes, "UTF-8"); System.out.println(username);
//2、password
String password = request.getParameter("password");
System.out.println(password);
//3、获取hobby
String[] hobby = request.getParameterValues("hobby");
System.out.println(hobby.length);
//4、获取所有的参数的map形式
Map<String,String[]> parameterMap = request.getParameterMap();
System.out.println(parameterMap);
问题:页面在提交中文时 到服务器端获取后乱码
原因:request对象默认的编码是iso-8859-1
解决方案:将request的编码设置成UTF-8(只适合post提交)
request.setCharacterEncoding(“UTF-8”);
注意:get怎样解决中文乱码
客户端的编码是(编码)UTF-8---->服务器端request编码是(解码)iso8859-1--->????????--->用iso8859-1编码---->UTF-8进行解码
4.Request是一个域对象和请求转发
转发的语法:
request.getRequestDispatcher(“要转发的地址”).forward(request,response);
request.getRequestDispatcher("/request2").forward(request, response);
request域可见范围:在一次请求链中
5.请求包含
语法:
request.getRequestDispatcher(“要包含的资源的地址”).include(request,response);
Java实战之04JavaWeb-02Request和Response的更多相关文章
- java.lang.IllegalStateException: Cannot forward after response has been committed的一个情况解决方法
java.lang.IllegalStateException: Cannot forward after response has been committed xxx.xxx.doPost(upd ...
- java.io.IOException: Server returned HTTP response code: 411 for URL
今日调用一post方式提交的http接口,此接口在测试环境ip调用时无问题,但在生产环境通过域名调用时一直报如下错误: java.io.IOException: Server returned HTT ...
- 通过设置代理,解决服务器禁止抓取,报“java.io.IOException: Server returned HTTP response code: 403 for URL”错误的方法
java.io.IOException: Server returned HTTP response code: 403 for URL: http:// 这个是什么异常呢? 当你使用java程序检索 ...
- nested exception is java.lang.IllegalStateException: Cannot forward after response has been committed
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is ...
- 「小程序JAVA实战」springboot的后台搭建(31)
转自:https://idig8.com/2018/08/29/xiaochengxujavashizhanspringbootdehoutaidajian31/ 根据下面的图,我们来建立下对应的sp ...
- 记录解决java.io.IOException: Server returned HTTP response code: 500 for URL:xxxxxxxx
踩坑经历 因为项目需要去对接别的接口,使用URLConnection POST请求https接口,发送json数组时遇到java.io.IOException: Server returned HTT ...
- Java实战:教你如何进行数据库分库分表
摘要:本文通过实际案例,说明如何按日期来对订单数据进行水平分库和分表,实现数据的分布式查询和操作. 本文分享自华为云社区<数据库分库分表Java实战经验总结 丨[绽放吧!数据库]>,作者: ...
- Java归去来第4集:java实战之Eclipse中创建Maven类型的SSM项目
一.前言 如果还不了解剧情,请返回第3集的剧情 Java归去来第3集:Eclipse中给动态模块升级 二.在Eclipse中创建Maven类型的SSM项目 2.1:SSM简介 SSM ...
- java实战之解析xml
在java中解析xml有现成的包提供方法,常用的有四类:Dom,JDom,Sax以及Dom4j.其中前者是java中自带的,后三者需要大家从开源诸如sourceforge这样的网站下载jar包,然后在 ...
随机推荐
- input输入密码变黑点密文
input输入密码加密 html代码 <form id="login-form" method="post" onsubmit="return ...
- MSSQLSERVER数据库- 配置数据库邮件配置的操作过程
还是第一次发现数据库可以发邮件.查了一下百度,试了一下,发现可以. 1.简单了解数据库邮件的概念和使用的传输协议及系统体系: 数据库邮件是从 SQL Server 数据库引擎中发送电子邮件的企业解决方 ...
- SVN遇到的几个错误问题解决办法
1.svn更新被锁 清理之后陷入死循环问题 Attempted to lock an already-locked dir svn: Working copy 'E:\Workspaces\eclip ...
- cocos2d-x 聊天输入框实现
转自:http://bbs.9ria.com/thread-216948-1-10.html 聊天输入框 (单行输入框 ,多行可自己扩展) 实现功能: 1.普通输入 2.设置输入框显示最大宽度(PT ...
- git克隆远程项目分支到本地对应分支
最近公司改用git了,研究了一下如何把远程的代码克隆到本地. 1. 配置对应信息 git config --global user.name git config --global user.emai ...
- Eclipse安装ADT失败解决办法
Eclipse的版本是3.5.2,配置Android的开发环境时遇到问题…… 按照Android官方文档一步步安装,到了安装Eclipse的ADT插件时,提示“requires 'org.eclips ...
- iOS开发——高级技术&摇一摇功能的实现
摇一摇功能的实现 在AppStore中多样化功能越来越多的被使用了,所以今天就开始介绍一些iOS开发的比较实用,但是我们接触的比较少的功能,我们先从摇一摇功能开始 在 UIResponder中存在这么 ...
- iOS开发——网络编程OC篇&GCDAsyncSocket编程
GCDAsyncSocket编程 同上一篇文章一样,这里也是使用Socket实现一个聊天室,但是这里使用的是一个常用的框架实现的:GCDAsyncSocket 一:导入这个框架 二:声明这个Socke ...
- A XSS filter for Java EE web apps--转载
原文地址:http://java.dzone.com/articles/xss-filter-java-ee-web-apps Cross Site Scripting, or XSS, is a f ...
- C++ (P160—)多继承 二义性 虚基类 “向上转型”
1 多继承中,必须给每个基类指定一种派生类型,如果缺省,相应的基类则取私有派生类型,而不是和前一个基类取相同的派生类型 2 一个类的保护成员只能被本类的成员函数或者它的派生类成员函数访问 3 由于c+ ...