这篇文章主要讲解了“javaweb的Response对象怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaWEB的Response对象怎么使用”
这篇文章主要讲解了“javaweb的Response对象怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaWEB的Response对象怎么使用”吧!
与request相对,response对象是设置响应消息。在浏览器按下F12键--点击网络--ctrl+R: 可以查看用户在浏览器端每次操作时浏览器向服务器发送的响应消息。
response作为Tomcat服务器已实现的对象,最直接的用法就是在servlet类中调用response对象的方法,response对象的功能是设置响应消息,所以方法的总体逻辑就是设置响应消息,这类方法的关键在于对响应消息的理解。
reponse对象设置响应消息的方法:
-setStatus(int sc):设置状态码
-setHeader(String name, String value) :设置响应头
设置响应体的方法:
-PrintWriter getWriter():获取字符输出流对象
-ServletOutputStream getOutputStream():获取字节输出流对象
重定向方法:
-sendRedirect(String Path): 资源跳转
redirect(重定向)和forward(转发)同为资源跳转方法,但有所区别:
* 重定向的特点: redirect
1. 跳转后地址栏发生变化:
2. 重定向可以访问项目外其他站点(服务器)的资源
3. 重定向是两次请求。前后Servlet下的request对象不能共享数据
* 转发的特点:forward
1. 转发地址栏路径不变 :
2. 转发只能访问当前服务器下的资源
3. 转发是一次请求,可以使用request对象来共享数据
跳转资源需要确定跳转后资源的路径,分为相对路径和绝对路径。
通过相对路径不可以确定唯一资源,使用相对路径需要找到当前资源和目标资源之间的相对位置关系,比如:./ 表示当前目录,../ 表示后退一级目录;
通过绝对路径可以确定唯一资源,绝对路径以/开头的路径,比如:/day15/responseDemo2即Http://localhost/day15/responseDemo2。 如果资源跳转的请求是由客户端浏览器发出比如:***,则项目的绝对路径需要加虚拟目录;如果是由服务器端发出比如:sendRedirect(),则可加可不加。
@WebServlet("/responseTest1")public class ResponseDemo1 extends httpservlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.
String contextPath = request.getContextPath();
//2.
request.serAttribute("msg","hello Test2, I come from Test1.");
//3.
response.sendRedirect(contextPath+"/responseTest2"); //response.sendRedirect("http://www.baidu.com"); //sendRedirect方法可跳转到项目外的资源
//response.sendRedirect("location","/responseTest2");//以静态虚拟目录作为参数
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response);
}
}
@WebServlet("/responsTset2")public class ResponseTest1 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.再获取输出流之前设置编码,并告诉浏览器使用的编码,避免编码解码码表不一致出现乱码问题
response.setContentType("text/html;charset=utf-8"); //response.setHeader("content-type","text/html;charset=utf-8");通过消息头"content-type"设置字符流编码并告诉浏览器
// response.setCharacterEncoding("utf-8"); 仅仅设置字符流编码格式,不能保证与浏览器默认解码格式统一
//2.获取字符输出流,默认情况下获取字符流的编码是tomcat实现的ISO-8859-1,所以需要提前设置
PrintWriter pw = response.getWriter();
//3.输出数据
String msg ="hello Test2, I don't come from Test1."
//String msg = (String)request.getAttribute("msg");错于重定向是两次请求,不能通过request共享数据
//
pw.write(msg); //pw.write("<h1>msg</h1>");
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response);
}
}
@WebServlet("/responseTest3")public class ResponseTest3 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.
response.setContentType("text/html;charset=utf-8");
//2.
ServletOutputStream sos = response.getOutputStream(); //3.
sos.write("你好".getBytes("utf-8"));
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response);
}
}
基于response的验证码的案例代码:
@WebServlet("/checkCodeServlet")public class CheckCodeServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int width = 100; int height = 50;
//1.在内存中创建一个指定宽高,背景色为黑色的图片对象
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);创建一个带透明色的对象,最后一个参数调节灰度
//2.用代码画图的步骤逻辑和“画图工具”鼠标点击画图一样
//2.1 代码“获取画笔--设置画笔颜色--填充图片背景色”相当于鼠标“点击画笔--选择画笔颜色--点击图片填充颜色”
Graphics g = image.getGraphics();//获得画笔
g.setColor(Color.PINK);//设置画笔颜色
g.fillRect(0,0,width,height); //填充图片颜色
//2.2代码“设置边框颜色--设置边框起始位置和长宽幅度”相当于鼠标“点击选择边框起始位置--拖动鼠标确定最终边框大小”
g.setColor(Color.BLUE); //设置边框颜色
g.drawRect(0,0,width - 1,height - 1); //设置边框起始坐标和长宽像素,注意边框占一个像素
//2.3
String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";
Random ran = new Random();
for (int i = 1; i <= 4; i++) { int index = ran.nextInt(str.length());//生成随机角标
char ch = str.charAt(index);//获取随机角标对应的字符
g.drawString(ch+"",width/5*i,height/2);//在图片上写验证码
}
//2.4
g.setColor(Color.GREEN); //
//随机生成干扰线的始末点坐标,并连接成干扰线
for (int i = 0; i < 10; i++) { int x1 = ran.nextInt(width); int x2 = ran.nextInt(width); int y1 = ran.nextInt(height); int y2 = ran.nextInt(height);
g.drawLine(x1,y1,x2,y2);
}
//3.将图片响应给客户端
ImageIO.write(image,"jpg",response.getOutputStream());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response);
}
}
感谢各位的阅读,以上就是“Javaweb的Response对象怎么使用”的内容了,经过本文的学习后,相信大家对Javaweb的Response对象怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!
--结束END--
本文标题: Javaweb的Response对象怎么使用
本文链接: https://lsjlt.com/news/98858.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2022-06-04
2022-06-04
2022-06-04
2022-06-04
2022-06-04
2022-06-04
2022-06-04
2022-06-04
2022-06-04
2022-06-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0