Servlet入门
Servlet简介
Servlet(Server Applet)是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
当浏览器发送一个HTTP请求时,HTTP请求由Web容器分配给特定的Servlet进行处理,Servlet拥有一系列的方法来处理HTTP请求。常见的方法有doGet(),doPost()等。Web容器中包含了多个Servlet,特定的HTTP请求该由哪一个Servlet来处理是由Web容器中的web.xml来决定的。
Servlet必须部署在Java servlet容器才能使用。虽然很多开发者都使用Java Server Pages(JSP)和Java Server Faces(JSF)等Servlet框架,但是这些技术都要在幕后通过Servlet容器把页面编译为Java Servlet。也就是说,了解Java Servlet技术的基础知识对任何Java web开发者来说是很有用的。
第一个Selvlet程序
1.在tomcat中新建一个web应用hello,在web应用中新建一个WEB-INF/classes目录
2.在classes目录新建一个FirstServlet
package com.lwb.servlet;
import java.io.*;
import javax.servlet.*;
public class FirstServlet extends GenericServlet{
public void service(ServletRequest req,ServletResponse res)throws ServletException,java.io.IOException{
OutputStream out = res.getOutputStream();
out.write("My First Sevlet".getBytes());
}
}
3.编译,javac -cp %CATALINA_HOME%/lib/servlet-api.jar -d . FirstServlet.java
4.在WEB-INF目录中新建一个web.xml文件,配置servlet的对外访问路径
5.启动tomcat服务器,用浏览器访问。
- 注意:(1)MyFirstServlet类继承了GenericServlet。这个继承是必须的,因为所有的Servlet必须是要么继承了 javax.servlet.GenericServlet 的普通Servlet,要么是继承了 javax.servlet.http.HttpServlet 的HTTP Servlet。
- (2)如果你在使用IDE(例如eclipse),那么打包和部署你的应用只需要一个简单的步骤。右击项目> Run As > Run As Server。如果还没配置服务器先配置好服务器
Servlet生命周期方法
在你的应用加载并使用一个Servlet时,从初始化到销毁这个Servlet期间会发生一系列的事件。这些事件叫做Servlet的生命周期事件(或方法)。
Servlet生命周期的三个核心方法分别是 init() , service() 和 destroy()。每个Servlet都会实现这些方法,并且在特定的运行时间调用它们。
1) 在Servlet生命周期的初始化阶段,web容器通过调用init()方法来初始化Servlet实例,并且可以传递一个实现 javax.servlet.ServletConfig 接口的对象给它。这个配置对象(configuration object)使Servlet能够读取在web应用的web.xml文件里定义的名值(name-value)初始参数。这个方法在Servlet实例的生命周期里只调用一次。
2) 初始化后,Servlet实例就可以处理客户端请求了。web容器创建一个多线程来调用Servlet的service()方法来处理每一个请求。service() 方法定义了能够处理的请求类型并且调用适当方法来处理这些请求。编写Servlet的开发者必须为这些方法提供实现。如果发出一个Servlet没实现的请求,那么父类的方法就会被调用并且通常会给请求方(requester)返回一个错误信息。
3) 最后,web容器调用destroy()方法来终结Servlet。如果你想在Servlet的生命周期内关闭或者销毁一些文件系统或者网络资源,你可以调用这个方法来实现。destroy() 方法和init()方法一样,在Servlet的生命周期里只能调用一次。
其他内容(细节)
##Servlet的映射路径
匹配分两种,(1)精确匹配 (2)模糊匹配 。比较好理解,这里不讲了。
注意:
- url-pattern要么以 / 开头,要么以*开头。 例如, itcast是非法路径。
- 不能同时使用两种模糊匹配,例如 /itcast/*.do是非法路径
- 当有输入的URL有多个servlet同时被匹配的情况下:1,精确匹配优先。2 以后缀名结尾的模糊url-pattern优先级最低。
Servlet的缺省路径
servlet的缺省路径是在tomcat服务器内置的一个路径。该路径对应的是一个DefaultServlet(缺省Servlet)。这个缺省的Servlet的作用是用于解析web应用的静态资源文件。
问题: URL输入http://localhost:8080/myweb/index.html 如何读取文件????
1)到当前day10应用下的web.xml文件查找是否有匹配的url-pattern。
2)如果没有匹配的url-pattern,则交给tomcat的内置的DefaultServlet处理
3)DefaultServlet程序到day10应用的根目录下查找是存在一个名称为index.html的静态文件。
4)如果找到该文件,则读取该文件内容,返回给浏览器。
5)如果找不到该文件,则返回404错误页面。
结论: 先找动态资源,再找静态资源。