Servlet

打印 上一主题 下一主题

主题 228|帖子 228|积分 684

一、Servlet概念
        1、Servlet是运行在 Java 服务器端的程序,用于接收和响应来自客户端基于 HTTP 协议的哀求。
        2、Servlet就是一个接口,界说了Java类被浏览器访问到(tomcat辨认)的规则。SUN公司提供
        3、核心方法:service(),任何客户端的哀求都会颠末该方法
二、Servlet快速入门
        1、创建一个web项目
        2、界说一个类实现Servlet接口
  1. package com;
  2. import javax.servlet.*;
  3. import java.io.IOException;
  4. //tomcat下lib目录下的 servlet-api.jar引入项目中
  5. /**
  6. * @author 86136
  7. */
  8. public class MyWeb01 implements Servlet {
  9.    
  10.     @Override//创建
  11.     public void init(ServletConfig servletConfig) throws ServletException {
  12.     }
  13.     @Override
  14.     public ServletConfig getServletConfig() {
  15.         return null;
  16.     }
  17.     @Override
  18.     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
  19.         System.out.println("女孩");
  20.     }
  21.     @Override
  22.     public String getServletInfo() {
  23.         return null;
  24.     }
  25.     @Override
  26.     //销毁
  27.     public void destroy() {
  28.     }
  29. }
复制代码
        3、在web.xml中配置Servlet
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5.          version="4.0">
  6.     <servlet>
  7.         <!--com.MyWeb01类的别名 test01-->
  8.         <servlet-name>test01</servlet-name>
  9.         <!--com.MyWeb01 是类的全路径-->
  10.         <servlet-class>com.MyWeb01</servlet-class>
  11.     </servlet>
  12.     <servlet-mapping>
  13.         <!--MyWeb01类与请求的映射关系引用上面的别名-->
  14.         <servlet-name>test01</servlet-name>
  15.         <!--url-pattern是我们的路径请求-->
  16.         <url-pattern>/aa</url-pattern>
  17.     </servlet-mapping>
  18. </web-app>
复制代码
        4、点击运行
        5、通过浏览器测试
                在浏览器访问:http://localhost:8080/aa
三、Servlet执行原理

  • 当服务器接受到客户端浏览器的哀求后,会解析哀求URL路径,获取访问的Servlet的资源路径
  • 查找web.xml文件,是否有对应的<url-pattern>标签体内容。
  • 如果有,则在找到对应的<servlet-class>全类名
  • tomcat会将字节码文件加载进内存,而且创建其对象
  • 调用其service方法
        我们通过浏览器发送哀求,哀求首先到达Tomcat服务器,由服务器解析哀求URL,然后在摆设的应用列表中找到我们的应用。接下来,在我们的应用中找应用里的web.xml配置文件,在web.xml中找到Servlet的配置,找到后执行service方法,最后由Servlet响应客户浏览器。整个过程如下图所示:

        一句话总结执行过程:
        浏览器——>Tomcat服务器——>我们的应用——>应用中的web.xml——>Servlet类——>响应浏览器
四、Servlet体系结构
        在刚才的入门案例中,我们界说了本身的Servlet,实现的方式都是选择实现Servlet,在Servlet的API介绍中,它提出了我们除了实现Servlet还可以继承GenericServlet和继承HttpServlet,通过查阅servlet的类视图,我们看到Servlet下有一个抽象类GenericServlet,抽象类GenericServlet另有一个子类HttpServlet。同时,在service方法中另有参数ServletRequest和ServletResponse,
 

五、Servlet实现方式
   实现Servlet功能的三种方式:
     1、上面用过的:实现Servlet接口,接口中的方法必须全部实现
           使用此种方式,表现接口中的全部方法在需求方面都有重写的必要。此种方式支持最洪流平的自界说
     2、继承GenericServlet,service方法必须重写,其他方可根据需求,选择性重写
            使用此种方式,表现只在接收和响应客户端哀求这方面有重写的需求,而其他方法可根据实际需求选择性重写,使我们的开辟Servlet变得简单。但是,此种方式是和HTTP协议无关的
  1. package com;
  2. import javax.servlet.GenericServlet;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.ServletRequest;
  5. import javax.servlet.ServletResponse;
  6. import java.io.IOException;
  7. /**
  8. * @author 86136
  9. */
  10. public class MyWeb02 extends GenericServlet {
  11.     @Override
  12.     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
  13.         System.out.println("我喜欢你");
  14.     }
  15. }
