Java Servlet,故名思议,它是一个基于Java技术的web组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容,Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写Java类。Servlet会被编译为平台独立的字节码,可以被动态的加载到支持Java技术的Wen服务器中运行
1.Servlet容器的分类
Servlet容器也即Servlet引擎,是Web服务器或应用程序服务器的一部分,用于在发送请求和响应之上提供网络服务,解码基于MIME的请求。Servlet容器在Servlet的生命周期内包容和管理Servlet。
Servlet容器分为独立Servlet容器、进程内的Servlet容器和进程外的Servlet容器,我所有的WEB学习都是基于Tomcat容器的。
2. Tomcat容器工作流程
①.客户端(通常是浏览器)访问WEB服务器,发送HTTP请求。
②.Web服务器接收到请求后,传递给Servlet容器。
③.Servlet容器加载Servlet,产生Servlet实例后,向其传递表示请求和响应的对象。
④.Servlet实例使用请求对象得到客户端的请求信息,然后进行响应的处理
⑤.Servlet实例将处理结果通过响应对象发送回客户端,容器负责确保响应的正确送出,同时将控制返回个Web服务器。
3. Tomcat的安装目录下的各文件夹含义
bin:存放启动和关闭Tomcat的脚本文件。
lib:存放Tomcat服务器运行所需要的各种JAR包
webapps:经常使用的也就是这个目录,当发布WEB应用程序时,就是讲web应用程序的目录及文件放在这个目录下。
conf:存放Tomcat的各种配置文件如:server.xml等。
logs:存放Tomcat的日志文件。
temp:存放Tomcat运行时产生的临时文件。
4.与Servlet相关的接口和类
(1)Servlet接口:该接口在javax.servlet包中,在这个接口中定义了五个方法:
1.init():在Servlet实例化后,Servlet会调用该方法来初始化该对象,主要是为了让Servlet对象在处理客户请求前先完成一些初始化工作。
2.service():容器调用该方法来处理客户端的请求,在容器调用该方法前必须确保init()方法正确完成。
3.destroy():当容器检测到一个Servlet对象应该从服务器中删除的时候,容器会调用该对象的destroy()方法。
4.getServletConfig():该方法返回容器调用init()方法时传递给Servlet对象的ServletConfig对象
5.getServletInfo():返回一个String类型的字符串,其中包含了关于Servlet的信息,如:作者、版本和版权等。
(2).ServletRequest和ServletResponse接口:这两个接口也在javax.servlet包下,这两个接口包含了很多重要的方法,可以详细参考API来验证。
(3).GenericServlet类:该类是一个抽象类,如果我们直接通过实现Servlet接口来编写一个Servlet类就需要实现Servlet接口中的五个类,为了简化Servlet的编写,在javax.servlet包中,给我们提供了一个抽象类GenericServlet,它提供了除service()方法外的其它4个方法的简单实现。
(4)HttpServlet类:该类是一个抽象类。在大多数网络应用中,都是客户端(浏览器)通过HTTP协议去访问服务器的资源,而我们所编写的Servlet也主要是应用与HTTP协议的请求和响应,为了快速开发应用于HTTP协议的Servlet类。Sun公司在javax.servlet.http包中给我们提供了一个HttpServlet的抽象类,该类是继承了GenericServlet类。HttpServlet虽然是一个抽象类,但是其中没有抽象方法。
(5)HttpServletRequest和HttpServletRequest接口:这两个接口分别继承了ServletRequest和ServletResponse。
5.在了解了上面一些基本知识后我们开始第一个简单的Servlet程序
第一步:编写Servlet类HelloWorld.java
public class HelloWorld extends HttpServlet {
//用户提交的get方法
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response); //为简单起见,这里直接在调用doPost方法
}
//用户提交的post方法
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//得到一个PrintWriter对象
PrintWriter out = response.getWriter();
out.println("Hello World!");
out.close();
}
}
第二步:在web.xml中配置Servlet,使Servlet类和请求相映射:
<servlet>
<!-- 同一个web程序中可以有多个servlet,每一个servlet的名字必须是唯一的,比如下面的helloworld只能用一次
servlet-class映射的是一个完整的Servlet类的路径(如果有包名,必须带上包)
-->
<servlet-name>helloworld</servlet-name>
<servlet-class>net.liwei.servlet.HelloWorld</servlet-class>
</servlet>
<!-- servlet-mapping用于Servlet类和URL之间的映射 -->
<servlet-mapping>
<!-- 这个映射的名字必须和上面的Servlet的名字相同 -->
<servlet-name>helloworld</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
第四步:运行HelloWorld.java
打开Tomcat服务器,Run as on Server,网页将会出现HelloWorld如下:
注意:我使用的是Eclipse4.3版本,在使用时将Tomcat服务器配置到了Eclipse中,所以可以直接在Eclipse中运行web项目,如果没有配置Tomcat到Eclipse,则需要将项目导出war到Tomcat的安装目录下的webapps目录下,然后开启Tomcat,打开浏览器输入:http://localhost:8080/StartServlet/hello就可以了。