HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8 Content-Length: 101 Date: We02d, 06 Jun 2018 07:08:42 GMT <html> <head> <title>$Title$</title> </head> <body> hello , response </body> </html>
设置响应头:setHeader(String name, String value)html
package cn.testRep.web.servlet; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /* 完成重定向 */ @WebServlet("/responseDemo1") public class ResponseDemo1 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException { //访问/responseDemo1,会自动跳转responseDemo2 System.out.println("-------------------demo1-----------------"); //设置状态码 response.setStatus(302); //设置响应头 response.setHeader("location","/testResp/responseDemo2"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException { this.doPost(request,response); } } ----------------------------------------------- package cn.testRep.web.servlet; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /* 完成重定向 */ @WebServlet("/responseDemo2") public class ResponseDemo2 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException { System.out.println("-------------------demo2-----------------"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException { this.doPost(request,response); } }
forward 和 redirect 区别java
简单的形式,设置编码,是在获取流以前设置web
response.setContentType("text/html;charset=utf-8");浏览器
response.setContentType("text/html;charset=utf-8"); //获取字节输出流 ServletOutputStream sos = response.getOutputStream(); //输出数据 sos.write("hello".getBytes("utf-8"));
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script> /* 分析: 点击超连接或者图片,须要换一张 1.给超连接和图片绑定单击事件 2.从新设置图片的src属性值 */ window.onload = function(){ //1.获取图片对象 var img = document.getElementById("checkCode"); //2.绑定单击事件 img.onclick = function(){ //加时间戳 var date = new Date().getTime(); //加参,欺骗服务器 img.src = "/testResp/checkCodeServlet?"+date; } } </script> </head> <body> <img id="checkCode" src="/testResp/checkCodeServlet" /> <a id="change" href="">看不清换一张?</a> </body> </html>
package cn.testRep.web.servlet; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; @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); //2.美化图片 //填充背景色 Graphics graphics = image.getGraphics();//画笔对象 graphics.setColor(new Color(200,200,169));//设置填充颜色 graphics.fillRect(0,0,width,height);//填充 //画边框 graphics.setColor(Color.darkGray);//设置边框颜色 graphics.drawRect(0,0,width-1,height-1);//画边框 //写验证码 String str = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890"; for (int i = 0; i < 4 ; i++) { //生成随机角标 Random ran = new Random(); int index = ran.nextInt(str.length()); char ch = str.charAt(index); graphics.drawString(ch+"",width/5*(i+1),ran.nextInt(height-8)+5); } //画干扰线 graphics.setColor(new Color(131,175,155)); //随机生成干扰线坐标点 graphics.drawLine(20,30,10,10); //3.输出到页面展现 ImageIO.write(image,"jpg",response.getOutputStream()); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response); } }
方法:String getRealPath(String path)
String b = context.getRealPath("/b.txt");//访问 web目录下资源
System.out.println(b);缓存
String c = context.getRealPath("/WEB-INF/c.txt");//访问WEB-INF目录下的资源
System.out.println(c);安全
String a = context.getRealPath("/WEB-INF/classes/a.txt");//访问 src目录下的资源
System.out.println(a);服务器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="/testResp/downloadServlet?filename=刺客伍六七.jpg">图片1</a> </body> </html>
package utils; import sun.misc.BASE64Encoder; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; public class DownLoadUtils { public static String getFileName(String agent, String filename) throws UnsupportedEncodingException { if (agent.contains("MSIE")) { // IE浏览器 filename = URLEncoder.encode(filename, "utf-8"); filename = filename.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐浏览器 BASE64Encoder base64Encoder = new BASE64Encoder(); filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else { // 其它浏览器 filename = URLEncoder.encode(filename, "utf-8"); } return filename; } }
package cn.testRep.web.servlet; import utils.DownLoadUtils; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.FileInputStream; import java.io.IOException; @WebServlet("/downloadServlet") public class DownloadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取请求参数,文件名称 String filename = request.getParameter("filename"); //找到文件真实路径 ServletContext servletContext = this.getServletContext(); String realPath = servletContext.getRealPath("/img/" + filename); //用字节流进行关联,加载进内存 FileInputStream fis = new FileInputStream(realPath); //解决下载文件中文乱码 String agent = request.getHeader("user-agent"); filename = DownLoadUtils.getFileName(agent,filename); //设置响应头类型,弹出对话框 String mimeType = servletContext.getMimeType(filename); response.setHeader("content-type",mimeType); //设置响应头打开方式,filename在此为下载文件名 response.setHeader("content-disposition","attachment;filename="+filename); //将输入流数据写入输出流中 ServletOutputStream outputStream = response.getOutputStream(); byte[] buffer = new byte[1024*8]; int len =0; while ((len=fis.read(buffer)) != -1){ outputStream.write(buffer,0,len); } fis.close(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response); } }