您的位置:首页 > 其它

Servlet原理解析及作用1

2015-09-18 22:48 295 查看
ServletAPI中的主要接口或类的核心类图(很重要)



一、Servlet定义

Servlet是使用Java Servlet应用程序设计接口及相关类和方法的Java程序。它在Web服务器上或应用服务器上运行并扩展了该服务器的能力。Java Servlet对于Web服务器就好像Java Applet对于Web浏览器。Applet装入Web浏览器并在Web浏览器内执行,而Servlet则是装入Web服务器并在Web服务器内执行。 Java
Servlet API 定义了Servlet和服务器之间的一个标准接口,这使得Servlet具有跨服务器平台的特性。

Servlet通过创建一个框架扩展服务器的能力,采用请求-响应模式提供Web服务。当客户机发送请求至服务器时,服务器将请求信息发送给Servlet,Servlet生成响应内容并将其传给Server,然后再由Server将响应返回给客户端。

二、Servlet概述

1、Servlet是SUN公司制定的一套开发动态网页的技术。

2、JavaEE相关的类,包名一般都是以javax开头

图解:



三、Servlet的生命周期

当客户端服务器向进行请求的时候tomcate中的容器最终要调用service方法为客户进行服务,并且向客户端网页进行回应。

1、Servlet接口中的常用方法:

public void init(ServletConfig config):初始化。Servlet类被实例化后就执行,且执行一次。由容器进行 调用。

public void service() 作用是用来处理请求的

public void destroy():销毁Servlet对象。由容器进行调用在内存中一个Servlet只有一个实例。针对不同 的用户请求,容器采用多线程的机制调用service方法的。

Servlet实例对象和初始化方法,默认情况下,只有第一次访问时才执行,且只执行一次。



四、servlet运行过程

用户的所有请求都是找servlet

整个过程可以这样简略:

(1)web请求

(2) tomcate服务器调用servlet组件

(3)web项目下的xml文件中的<servlet-mapping>标签中的url-pattern地址

(4)然后再找到该标签中的servlet-name,从而找到<servlet>标签中的servlet-name,然后找到servlet类进行处理。

(5)然后通过servier的处理得到响应,通过服务器响应到web。

图文介绍:





举一个例子代码:

一个标准的web-servlet应用目录:



注:可以直接建立一个servlet类:直接new一个servlet类,勾选dopost及doget方法(没有指明走那个方法,默认执行该方法),最后下一步,勾选Generate/Map web.xml(将该servlet类映射到xml文件中。)

HttpServlet 中的service方法是典型的模板设计模式的具体应用。

package com.dp.java.Servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDom2 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.flush();
out.close();
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.flush();
out.close();
}

}


package com.dp.java.Servlet;

import java.io.IOException;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class ServletDom1 extends GenericServlet {

@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
response.getOutputStream().write("haha".getBytes());

}

}


映射:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

<servlet>
<servlet-name>ServletDom1</servlet-name>
<servlet-class>com.dp.java.Servlet.ServletDom1</servlet-class>
</servlet>
<servlet>
<servlet-name>ServletDom2</servlet-name>
<servlet-class>com.dp.java.Servlet.ServletDom2</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>ServletDom1</servlet-name>
<url-pattern>/ServletDom1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletDom2</servlet-name>
<url-pattern>/servlet/ServletDom2</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


注:<welcome-file-list>指默认走的页面

五、web.xml文件的映射的细节问题




当 <url-pattern>/</url-pattern>出现时,servlet将会成为这个应用程序的缺省servlet,在tomcat work space\apache-tomcat-6.0.24\conf中可以找到web.xml中可以找到设置的缺省。

如下图tomcate中web.xml文件:









最后值得一提的是:

servlet3.0之后,新建web应用就不会出现web.xml文件了,这里是新特性介绍:http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/#major3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: