javaweb/4/2
HttpServletResponse
常见应用
- 向浏览器输出消息
- 下载文件
验证码
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//如何让浏览器3秒刷新一次
resp.setHeader("refresh","3");//js中的refresh实现刷新
//在内存中创建一个空图片
BufferedImage image = new BufferedImage(100,50,BufferedImage.TYPE_INT_RGB);
//得到图片
Graphics2D graphics = (Graphics2D)image.getGraphics();//拿到2D画笔
//设置背景颜色
graphics.setColor(Color.white);//设置笔的颜色为白色
graphics.fillRect(0,0,100,50);//根据坐标设置填充白色的位置
//在图片上写数字
graphics.setColor(Color.blue);//修改笔的颜色为蓝色
graphics.setFont(new Font(null,Font.BOLD,20));//设置字体
graphics.drawString(makeNum(),0,40);
//告诉浏览器这个请求用图片的方式打开
resp.setContentType("image/png");
//网站存在缓存,不让浏览器缓存
resp.setDateHeader("expires",-1);
//把图片写给浏览器
ImageIO.write(image,"png",resp.getOutputStream());
}
//生成随机数的方法
//StringBuffer长度和内容可变
private String makeNum(){
Random random = new Random();//生成一个随机数
String num = random.nextInt(999999) + "";//生成0~999999之间的数
StringBuffer sb = new StringBuffer();//用于拼接随机数
for (int i = 0; i < 6-num.length(); i++) {
sb.append("0");//如果上面产生的随机数不够七位,则用0填充
}
num = sb.toString()+num;
return num;
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
实现重定向
一个web资源收到客户端请求后,它会通知客户端去访问另一个web资源,这个过程叫重定向
常见场景:用户登录,成功后会转向另一个页面
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.sendRedirect("/s/img");//在上一级中添加/s,这与Tomcat的部署中的应用程序上一样
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
重定向面试题
重定向和转发的区别
- 相同点:页面都会实现跳转
- 不同点:请求转发URL不变(页面转发,URL不变),重定向URL会变
解决edge浏览器无法编码
1.打开开发者模式,拖入charset插件
2.在jsp中添加标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
登录
1.登录页面
<html>
<body>
<h2>Hello World!</h2>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<form action="${pageContext.request.contextPath}/res" method="get">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit">
</form>
</body>
</html>
2.响应内容
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//在这里处理请求,给予响应
String username = req.getParameter("username");//在请求里获取参数
String password = req.getParameter("password");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
System.out.println(username+":"+password);
resp.sendRedirect("/s/seccess.jsp");//做出的响应是重定向
}
3.重定向的页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>seccess</h1>
</body>
</html>
浙公网安备 33010602011771号