Servlet

Servlet

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

Servlet也是一组API,定义在java.servlet包下。

Servlet容器

Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP的生命周期,以及管理它们的共享数据。

Servlet容器也称为JavaWeb应用容器,或者Servlet/JSP容器。

更通俗的理解是Servlet容器是能够解释和运行Servlet代码的工具。

目前最流行的Servlet容器主要有:

  • Tomcat
  • Resin
  • J2EE服务器(如Weblogic)中也提供了内置的Servlet容器

Tomcat

Tomcat 是一个免费的开放源代码的 Servlet 容器,它是 Apache 软件基金会的一个顶级项目,由 Apache、Sun和其他一些公司及个人共同开发而成。由于有了 Sun 的参与与支持,最新的 Servlet 和 JSP 规范总是能在 Tomcat 中的到体现。

第一个Servlet

step1:写一个Java类,实现Servlet接口,重写所有方法,其中service方法是每次请求servlet都会执行的逻辑。

Java代码:

public class HelloServlet implements Servlet{

	@Override
	public void destroy() {}

	@Override
	public ServletConfig getServletConfig() { return null;}

	@Override
	public String getServletInfo() { return null;}

	@Override
	public void init(ServletConfig config) throws ServletException {}

	@Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		System.out.println("Hello,Servlet...");
	}
}

step2:在web.xml配置servlet信息:

  	<servlet>
  		<servlet-name>helloServlet</servlet-name>
  		<servlet-class>com.study.web.servlet.HelloServlet</servlet-class>
  	</servlet>
  
  	<servlet-mapping>
  		<servlet-name>helloServlet</servlet-name>
  		<url-pattern>/hello</url-pattern>
  	</servlet-mapping>

step3:启动tomcat服务器,在浏览器地址栏输入http://localhost:8080/{你的web工程名称}/hello访问。

Servlet响应过程

用户通过浏览器发起的http请求会根据IP地址[域名也是通过DNS解析为一个网络上的IP地址]找到网络上的某一台主机,如果这台服务器在8080端口开启了tomcat,那么它将做为服务器的角色响应用户发起的指向它的http请求;用户发起的http请求到达某一台tomcat以后,tomcat将根据请求url在web.xml中根据url-pattern找到对应的Servlet;

  • Servlet引擎检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第4步,否则,执行第2步;
  • 装载并创建该Servlet的一个实例对象:调用该 Servlet 的构造器;
  • 调用Servlet实例对象的init()方法;
  • 创建一个用于封装请求的ServletRequest对象和一个代表响应消息的ServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去;
  • WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
    Servlet容器响应客户端请求的过程

Servlet的注册和运行

  • Servlet程序必须通过Servlet容器来启动运行,并且储存目录有特殊要求,通常需要存储在WebContent\WEB-INF\classes\目录中,Eclipse等IDE会自动把编译后的字节码文件映射到这个目录下。
  • Servlet程序必须在WEB应用程序的web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载和被外界访问。
  • 一个<servlet>元素用于注册一个Servlet,它包含有两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名,这个相当于告诉Servlet容器要实例化哪个类的对象以及要实例化的对象的引用名称。
  • 一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径,这里的访问路径是相对路径,相对于Web应用的根目录。

关于url-pattern

  • 同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。
  • 在Servlet映射到的URL中也可以使用[*]通配符,但是只能有两种固定的格式:一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。
<servlet-mapping>
   <servlet-name>servletName</servlet-name>
   <url-pattern>*.do</url-pattern>
</servlet-mapping>

<servlet-mapping>
   <servlet-name>servletName</servlet-name>
   <url-pattern>/action/*</url-pattern>
</servlet-mapping>

两个根目录

一个Tomcat服务器就是一个Web站点,而一个Web站点可以部署多个Web应用。

  • web站点的根目录:http://ip:port/,例如http://localhost:8080/;
  • web应用的根目录:多个Web应用部署在同一个Web站点上,各应用存储在不同的目录下,表现在url上就是在Web站点根目录的基础上以各自应用名称来区分,http://ip:port/app1/;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值