博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
servlet学习之路
阅读量:6157 次
发布时间:2019-06-21

本文共 5192 字,大约阅读时间需要 17 分钟。

hot3.png

第一个serverlet程序

建立一个dynamic web project 在建立一个包com.h 建立工程Hello

package com.h;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class World extends HttpServlet{	@Override    public void doGet(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException    {        // 首先将访问修饰符覆写为public        // 设置内容类型         resp.setContentType("text/html");        PrintWriter out = resp.getWriter();        out.println("Hello World Sample");        out.println("

Hello World Title

" +new Date().toLocaleString() + "

");        out.flush();    }}

web.xml

    
He
    
com.h.World
    
He
    
/HelloWorld

工程右键 run

localhost:8080/Hello/HelloWorld  上面/HelloWorld对应He对应上面的He对应com.h.World 在Hello目录下在tomat的默认目录下

生命周期

  1. Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁。

  2. init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。

  3. service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。

  4. destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

url-pattern三种方式

 1、精确匹配: /directory/file1.jsp 2、目录匹配: /directory/* 3、扩展匹配: *.jsp 
      
authority
      
com.util.AuthorityFilter
  
  
      
authority
         
/pages/genbill/*
  
  
      
authority
      
/pages/cmm/*
  

          
Servlet_03
          
com.enterise.always.servlet.Servlet_03
          
              
name_01
              
value_01
          
          
              
name_02
              
value_02
          
  
  
          
Servlet_03
          
/servlet/Servlet_03
  
  
       
context_param
       
value3
  

<init-param>就是初始化的数据  通过getInitParameter获取数据

String s1 = this.getInitParameter("name_02"); 

<context-param>就是初始化的数据  通getServletContext().getInitParameter("congtext_param")获取数据

ServletContext servletContext=this.getServletContext();    //对SevletContext中参数进行操作

servletContext.getAttribute("count");    //获取

servletContext.setAttribute("count",count); //修改

servlet转发技术

//跳转至下一个servlet  RequestDispatcher dispatcher = context.getRequestDispatcher("/ResulstServlet");         dispatcher.forward(request, response);

使用forward跳转则后面的response输出则不会执行,而用include来跳转,则include的servlet执行完后,再返回到原来的servlet执行response的输出

servlet 响应Response

setStatus 设置响应行 当中 状态码

setHeader 设置响应头信息

getOutputStream 获得字节流 ---- 输出响应体内容

getWriter 获得字符流 ---- 输出响应体内容

文件拷贝 ---- 字节流 

分析文件内容 --- 字符流 (中文操作 字符流)

常用状态码 

200 请求处理成功

302 客户端重定向

304 客户端访问资源没有被修改,客户端访问本地缓存

404 访问资源不存在

500 服务器内部出错

登陆成功,5秒后自动跳转XX页面 

refresh:3;url=http://www.itcast.cn -------- 3秒后自动跳转http://www.itcast.cn 网站 

<meta content="3;url=/day06/response/demo3/result.html" http-equiv="refresh"> ---- 完成3秒自动跳转 

输出中文信息

response.setCharacterEncoding("utf-8");    这个post,对get不起作用

response.setContentType("text/html;charset=utf-8");  一般使用这个

注意:

1、getOutputStream和getWriter 不能同时使用

2、必须在getOutputStream和getWriter 之前 设置响应 编码 

3、getOutputStream和getWriter 输出内容 是 HTTP响应体 

4、getOutputStream和getWriter 存在缓冲区的 ,在service方法结束时,自动关闭流,flush缓冲区内容

案例六 文件下载

第一种:通过超链接 完成文件下载 

* 如果浏览器可以识别该文件格式,直接打开,只有链接文件浏览器不识别文件格式,才会实现下载 

zip 下载  文件zip下载相对目录
jpg图片   图片相对目录但不下载直接打开和超链接一样

第二种:通过Servlet程序实现下载 

原理:通过Servlet读取目标程序,将资源返回客户端

通过程序下载文件 设置两个头信息 Content-Type Content-Disposition 

zip 下载  文件zip下载相对目录
jpg图片   图片相对目录但不下载直接打开和超链接一样

response.setContentType(getServletContext().getMimeType(filename));  ---- 设置文件类型 

response.setHeader("Content-Disposition", "attachment;filename="+ filename); ---- 设置文件以附件形式下载(对于浏览器识别格式文件)

public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        // 获得文件名        String filename = request.getParameter("filename");        System.out.println(filename);         response.setContentType(getServletContext().getMimeType(filename));        response.setHeader("Content-Disposition", "attachment;filename="+ filename);          // 下载 读取目标文件,通过response 将目标文件内容写到客户端        // 绝对磁盘路径 读取文件        String fullFilename = getServletContext().getRealPath(                "/工程目录/" + filename);        InputStream in = new FileInputStream(fullFilename);        OutputStream out = response.getOutputStream();        int b;        while ((b = in.read()) != - 1) {            out.write(b);        }        in.close();        out.close();}

转载于:https://my.oschina.net/u/274829/blog/490965

你可能感兴趣的文章
HDU 5524:Subtrees
查看>>
手机端userAgent
查看>>
pip安装Mysql-python报错EnvironmentError: mysql_config not found
查看>>
http协议组成(请求状态码)
查看>>
怎样成为一个高手观后感
查看>>
[转]VC预处理指令与宏定义的妙用
查看>>
MySql操作
查看>>
python 解析 XML文件
查看>>
MySQL 文件导入出错
查看>>
java相关
查看>>
由一个异常开始思考springmvc参数解析
查看>>
向上扩展型SSD 将可满足向外扩展需求
查看>>
虚机不能启动的特例思考
查看>>
SQL Server编程系列(1):SMO介绍
查看>>
在VMware网络测试“专用VLAN”功能
查看>>
使用Formik轻松开发更高质量的React表单(三)<Formik />解析
查看>>
也问腾讯:你把用户放在什么位置?
查看>>
CSS Sprites 样式生成工具(bg2css)
查看>>
[转]如何重构代码--重构计划
查看>>
类中如何对list泛型做访问器??
查看>>