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标签仅仅对相对路径起作用,对绝对路径不起作用!
         -->

 

posted on 2017-11-15 20:07  ALWAYS☆REMIND  阅读(192)  评论(0编辑  收藏  举报

导航