Servlet(二)

ServletContext对象 :上下文对象

  getServletContext()

可以搜索当前工程目录下面的资源文件

 getServletContext().getRealPath(path),根据相对路径获取服务器上资源的绝对路径

getServletContext().getResourceAsStream(path),根据相对路径获取服务器上资源的输入字节流

响应对象:客户端发送请求时,给客户端一个响应结果(视频 视频 图片)  高速客户端服务器已经接收到请求

     ServletResponse(子类)  HttpServletResponse(父类)

    由tomcat创建 不需要要实例化 直接使用

响应对象组成:响应行  响应头  响应体

  (1)响应行:包含一些状态码 和协议

       http协议:请求与响应的协议

           一次性连接协议  (请求和响应都完成后  断开连接  保证数据安全)

           无状态的协议:不能记录上一次请求的状态和响应

           不安全  

   https协议:http+ssl证书(加密数据的证书)  安全性:数据传输过程加密

    http发展过程:0.9只支持文字传输 

           1.0一次性协议

           1.1支持长连接 keep  alive(连接的时间)  

    socket协议:地城tcp+udap 前者 安全慢  后者快不安全

    tcp三次握手:

    状态码:  1xx:服务器接收到请求  继续执行后面的操作(断点续传)   

        2xx:响应成功

        3xx:重定向

        4xx:路径找不到(页面不存在 tomcat没有运行  网页放在web-inf下)

        5xx:服务器报错 (Java代码)

        自定义设置状态码以及状态信息:

  (2响应头:

 

  (3)设置响应头

      resp.set():键值对性时赋值 键设置过 会进行覆盖

      resp.add():键值对性时赋值 键重复 不会覆盖  只追加 执行最后一个

      resp.setHeader("refresh","2秒,2.html")//跳转

//从服务器中读取图片输出到浏览器中
public
class servlet01 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置响应头的输出格式
     resp.setHeader(
"content-type","imagin");
     //得到服务器中的图片(out文件夹下的web-inf )输入流 InputStream is
= req.getServletContext().getResourceAsStream("WEB-INF/img/download.jpg"); //获得输出流
     OutputStream out
= resp.getOutputStream(); int length = -1; byte[] bytes =new byte[1024]; while((length=is.read(bytes))!=-1 ){ out.write(bytes,0,length); } out.close(); is.close(); } }

   (4)响应体: 直接在页面中 写内容:通过响应对象获取流对象

      1.resp.getOutputStream()         用于写字节 

      2.resp.getWrite()                     用于写字符   

                   两个流不能同时使用   不报错  只出现一个

          

请求对象:用户发送请求时封装的请求信息 开发不用去操作  浏览器封装  Tomcat容器创建

    HttpServletRequest  extends    ServletRequest           

   (1)请求行:获取用户当前协议,项目路径,端口等信息

     获取请求行信息:

public class servlet04 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String scheme = req.getScheme();//获取协议
        String path = req.getServletPath();//请求路径
        String cpath = req.getContextPath();//项目名
        String method = req.getMethod();//请求的方式
        String query = req.getQueryString();//地址栏传入的参数
        String url =req.getRequestURI();//形目明+访问路径
        String sname = req.getServerName(); //ip地址
    }
}

   (2)请求头:客户端发送请求的封装的一些头部信息  不需要关注  只需要获取就行

     1.通过键获取:req.getHeader("       ");  //返回单个   键值形式

      类似迭代器Enumeration<String> e = req.getHeaderNames(); //获取所有

       while(e.hasElements()){

          String str = e.nextElement()

          sout(key+req.getHeader(str))

          }

  (3)请求体:发送请求  传入服务器的参数(键值对)

         地址键1=值1&键2=值2&键3=值3                 获取都是value值

        方法:String str = getParameter("键") ====>表单中的name值

            a标签跳转传递的参数 不能通过name值获取

            <a  href="?filename=">

          String [] str =  getParmenterValues("键")===》获取复选按钮 

文件上传jar包:

 

ServletFileuload.isMultipartContent(req):用于判断是否以文件格式进行上传

//获取核心工厂对象
FileItemFactory factory = new DiskFileItemFactory();
//获取文件上传对象
ServletFileUpload sfu
= new ServletFileUpload(factory);
//获取form表单中所有input标签的所有条目
List<FileItem> list =sfu.parseRequest(req);
Iterator<FileItem> iter = list.iterator();
while (iter.hasNext()) {
FileItem fileItem = iter.next();
//判断是文件是普通文本
if (fileItem.isFormField()) {
//获得条目的name值
 


原文地址:https://www.cnblogs.com/frhl/p/13468938.html