Servlet1-Servlet介绍

Servlet的概念

概念:狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了Servlet接口的java类,一般情况下,人们将Servlet理解为后者。(用java语言开发网页动态资源的技术)

servlet的特点

1、servlet就是一个普通的java类,继承HttpServlet类
2、一个普通的java类实现了Servlet接口,也叫Servlet程序。我们通常继承HttpServlet是为了创建一个基于http协议的servlet程序。
3、servlet程序交给tomcat服务器运行。

servlet的使用

1、创建普通的java类并继承HttpServlet
2、覆写service方法
3、在service方法中书写逻辑代码即可
4、在webRoot下的WEB-INF文件夹下的web.xml文件中配置servlet

servlet的运行流程

URL:http://localhost:8080/project/my2
组成:服务器地址:端口号/虚拟项目名(webapps目录下文件夹名称) /servlet的别名
URI:虚拟项目名/servlet的别名
浏览器发送请求到服务器,服务器根据请求URL地址中的URI信息在webapps目录下找到对应的项目文件夹,然后在web.xml中检索对应的servlet,找到后调用并执行Servlet。

Servlet的路径映射

url-pattern: 表示servlet的路径映射,也叫servlet访问名称。

          url-patttern      浏览器输入URL
精确匹配    /demo1       http://localhost:8080/day10/demo1     
      /itcast/demo1     http://localhost:8080/day10/itcast/demo1
模糊匹配    /*         http://localhost:8080/day10/任意路径
       /itcast/*        http://localhost:8080/day10/itcast/任意路径
       *.后缀        http://localhost:8080/day10/任意路径.后缀
      (*.do、*.action、*.jsf、*.html)
注意:
  1)url-pattern要么以/开头,要么以*开头    例如: itcast/demo1错误写法。 
  2)不能同时使用两种模糊匹配。例如: /itcast/*.html 错误写法
  3)当多个url-pattern同时符合匹配规则,那么
    3.1  精确匹配的url-pattern会优先被执行。(长的最像的url-pattern优先)
    3.2  后缀名结尾的模糊匹配的url-pattern优先级最低!!!

Sevlet的缺省路径

/  : 表示servlet的缺省路径。
在tomcat服务器中配置了一个DefaultServlet,叫默认Servlet,该默认Servlet的url-pattern就是/ 。默认Servlet的作用,用于解析web应用下的静态资源。
问题: 浏览器输入一个资源名称时,查找资源的顺序是如何?
  1)首先,在当前web应用下的web.xml文件中查找是否有匹配的url-pattern 
  2)如果匹配到,执行对应的servlet(动态资源)
  3)如果没有匹配到,就交给tomcat服务器的默认Servlet去处理
  4)默认Servlet会到当前web应用下读取对应名称的静态资源文件。
  5)如果读到对应的静态资源文件,那么就把内容返回给浏览器
  6)如果读不到对应的静态资源文件,那么就返回404的错误页面。
结论: 先找动态资源,再找静态资源!!!!

Servlet的四个生命周期

构造方法:在创建servlet对象时调用。只调用1次。(证明servlet对象在tomcat服务器中是单例的。)
init方法:在创建完servlet对象后调用。只调用1次。用于初始化对象。
service方法:在每次请求servlet时调用。调用n次。入口方法,逻辑代码在这里被调用。
destroy方法:servlet对象销毁时调用。只调用1次。tomcat服务器停止或web应用重新部署时调用。

Servlet的生命周期

1、从第一次调用到服务器关闭。
2、如果Servlet在web.xml中配置了load-on-startup,生命周期为:从服务器启动到服务器关闭
  <!-- 自动加载机制 -->
  <!-- 正整数:数值越大,创建对象的优先级越低 -->
  <load-on-startup>1</load-on-startup>
注意:
  init方法是对Servlet进行初始化的一个方法,会在Servlet第一次加载进行存储时执行
  destory方法是在servlet被销毁时执行,也就服务器关闭时。
 1 public class ServletLife extends HttpServlet {
 2     //初始化方法,在servlet第一次加载内容的时候被调用
 3     @Override
 4     public void init() throws ServletException {
 5         System.out.println("servlet初始化完成");
 6     }
 7     
 8     //service方法,真正处理请求的方法
 9     @Override
10     protected void service(HttpServletRequest req, HttpServletResponse resp)
11             throws ServletException, IOException {
12         resp.getWriter().write("servlet life");
13         System.out.println("servlet life");
14     }
15     @Override
16     public void destroy() {
17         System.out.println("我被销毁了...");
18     }    
19 }

web.xml配置:

<!-- 浏览器访问:http://localhost:8080/project/my2 --> 
<!-- servlet的配置 -->
<servlet>
    <!-- servlet内部名称。可以自定义 -->
    <servlet-name>ServletLife</servlet-name>
    <!-- servlet类的全名:包名+类名 -->
    <servlet-class>com.su.servlet.ServletLife</servlet-class>
    <!-- 正整数:数值越大,创建对象的优先级越低 -->
    <load-on-startup>1</load-on-startup>
</servlet>
<!-- servlet的映射配置 -->
<servlet-mapping>
    <!-- sevlet内部名称。和servlet配置的内部名称保持一致!! -->
    <servlet-name>ServletLife</servlet-name>
    <!-- servlet的路径映射。访问servlet的名称 -->
    <url-pattern>/life</url-pattern>
</servlet-mapping>

Service方法和doGet方法和doPost方法的区别

Service方法:
  可以处理get/post方式的请求,如果servlet中有Service方法,会优先调用service方法对请求进行处理。
doGet方法:
  处理get方式的请求
doPost方法:
  处理post方式的请求
注意:
  如果在覆写的service方法中调用了父类的service方法(super.service(arg0, arg1)),则service方法处理完后,会再次根据请求方式响应的doGet和doPost方法执行。所以,一般情况下我们是不在覆写的service中调用父类的service方法的,避免出现405错误。

Servlet的常见错误

404错误:资源未找到
  原因一:在请求地址中的servlet的别名书写错误。
  原因二:虚拟项目名称拼写错误
500错误:内部服务器错误
  错误一:
    java.lang.ClassNotFoundException: com.su.servlet.ServletMothod
    解决:在web.xml中校验servlet类的全限定路径是否拼写错误。
  错误二:
    因为service方法体的代码执行错误导致
    解决:根据错误提示对service方法体中的代码进行错误更改。
405错误:请求方式不支持
  原因:请求方式和servlet中的方法不匹配所造成的。
  解决:尽量使用service方法进行请求处理,并且不要再service方法中调用父类的service。
 
 
posted @ 2020-03-17 20:59  溯鸣  阅读(255)  评论(0编辑  收藏  举报