Servlet(Server Applet)—— 运行在服务器端的小程序

什么是Servlet

Servlet(Server Applet)是 Java Servlet 的简称,用 Java 编写的运行在 web 服务器端的小程序。其主要功能在于交互式地浏览和生成数据,生成动态Web内容。

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般理解为后者。Servlet 运行于支持 Java 的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

`Servlet 是sun公司开发动态项目的一门技术,并在API中提供了一个接口:Servlet接口。所以对于一个 Servlet 应用程序,需要做到这两步:

1、编写一个类,实现 Servlet 接口;
2、把开发好的类部署到 web 服务器中。当浏览器访问该资源时,由 web 服务器(也称web容器或servlet容器)加载该类、创建该类对象、调用并执行对象方法

Servlet的框架是由两个Java包组成:javax.servlet 和 javax.servlet.http。Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口。


Servlet接口

Servlet 就是一个 Java 接口。(Java EE javax.servlet.Servlet)

已继承的子接口:JspPage接口直接继承Servlet接口;HttpJspPage接口继承JspPage接口。

已实现的抽象类:FacesServlet, GenericServlet 抽象类实现Servlet接口; HttpServlet 抽象类继承 GenericServlet 抽象类。

GenericServlet 抽象类将 Servlet 接口中其他方法做了默认的空实现,只有 service() 方法还作为抽象方法,以后继承该抽象类只需要实现这一个抽象方法。
HttpServlet 抽象类是对 Http 协议的一种封装,简化相应的操作。

Servlet 接口中一共有五个抽象方法:

生命周期方法:
1、初始化 servlet 的init(ServletConfig config)方法,该方法在servlet被创建时执行,并且只执行一次。init 方法必须成功完成,servlet才能接收任何请求。
2、服务请求的service(ServletRequest req, ServletResponse res)方法,该方法在访问servlet时执行,并且每次访问都会执行。用于响应请求。该方法只有在servlet的init()方法成功完成后才可调用执行。
3、servlet退出服务时调用的destroy()方法。该方法在服务器正常关闭时执行,也只执行一次,一般用于释放资源;服务器不是正常关闭时不会执行。
两个普通方法:
1、getServletConfig()方法:获取ServletConfig对象对象
2、getServletInfo()方法:获取servlet的信息,如作者、版本和版权。

Servlet 的 init() 方法只执行一次,说明一个servlet在内存中只有一个对象,是单例的。

servlet 创建时机:
默认情况下,servlet 在第一次被访问时创建。
可以在web.xml配置文件中设置创建时机。如:

<servlet>
	<servlet-name> servlet自定义名称 </servlet-name>
	<servlet-class> 实现Servlet接口的类的全类名 </servlet-class>
	
	<!-- 默认情况下,该标签中的值为负数,表示servlet在第一次被访问时创建-->
    <!-- 当该标签中的值为0或正整数,表示servlet在服务器启动时创建-->
    <load-on-startup> 5 </load-on-startup>
</servlet>

使用步骤:

1、创建 JavaEE 项目;
2、定义一个类,实现 Servlet 接口;
3、实现接口中的抽象方法;
4、配置 Servlet 。就是将 Servlet 的实现类的全类名映射成一个资源路径url,方便通过这个 url 访问调用该应用小程序。


配置、部署 Servlet 的两种方式

1、在 WEB-INF/web.xml配置文件中部署

<servlet>
	<!-- 自定义一个 servlet 名称 -->
	<servlet-name> servlet自定义名称 </servlet-name>
	<!-- 引入需要配置的 Servlet 实现类的全类名,包名+类名 -->
	<servlet-class> 实现Servlet接口的类的全类名 </servlet-class>
</servlet>

<!-- servlet 的映射配置 -->
<servlet-mapping>
	<!-- 使用上面自定义的 servlet 名称-->
	<servlet-name> servlet自定义名称 </servlet-name>
	<!-- servlet 的映射路径,用于访问 servlet 的资源路径-->
	<url-pattern> servlet 的资源路径 </url-pattern>
</servlet-mapping>

实例:

<servlet>
	<servlet-name> name </servlet-name>
	<servlet-class> cn.qgl.web.test.DemoServlet </servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name> name </servlet-name>
	<url-pattern> /hello 的资源路径 </url-pattern>
</servlet-mapping>

1、访问 http://localhost:8080/demo_pro/hello,当浏览器发送请求访问该 url,通过url中的域名(localhost:8080)找到对应的服务器、虚拟目录(/demo_pro)找到对应的项目,然后根据资源路径(/hello )去该项目的 web.xml 文件中去匹配,即匹配 <servlet-mapping> 中的 <url-pattern> 标签体中的内容;
2、匹配到后,得到 <servlet-mapping> 中对应的 <servlet-name> 标签中的servlet名称,该名称与 <servlet> 中的 <servlet-name>标签体进行匹配;
3、匹配到后,就可以得到 <servlet> 中对应的 <servlet-class> 标签体中内容,即全类名下的 Servlet 实现类这一资源;
4、于是服务器就加载该类、创建对象、调用方法。所以这些服务器要能对这个类进行这些操作,这个类必须符合一定的规则(接口),即实现 Servlet 接口。

2、使用注解部署 Servlet

在 Servlet 3.0(JDK6.0)以后支持注解配置,可以不用在web.xml中配置。

@WebServlet(urlPatterns = "/资源路径")
public class 实现类 extends Servlet{}

这种方式只需在对应的 servlet 类上添加 @WebServlet 注解即可。当浏览器发送请求时,根据 url 直接寻找匹配 @WebServlet 后对应的资源路径,然后调用并执行对应的 servlet 类。

@WebServlet 注解信息。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
    String name() default "";  //相当于<Servlet-name>
    String[] value() default {}; //代表urlPatterns()属性配置
    String[] urlPatterns() default {}; //相当于<url-pattern> 默认是这个参数
    int loadOnStartup() default -1; //相当于<load-on-startup>
    WebInitParam[] initParams() default {};
    boolean asyncSupported() default false;
    String smallIcon() default "";
    String largeIcon() default "";
    String description() default "";
    String displayName() default "";
}

IDEA 与 tomcat 的相关配置

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

当启动服务器后查看控制台的打印的日志信息:
在这里插入图片描述
查看上述路径(tomcat 给部署的项目单独创建的配置文件):
在这里插入图片描述
查看 conf 配置文件夹中的文件,该xml文件名即为项目的虚拟目录。
在这里插入图片描述
打开该xml文件可以看到项目文件的路径
在这里插入图片描述
查看上述路径(tomcat 部署的项目存放路径):
在这里插入图片描述
在这里插入图片描述

工作空间项目 与 tomcat 部署的web项目

工作空间项目存放在自定义的文件中
在这里插入图片描述
工作空间中的web目录(存放web项目)。
在这里插入图片描述
在这里插入图片描述
tomcat 部署的 web 项目存放在工作空间项目中的 out 文件夹中的 artifacts 文件夹中,它是对应者工作空间项目下的web目录下的所有资源。tomcat 真正访问的是 tomcat 部署的项目。
在这里插入图片描述
其中 WEB-INF 下的 class 文件来自 src下的 java 文件编译而来的。
在这里插入图片描述
WEB-INF 下的资源是不能直接被浏览器访问到的。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值