热门关键字:
jquery > jquery教程 > java > servlet和response

servlet和response

778
作者:管理员
发布时间:2020/4/30 16:15:29
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=1518

servlet基础知识

Servlet在内存中是单例----单实例对象一个Servlet类 在内存中最多有一个对象 

 一个项目有多少功能,将来就有多少Servlet。

 servlet是自启动的,就是可以在服务器启动时,创建Servlet对象

servlet的生命周期

Servlet对象的生命周期是由服务器管理的。在第一次访问时,服务器创建Servlet对象并调用init方法一次。每一个访问,服务器会开启一个新的线程
调用service()方法,根据请求方式调用doGet()和doPost()方法。在服务器关闭时(正常关闭)销毁servlet对象,在销毁之前调用destroy方法一次

servlet的相关配置

url-pattern配置

    完全路径匹配 例如: /demo1 , /aaa/demo2 , /aaa/bbb/demo3
    目录匹配    例如: /*  (所有) ,/aaa/* (aaa目录下的所有)
    扩展名匹配  例如: *.do , *.action 、*.jsp 、*.jpg
    缺省路径/缺省匹配    /
    优先级顺序:完全匹配 > 目录匹配 > 扩展名匹配 > 缺省匹配

ServletConfig配置
    

ServletContext对象

ServletContext context = this.getServletConfig();//获ServletContext对象,域对象 context.setAttribute(String name,Object object);
context.getAttribute(String name)
只要是在同一个项目中,任意Servlet获取到的都是同一个ServletContext对象。 

 整个项目的初始化参数(全局初始化参数), 通过ServletContext对象获得

 

response对象操作响应行

    setStatus(int status);设置状态码
    sendError(int sc,String errorMsg);发送表示错误信息状态码

 

response对象操作响应头

void addHeader(String name, String value)    这两个方法都是用来设置HTTP协议的响应头字段,其中,参数name用于指定响应头字段的名称,参数value用于指定响应头字段的值。不同的是,addHeader()方法可以增加同名的响应头字段,而setHeader()方法则会覆盖同名的头字段 void setHeader(String name, String value) void setCharacterEncoding(String charset)    该方法用于设置输出内容使用的字符编码,对HTTP 协议来说,就是设置Content-Type头字段中的字符集编码部分。 void setContentType(String type)    该方法用于设置Servlet输出内容的MIME类型,对于HTTP协议来说,就是设置Content-Type响应头字段的值。例如,如果发送到客户端的内容是jpeg格式的图像数据,就需要将响应头字段的类型设置为“image/jpeg”。需要注意的是,如果响应的内容为文本,setContentType()方法的还可以设置字符编码,如:text/html;charset=UTF-8void addIntHeader(String name,int value)    这两个方法专门用于设置包含整数值的响应头。避免了使用addHeader()与setHeader()方法时,需要将int类型的设置值转换为String类型的麻烦 void setIntHeader(String name,int value) void setContentLength(int len)    该方法用于设置响应消息的实体内容的大小,单位为字节。对于HTTP协议来说,这个方法就是设置Content-Length响应头字段的值无需手动设置,由服务器自行设置

 

response对象操作响应体

getOutputStream()   向响应体输出二进制字节流信息。【文件下载】
getWriter()   向响应体输出字符流信息。【字符串及前端代码输出】 

 乱码解决

  setContentType("text/html;charset=UTF-8");

 一个响应体不可以同时被两种流操作 

 

资源重定向和请求转发

response.sendRedirect("客户端绝对路径");
response.setHeader("refresh","X秒;url=客户端绝对路径")

 

案例: servlet文件下载

 

 1 @WebServlet(name = "DownloadServlet",urlPatterns = "/DownloadServlet")  2 public class DownloadServlet extends HttpServlet {  3  4 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  5 this.doPost(request, response);  6  }  7  8 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  9 10 String filename =request.getParameter("filename"); 12 String folderPath = this.getServletContext().getRealPath("/download"); 14 InputStream is = new FileInputStream(folderPath+"/"+filename); 16 filename = new String(filename.getBytes("UTF-8"),"iso-8859-1"); 18 response.addHeader("Content-Disposition","attachment;filename="+filename); 20 OutputStream os = response.getOutputStream(); 22 int len=0; 23 byte[] b = new byte[1024]; 25 while((len=is.read(b))!=-1){ 26 os.write(b,0, len); 27  } 29  is.close(); 30  os.close(); 31  } 32 33 }

 

案例: servlet生成验证码

 1 @WebServlet(name = "CheckCodeServlet",urlPatterns = "/CheckCodeServlet")  2 public class CheckCodeServlet extends HttpServlet {  3  4 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  5 this.doPost(request, response);  6  }  7  8 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  9 // 1 生成图片的高度和宽度  10 int height = 30; 11 int width = 60; 12 //从这个字符串中选几个字符组成图片的内容 13 String data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"; 14 Random random = new Random(); 15 //2 创建一个图片 16 BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); 17 18 //3 获得画板 19 Graphics g = image.getGraphics(); 20 21 22 //4 填充一个矩形 23 // * 设置颜色 24  g.setColor(Color.BLACK); 25 g.fillRect(0, 0, width, height); 26 27  g.setColor(Color.WHITE); 28 g.fillRect(1, 1, width-2, height-2); 29 // * 设置字体 30 g.setFont(new Font("宋体", Font.BOLD|Font.ITALIC, 25)); 31 32 for(int i = 0 ; i < 4 ; i ++){ 33 34 // 设置颜色--随机数 35 g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255))); 36 37 // 获得随机字 38 int index = random.nextInt(data.length()); 39 String str = data.substring(index, index + 1); 40 // 写入 41 g.drawString(str, width/6 * (i + 1), 20); 42  } 43 44 //6 干扰线 45 for(int i = 0 ; i < 3 ; i ++){ 46 // 设置颜色--随机数 47 g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255))); 48 // 随机绘制线 49  g.drawLine(random.nextInt(width), random.nextInt(height), random.nextInt(width),random.nextInt(height)); 50 // 随机点 51 g.drawOval(random.nextInt(width), random.nextInt(height), 2, 2); 52  } 53 54 //end 将图片响应给浏览器 55 ImageIO.write(image, "jpg", response.getOutputStream()); 56  } 57 58 }




如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:servlet
友荐云推荐