JavaWebServlet请求和响应
JavaWebServlet请求和响应
1JavaWeb请求和响应
Servet最主要的作用就是处理客户端请求,并向客户端做出响应。
浏览器发送HTTP请求信息,Web服务器接收请求信息。Web服务器创建HttpServletRequest对象封装请求信息。Web服务器创建HttpServletResponse对象封装响应信息。Web服务器调用Serlet,通过service()方法从HttpServletRequest对象读取请求信息,将响应数据封装到HttpServletResponse对象。Web服务读取响应信息,发送HTTP响应信息给浏览器。浏览器解析给用户呈现出结果。
在Servlet API中,定义了一个HttpServletResponse接口,专门用于封装HTTP响应信息。HTTP响应信息分为状态行,响应信息头,消息体三部分。因此HttpServletResponse定义了向客户端发送响应状态码,响应信息头,响应消息体的方法。
1.1.1发送状态码的方法
html状态行的内容为:
格式:HTTP版本号 状态号 原因描述
举例:HTTP/1.1 200 OK
状态号解释
setStatus(int status)方法
用该方法设置HTTP响应信息的状态码,并生成响应状态行。HTTP版本由服务器决定,状态原因描述和状态号有关因此,我们单独设置状态码就可以定义响应状态行。其中状态码默认为200。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
/*
* 通过对不同状态码的设置,观察页面的不同显示状态。
*/
response.setStatus(400);
//response.setStatus(404);
//response.setStatus(200);
//response.setStatus(100);
response.getWriter().append("Served at: ").append(request.getContextPath());
}
sendError(in sc)方法
这个方法用于发送错误信息的状态码,response对象中提供了两个重载sendError(int sc)的方法,
public void sendError(int code) throw java.io.IOException
public void sendError(int code,String message) throw java.io.IOException
方法1:用于发送错误信息的状态码
方法2:用于发送错误信息的状态码和错误信息提示
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
/*
* 学习测试sendError发送状态码和提示错误原因信息的方法
*/
response.sendError(404);
//response.sendError(404,"你查找的资源不存在!!!");
//response.sendError(400,"请求错误!!!");
//response.sendError(200,"okokok!!!");
//response.getWriter().append("Served at: ").append(request.getContextPath());
}
1.1.2发送响应消息头相关的方法
http响应消息头
HTTP响应消息中第一行为响应状态行,然后是若干响应消息头。服务器根据不同情况可以发送不同的响应消息头。
html请求头响应头参考地址
html响应头信息
常见的响应头信息
发送响应头的相关方法
参考链接
很多细节需要我们去学习,例如什么响应头需要add,什么响应头需要set。local如何使用?
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.addHeader("test", "yes");
response.getWriter().append("Served at: ").append(request.getContextPath());
}
成功加入了一个响应信息头,test:yes
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.addHeader("Content-Type","text/html;charset=utf-8");
//response.setContentType("text/html;charaset=utf-8");
//另一种写法。
response.getWriter().append("我是大坏蛋").append(request.getContextPath());
}
Content-Type表示后面的文档属于什么MIME类型,声明是html文档,并且编码是utf-8这样浏览器解释的时候不会出现乱码。
addIntHeader(string name,int value);
//明显是与addHeader方法相似,不过这个响应信息是整形的。
1.1.3发送响应消息体相关的方法
getOutputStream()方法
该方法所获取的字节输出流对象为ServletOutputStream类型。由于ServletOutputStream是OutputStream的子类,他可以直接输出字节数组中的二进制数据。因此,要输出二进制格式的响应正文,就要使用getOutputStream()方法。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.addHeader("Content-Type", "text/html;charaset=utf-8");
OutputStream out = response.getOutputStream();
String data = "我很帅气;";
out.write(data.getBytes());
//response.getWriter().append("Served at: ").append(request.getContextPath());
//注意getWriter和getOutputStream方法都可以使用,但是不能同时使用否则就出现,java.lang.IllegalStateException异常
}
getWriter()方法
这个方法获得的字符输出流对象为PrintWriter类型。由于PrintWriter类型的对象可以直接输出字符文本内容。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.write("
getWriter学习测试 ");out.write("
我有七个老婆
");}
向html文档中写入,html标记。
解决中文乱码问题
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String data = "中国";
response.getWriter().write(data);
}
输出结果是??。response对象的字符输出流在编码时,采用的是ISO-8859-1的字符码表,该码表不支持中文,将中国编码为63,63。浏览器接收默认使用GB2312解码为?。因此我们需要修改response的编码方式和浏览器的解码方式。达成一致,首先浏览器可以修改默认解码方法。但是这样对用户不友好。所以有以下两种方式修改中文编码。
第一种方法:
//设置HttpServletResponse使用utf-8编码
response.setCharacterEncoding("utf-8");
//通知浏览器使用utf-8解码
response.setHeader("Content-Type","text/html;charset=utf-8");
第二种方法:
//包含第一种方式的两种功能。
response.setContentType("text/html;charset=utf-8");
显然第二种方式简洁不少。
实现网页定时刷新并跳转
Refresh头字段,通知浏览器在指定的视角内自动刷新并跳转到其他页面。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setHeader("Refresh", "2;URL=http://www.baidu.com");
response.getWriter().write("welcome to my html");
}
2秒后自动跳转到百度
实现请求重定向
为了解决客户端的请求一个Servlet类无法完成全部工作。这时可以使用重定向来完成。具体是Web服务器接收到客户端请求后,无法访问当前请求URL所指向的web资源,指定一个新的资源路径让客户端重新发送。
使用方法
public void sendRedirect(java.lang.String location) throws java.io.IOException
location可以使用相对URL,服务器自动将相对URL翻译为绝对URL。
实现一个账户密码登录
登录页面
登录页面用户名:
密码:
跳转页面,密码正确跳转到百度,否则跳转会登录页面。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String username = request.getParameter("username");
String password = request.getParameter("password");
if(username.equals("123456")&&password.equals("123456")){
response.sendRedirect("http://www.baidu.com");
}
else response.sendRedirect("/ServletTest/login.html");
}
JavaWebServlet请求和响应相关教程
LeetCode 1413逐步求和得到整数的最小值(java)
LeetCode 1413逐步求和得到整数的最小值(java) class Solution { public int minStartValue(int[] nums) { int sum = 0, start = 0; for(int num : nums) { sum += num; start = Math.max(start, 1 - sum); } return Math.max(start, 1); }}
Vue学习(二十六)——Vue动态处理响应式数据
Vue学习(二十六)——Vue动态处理响应式数据 目录 上一节我们学习了如何处理数组的一些方法。那么,我们想要修改了数组中的内容,页面会动态响应吗?我们看下: !DOCTYPE htmlhtml lang=enhead meta charset=UTF-8 titleDocument/title/headbodydiv id=app i
前端基础(14)移动端布局(媒体查询及响应式 + rem)
前端基础(14):移动端布局(媒体查询及响应式 + rem) 学习目标 1、Responsive Web Design 响应式设计布局概念 2、媒体查询的概念及应用 3、meta标签的设置 4、dpi、ppi介绍 5、dpr (设备像素比) 一、Responsive Web Design 响应式设计布局概念响应式设
HTTP协议(二)
HTTP协议(二) 1.客户端与服务器通过请求和响应的交换达成通信 HTTP 协议规定,请求从客户端发出,最后服务器端响应该请求并返回。贴一个具体的实例: 客户端向服务器发送的请求报文由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成。 而
#SpringMVC中的响应之返回值是void :转发、重定向、输出流@FDDL
#SpringMVC中的响应之返回值是void :转发、重定向、输出流@FDDLC 本篇博客研究【当控制器方法返回值为void时,如何进行转发】 依赖: spring-webmvc(及其相关依赖)、servlet-api(以便使用HttpServletRequest和HttpServletResponse) 当控制器方法返回值为void
iOS 动画过程中view响应点击事件
iOS 动画过程中view响应点击事件 对Core Animation来说,不管是显式动画还是隐式动画,对其设置frame都是立即设置的,比如说给一个UIView做移动动画,虽然看起来frame在持续改变,但其实它的frame已经是最终值了,这种情况下,哪怕这个UIView是UIButton的实例
15.二进制求和(简单)
15.二进制求和(简单) 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 示例 1: 输入: a = 11, b = 1输出: 100 示例 2: 输入: a = 1010, b = 1011输出: 10101 提示: 每个字符串仅由字符 '0' 或 '1' 组成。1
Windwos7 Windows Server2008 添加设备时正在搜索设备无响应的解
Windwos7、 Windows Server2008 添加设备时,正在搜索设备无响应的解决办法 问题的发现:前几天做实验,准备在Windows 7的网络设备添加一块Microsoft Loopback Adapter虚拟网卡,进入【添加设备】的时候,发现一直停留在【正在搜索设备... 请确保可以检测您