复制代码
        web.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5.          version="4.0">
  6.     <servlet>
  7.         <servlet-name>test02</servlet-name>
  8.         <servlet-class>com.MyWeb02</servlet-class>
  9.     </servlet>
  10.     <servlet-mapping>
  11.         <servlet-name>test02</servlet-name>
  12.         <url-pattern>/bb</url-pattern>
  13.     </servlet-mapping>
  14. </web-app>
复制代码
      3、继承HttpServlet,它是javax.servlet.http包下的一个抽象类,是GenericServlet的子类。如果我们选择继承HttpServlet时,只必要重写doGet和doPost方法,不要覆盖service方法。
使用此种方式,表现我们的哀求和响应必要和HTTP协议干系。也就是说,我们是通过HTTP协议来访问的。那么每次哀求和响应都符合HTTP协议的规范。哀求的方式就是HTTP协议所支持的方式(目前我们只知道GET和POST)
  1. package com;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.HttpServlet;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import java.io.IOException;
  7. /**
  8. * @author 86136
  9. */
  10. public class MyWeb03 extends HttpServlet {
  11.     @Override
  12.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  13.         doPost(req,resp);
  14.     }
  15.     @Override
  16.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  17.         System.out.println("我喜欢你苏沐橙");
  18.     }
  19. }
复制代码
        web.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5.          version="4.0">
  6.     <servlet>
  7.         <servlet-name>test03</servlet-name>
  8.         <servlet-class>com.MyWeb03</servlet-class>
  9.     </servlet>
  10.     <servlet-mapping>
  11.         <servlet-name>test03</servlet-name>
  12.         <url-pattern>/cc</url-pattern>
  13.     </servlet-mapping>
  14. </web-app>
复制代码
六、 Servlet的生命周期
        1、Servlet的创建,存活及死亡
                1、创建:执行init方法,只执行一次
                2、存活:提供服务,执行service方法,执行多次
                3、烧毁:执行destroy方法,只执行一次
        2 、Servlet什么时间被创建
                1、默认环境下,第一次被访问时,Servlet被创建
                2、可以手动配置执行Servlet的创建时机, 在web.xml的在<servlet>标签下配置
                      1、  <load-on-startup>的值为负数时, 第一次被访问时创建
                      2、<load-on-startup>的值为0或正整数时, 在服务器启动时创建
                   
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5.          version="4.0">
  6.     <servlet>
  7.         <!--com.MyWeb01类的别名 test01-->
  8.         <servlet-name>test01</servlet-name>
  9.         <!--com.MyWeb01 是类的全路径-->
  10.         <servlet-class>com.MyWeb01</servlet-class>
  11.         <!--在服务器启动时创建-->
  12.         <load-on-startup>1</load-on-startup>
  13.     </servlet>
  14. </web-app>
复制代码
七、 Servlet的线程安全题目
        Servlet的init方法,只执行一次,阐明一个Servlet在内存中只存在一个对象,Servlet是单例的
        1、多个用户同时访问时,可能存在线程安全题目
        2、解决:只管不要在Servlet中界说成员变量。纵然界说了成员变量,也不要对其修改值
八、Servlet3.0解释开辟(重点)
        1、注解开辟的优势
                简单便捷,不必要再操纵繁琐的web.xml配置     
  
  1. //基于注解配置Servlet
  2. @WebServlet("/index")
  3. public class MyWeb04 extends HttpServlet {}
复制代码
        2、取代了web.xml中的配置
九、映射的干系配置
        1、Servlet的映射方式
                1、具体名称的方式。访问的资源路径必须和映射配置完全雷同。==(常用)==
   // 只有/test01哀求能匹配   http://localhost:8080/test01 
  @WebServlet("/test01")
                  2、/ 开头 + 通配符的方式。只要符合目次结构即可,不消考虑结尾是什么
   // *代表全部,任意
//只要哀求符合这个目次结构/com/, 背面无论是什么都能匹配到这个
  @WebServlet("/com/*")
// http://localhost:8080/com/haha   http://localhost:8080/com/jjj  http://localhost:8080/com
//极端一点, 匹配全部, 任何哀求都能匹配到这个
@WebServlet("/*")
  
                  3、通配符 + 固定格式结尾的方式。只要符合固定结尾格式即可,不消考虑前面的路径。
   http://localhost:8080/mm.do
@WebServlet("*.do")
           2、Servlet的多路径映射
        我们可以给一个 Servlet 配置多个访问映射,从而可以让差别的哀求路径来访问雷同的Servlet
   // @WebServlet内里可以写多个路径, 使用{}包裹,用逗号分隔
@WebServlet({"/vip","/vvip","/vvvip"}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

李优秀

高级会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表