• 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值
     
    
    
    
  • 相关阅读:
    leecode 91. 解码方法
    leecode 166. 分数到小数
    剑指 Offer 31. 栈的压入、弹出序列
    leecode 386. 字典序排数
    LeetCode 311 稀疏矩阵的乘法
    leecode 89. 格雷编码
    leecode 79. 单词搜索
    leecode 207. 课程表
    QT -- 解决:Error: Could not decode "*.cpp" with "UTF-8"
    VS+QT -- 没有PRO文件的问题
  • 原文地址:https://www.cnblogs.com/frhl/p/13468938.html
Copyright © 2020-2023  润新知