JavaWeb——一文带你入门Servlet(生命周期、注解配置方法、IDEA与tomcat的相关配置)

举报
Winter_world 发表于 2021/09/28 23:04:19 2021/09/28
【摘要】 目录 1、Servlet快速入门 2、Servlet中的生命周期 3、Servlet3.0注解配置 4、IDEA与tomcat的相关配置 5、Servlet的体系结构 Servlet在JavaWeb中非常重要,在JavaWeb的核心知识体系都是围绕Servlet来转的。 1、Servlet快速入门 Servlet:Se...

目录

1、Servlet快速入门

2、Servlet中的生命周期

3、Servlet3.0注解配置

4、IDEA与tomcat的相关配置

5、Servlet的体系结构


Servlet在JavaWeb中非常重要,在JavaWeb的核心知识体系都是围绕Servlet来转的。

1、Servlet快速入门

Servlet:Server applet,是运行在服务器端的小程序,Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。需要我们自定义一个类,实现Servlet接口,覆写方法。

快速入门步骤:

  • 1)创建JavaEE项目;
  • 2)定义一个类,实现Servlet的接口;
          public class ServletDemo1 implements Servlet
  • 3)覆写接口中的抽象方法;

  
  1. //提供服务的方法
  2. @Override
  3. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
  4. System.out.println("Hello Servlet");
  5. }
  • 4)配置Servlet(web.xml中 根标签内)

  
  1. <!-- 配置Servlet -->
  2. <servlet>
  3. <servlet-name>demo1</servlet-name>
  4. <servlet-class>cn.test.web.servlet.ServletDemo1</servlet-class>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>demo1</servlet-name>
  8. <url-pattern>/demo1</url-pattern>
  9. </servlet-mapping>

【实现效果】:运行程序,在浏览器中输入:http://localhost:8080/demo1,在IDEA后台可见输出信息

补充下,如果我们的项目比较多时,为了便于管理,最好是加上虚拟目录,以项目名称命名,在IEDA:RUN-》Edit Configurations中设置:

此时浏览器访问为:

以上就是Servlet的快速入门实践,那么Servlet的执行原理是怎样的呢?

  • 1)当服务器接收到浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径;
  • 2)查找web.xml文件,是否有对应得<url-pattern>标签体内容;
  • 3)若有,则在找到对应的<servlet-class>全类名;
  • 4)tomcat会将字节码文件加载进内存,并且创建其对象;
  • 5)调用其方法。

2、Servlet中的生命周期

1)被创建:执行init方法,只执行一次

 Servlet什么时候被创建?默认情况下,第一次被访问时被创建,我们可以在web.xml文档中<servlet>标签下配置Servlet的创建时机:

  • 第一次被访问时创建,<load-on-startup>值为负数(默认为-1)
  • 在服务器启动时创建,<load-on-startup>值为0或正整数

Servlet的init方法只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的。多个用户同时访问时可能存在线程安全问题,为此解决方法是尽量不要在Servlet中定义成员变量,即使定义了成员变量,也不要对其修改值。

2)提供服务:执行service方法,执行多次

每次访问Servlet时,service方法都会被调用一次。

3)被销毁:执行destroy方法,只执行一次

服务器关闭时,Servlet被销毁,注意,是需要服务器正常关闭时,才会执行destroy方法,该方法在Servlet被销毁之前之前,一般用于释放资源。

3、Servlet3.0注解配置

上面我们都是使用web.xml进行Servlet的配置,若一个项目中有很多个Servlet,我们就要在web.xml中针对每一个进行配置,很繁琐。那么有没有更好的配置方法呢?使用Servlet3.0,其好处是支持注解配置,可以不使用web.xml了。步骤:

  • 1)创建JavaEE项目,选择Servlet的版本为3.0以上,可以不创建web.xml;
  • 2)定义一个类,实现Servlet接口;
  • 3)覆写方法;
  • 4)在类上使用@WebServlet注解,进行配置; 
        @WebServlet("/资源路径")    


  
  1. public @interface WebServlet {
  2. java.lang.String name() default "";
  3. java.lang.String[] value() default {};
  4. java.lang.String[] urlPatterns() default {};
  5. int loadOnStartup() default -1;
  6. javax.servlet.annotation.WebInitParam[] initParams() default {};
  7. boolean asyncSupported() default false;
  8. java.lang.String smallIcon() default "";
  9. java.lang.String largeIcon() default "";
  10. java.lang.String description() default "";
  11. java.lang.String displayName() default "";
  12. }

【注意】urlparttrn定义Servlet的访问路径:

  • 一个Servlet可以定义多个访问路径:@WebServlet({"/d4","/demo4"})
  • 路径定义规则:
           /xxx:
           /xxx/xxx:多层路径,目录结构,eg:@WebServlet("/user/demo4")、@WebServlet("/user/*")
           *.do:@WebServlet("*.do")

4、IDEA与tomcat的相关配置

1)IDEA会为每一个tomcat部署的项目单独建立一份配置文件;

查看控制台的log:

Using CATALINA_BASE:   "C:\Users\think\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Tomcat_8_5_31_4_servlet"

2)工作空间项目和tomcat部署的web项目

  • tomcat真正访问的是“tomcat部署的web项目”,“tomcat部署的web项目”对应着“工作空间项目”的web目录下的所有资源;
  • WEB-INF目录下的资源不能被浏览器直接访问;
  • 断电调试:使用“小虫子”debug启动。

5、Servlet的体系结构

Servlet——接口
       |
   GenericServlet——抽象类
            |
        HttpServlet——抽象类

以上就是Servlet的继承结构,在前几节中,我们都是实现Servlet接口,不得不覆写Servlet接口的所有抽象方法,实际我们需要用的方法可能只有Service(),那么如何才能简化这种写法呢?

1)GenericServlet:将Servlet接口中的其他方法做了默认空实现,只将service()方法作为抽象,所以,定义Servlet类时,可以继承GenericServlet,实现service()方法即可。


  
  1. @WebServlet("/demo2")
  2. public class ServletDemo2 extends GenericServlet {
  3. @Override
  4. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
  5. System.out.println("demo2....");
  6. }
  7. }

2)HttpServlet:对http协议的封装,可以简化操作,使用步骤如下,我们一般处理http请求时都是使用此方法:

  •     定义类继承HttpServlet;
  •     覆写doGet或doPost方法;

  
  1. @WebServlet("/demo3")
  2. public class ServletDemo3 extends HttpServlet {
  3. @Override
  4. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  5. System.out.println("doGet....");
  6. }
  7. @Override
  8. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  9. System.out.println("doPost....");
  10. }
  11. }

 

作于202006011845,已归档

———————————————————————————————————

本文为博主原创文章,转载请注明出处!

若本文对您有帮助,轻抬您发财的小手,关注/评论/点赞/收藏,就是对我最大的支持!

祝君升职加薪,鹏程万里!

文章来源: winter.blog.csdn.net,作者:Winter_world,版权归原作者所有,如需转载,请联系作者。

原文链接:winter.blog.csdn.net/article/details/106439172

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。