zoukankan      html  css  js  c++  java
  • servlet总结

     1.Servlet的主要作用    

         (1)接收请求               

     (2)处理请求               

     (3)完成响应
                   

    2.Servlet定义         

       狭义上的Servlet:仅仅指的是这个servlet接口
               广义的Servlet:不仅包含该Servlet接口,还包含该Servlet的接口的子类!
            
             Servlet是JavaWeb部分的三大组件之一:
               JavaWeb部分三大组件:Servlet、Filter、Listener,这三个组件都需要交给web服务器管理!
               
               
              自定义一个Servlet:
                  1).自定义一个类实现Servlet接口,实现接口中的方法
                  2).将自定义的servlet类在web.xml文件中配置一下!  
                              

    3.Servlet生命周期       

      含义:Servlet生命周期:就是Servlet对象由产生到销毁的过程
              涉及到的几个方法:
                 1)构造器:servlet对象不是在tomcat服务器启动的时候创建的,而是在我们第一次
                          访问该servlet的时候调用,该构造器只会被执行一次,说明该Servlet是单例的!
                          但是是多线程的!        
                 2)init方法:在我们第一次访问该Servlet时候调用【在构造器被调用之后紧接着被调用】
                            该方法只会被调用一次
                 3)service方法:每次我们访问该Servlet的时候,这个service方法都会被调用一次!
                              所以我们写的业务逻辑代码,主要就写在这个方法中!
                 4)destroy方法:该方法会在项目被卸载的时候【服务器关闭】会被调用一次!
                          

    4.Servlet相关接口   

    ①ServletConfig
                代表:代表当前servet的配置信息,每个servlet对应唯一的一个ServletConfig对象
                     <servlet>
                        <servlet-name>BServlet</servlet-name>
                        <servlet-class>com.neuedu.servlet.BServlet</servlet-class>
                  </servlet>
                获取:该是由Tomcat服务器创建,然后通过参数的形式传递给init方法,
                       我们只需要在init方法中使用就可以!
                功能:
                  1)获取当前servlet的名称[getServletName()]
                  2)获取当前servlet的初始化参数[getInitParameter("username")]
                  3)获取Servletcontext[getServletContext()]
                
    ②ServletContext
                  ServletContext:
                   代表:ServletContext代表的是当前web应用!
                   获取 :通过ServletConfig对象获取[getServletContext()]
                   功能:
                      1)获取整个web应用的初始化参数【getServletContext()】
                      2)可以做为javaweb部分的四大域对象之一使用
                      3)可以获取当前项目的名称【getContextPath()】
                      4)可以获取文件的真实路径[getRealPath("/index.html")]    

    5.常见异常   

            Throwable
                算术异常类:ArithmeticExecption
                空指针异常类:NullPointerException
                类型强制转换异常:ClassCastException
                数组下标越界异常:ArrayIndexOutOfBoundsException
                文件未找到异常:FileNotFoundException
                操作数据库异常:SQLException

    6.GenericServlet

    GenericServlet是个抽象类,必须给出子类才能实例化。它给出了设计servlet的一些骨架,
    定义了servlet生命周期,还有一些得到名字、配置、初始化参数的方法。

    7.HttpServlet

    HttpServlet是子类,当然就具有GenericServlet的一切特性,还添加了doGet, doPost, 
    doDelete, doPut, doTrace等方法对应处理http协议里的命令的请求响应过程。

    8.HttpServletRequest

            1)代表:代表浏览器向服务器发送的请求报文
            2) 获取:由tomcat服务器创建,然后做为参数传递给我们相对应的doGet或者doPost方法!    
            3) 功能:
                 getParameter()获取请求参数
                 getContextPath():获取当前项目名
                 setAttribute/getAttribute:本身就是一个域对象!
                 request.getRequestDispatcher("1.html").forward(request,response);可以实现转发功能

    9.HttpServletResponse  

            1)代表:服务器响应给浏览器的响应报文
            2)获取:由服务器创建,然后做为参数传递给我们相对应的doGet或者doPost方法!
            3)功能:
                response.getWriter().println("<h3>helloworld!</h3>");可以返回给浏览器一个页面或者一个页面片段!
                response.sendRedirect("/servlet1/1.html"); :可以做请求的重定向

    10.转发与重定向的比较

    11.乱码原因分析以及解决方案

       Http协议进行通信的时候是基于请求和响应的,传输的内容我们称之为报文!
         Http协议会按照一定的规则将报文编码,然后在读取的时候再使用响应的解码格式进行解码!
         这个一定的规则指的就是字符集:ASCII,iso8859-1, gbk, gb2312, utf-8
        
         编码:将字符按照字符集转化为二进制格式
         解码:将二进制代码按照响应的字符集转化为字符!
        
         乱码的根本原因:就是编码和解码指定的字符集不一致造成的!
        
         解决方案:统一编码和解码的字符集,统一成utf-8字符集!
        
        请求报文:
           1).浏览器编码---------->服务器解码
              浏览器是按照给定页面的编码格式进行编码的,所以只需要设置网页的编码格式为utf-8就可以了!
              
              get请求:
                解码:使用的是tomcat默认的解码格式,默认是iso8859-1;
                我们在server.xml文件中设置:
                <Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
                
              post请求:
                解码:使用的是tomcat默认的解码格式,默认是iso8859-1;
                在服务器端我们使用的是:req.setCharacterEncoding("utf-8");来设置解码格式
                注意:req.setCharacterEncoding("utf-8")一定要设置在第一次获取请求参数之前!
          
        2).响应编码
          服务器编码------------->浏览器解码
          
          第一种解决方案:
                resp.setCharacterEncoding("utf-8");
                resp.setHeader("Content-Type", "text/html;charset=utf-8");
          第二种解决方案:
                resp.setHeader("Content-Type", "text/html;charset=utf-8");
          第三种方案:
                resp.setContentType("text/html;charset=utf-8");

    12.路径问题     

    路径:
          虚拟路径:http://localhost:8080/servlet01/BServlet
          真实路径:是指的在本地磁盘上的具体路径

    相对路径:相对路径指的是相对于当前文件所在目录的路径!(具有一定的局限性
           http://localhost:8080/servlet01/
           http://localhost:8080/servlet01/html/a.html
           html/a.html
             
     绝对路径:绝对路径是以/开头表示的
            浏览器解析,/代表http://localhost:8080/【服务器的根目录】<a>
            服务器解析时,/代表 http://localhost:8080/项目名/ [项目的根目录]

    常见的路径:
          ① url-pattern:
          ②转发的路径:
                  总结:这两个路径都是由服务器端解析,/代表项目的根目录
          
          ③重定向的路径
          ④页面中的路径
                 总结: 这两个路径都是由浏览器端解析,/代表服务器的根目录

    <base>标签
             <!-- base标签由一个href属性,这个属性可以做为我们在页面中相对路径的前缀
                也就是说:我们在当前页面中写的相对路径,它会默认以base标签中的href
                 属性值做为前缀,
                 所以base标签可以让我们以使用相对路径的方式来使用绝对路径!
                 base标签仅仅对相对路径起作用,对绝对路径不起作用!
             -->

  • 相关阅读:
    SQL 高级查询(层次化查询,递归)
    IntelliJ IDEA添加注释常用的快捷键
    java配置环境变量
    Python单例模式的4种实现方法 ++ redis pool的一种单例实现方式
    MYSQL安装配置文件my-small.ini、my-medium.ini、my-large.ini、my-huge.ini文件的作用
    flask中使用flask-sqlalchemy
    Python向Mysql写入时间类型数据
    [慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时
    Cocos2d-x 3.2 创建新应用
    In-App Purchase Programming Guide----(六) ----Working with Subscriptions
  • 原文地址:https://www.cnblogs.com/double-s/p/7840716.html
Copyright © 2011-2022 走看看