HttpServletRespond简介
HttpServletRespond应用
public class response extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取文件下载的路-路径
String realpath=this.getServletContext().getRealPath("/WEB-INF/classes/一.jpg");
//2.下载的文件名是啥
String fileName=realpath.substring(realpath.lastIndexOf("\\")+1);
//3.设置浏览器能够支持(Content-disposition)下载我们需要的东西,中文文件名用URLEncoder.encode进行编码设置,否则可能乱码
resp.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8"));
//4.获取下载文件的输入流FileInputStream
FileInputStream in = new FileInputStream(realpath);
//5.建立buffer缓冲区
int len=0;
byte[] buffer = new byte[1024];
//6.获取outputStream对象
ServletOutputStream out = resp.getOutputStream();
//7.将FileInputStream流写入到buffer缓冲区,使用outputStream将缓冲区的数据输出到客户端
while((len=in.read(buffer))>0){
out.write(buffer,0,len);
}
//8.关闭输入输出流
out.close();
in.close();
}
}
tip: String fileName=realpath.substring(realpath.lastIndexOf("\")+1);
意为截取最后的/后面的字符串,这样可以轻松得到文件名
public class image extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置让浏览器3秒刷新一次
resp.setHeader("refresh", "3");
//在内存中创建一个图片
BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
//得到图片
Graphics g = image.getGraphics();
//设置笔刷颜色并填充图片背景颜色
g.setColor(Color.white);
g.fillRect(0,0,80,20);
//设置笔刷颜色和字体样式,绘画图片
g.setColor(Color.blue);
g.setFont(new Font("null",Font.BOLD,20));
g.drawString(randSum(),0,20);
//告诉浏览器,这个请求以图片形式打开
resp.setContentType("image/jpg");
//网站存在缓存,设置不让网站缓存
resp.setDateHeader("Expires",-1);
resp.setHeader("Cache-Control","no-Cache");
resp.setHeader("Pragma","no-Cache");
//把图片写给浏览器
ImageIO.write(image,"jpg",resp.getOutputStream());
}
//生成随机数
private String randSum(){
Random random = new Random();
String sum=random.nextInt(9999)+"";
StringBuffer sb=new StringBuffer();
//确保生成的验证码一定为4位
for(int i=0;i<4-sum.length();i++){
sb.append("0");
}
return sb.toString()+sum;
}
}
public class redirect extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//从提交的表单中获取用户名和密码
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println(username+":"+password);
//重定向到/success.jsp
resp.sendRedirect("/servlet_respond_war/success.jsp");
}
}
效果:在表单提交后会跳转到success.jsp页面
HttpServletRequest简介和使用
简单应用:
jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>登录</h1>
<div >
<form action="${pageContext.request.contextPath}/re" method="get" >
username:<input type="text" name="username"> <br>
password:<input type="password" name="password"> <br>
爱好:
<input type="checkbox" name="hobbys" value="代码"> 代码
<input type="checkbox" name="hobbys" value="抽烟"> 抽烟
<input type="checkbox" name="hobbys" value="喝酒"> 喝酒
<input type="checkbox" name="hobbys" value="烫头"> 烫头
<br>
<input type="submit">
</form>
</div>
</body>
</html>
public class request extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
String[] hobbys = req.getParameterValues("hobbys");
System.out.println(username);
System.out.println(password);
System.out.println(Arrays.toString(hobbys));
//req.getRequestDispatcher("/success.jsp").forward(req,resp); 请求转发
resp.sendRedirect("/servlet_respond_war/success.jsp"); //相应重定位
}
}
请求和重定向的区别
请求转发的路径不需要加根路径
重定向的路径需要加根路径