黑马程序员javaweb教程:Servlet详解

黑马程序员javaweb教程:Servlet详解
黑马程序员javaweb教程:Servlet详解

Servlet详解

1用用再说!

我们先不要去管Servlet是个什么东西,先用用再说!在使用之后,你就会对Servlet有

一个简单的了解。

●使用MyEclipse创建hello项目;

●在src下创建cn.itcast.servlet.OneServlet类;

●让OneServlet实现javax.servlet.Servlet接口,这个接口中一共5个方法,而我们只

需要去实现service()方法;

●打开web.xml文件,部署OneServlet;

●发布hello项目;

●打开浏览器访问http://localhost/hello/myOne。

public class OneServlet implements Servlet {

public void init(ServletConfig config) throws ServletException {} public ServletConfig getServletConfig() {return null;}

public void service(ServletRequest req, ServletResponse res)

throws ServletException, IOException {

res.getWriter().print("Hello JavaWeb!");

}

public String getServletInfo() {return null;}

public void destroy() {}

}

1JavaWeb三大组件

Servlet是JavaWeb三大组件之一,它是我们学习JavaWeb最为基本的组件,也就是说你一定要100%的掌握它。

其它两种:Filter(拦截器)、Listener(观察者模式)

2Servlet的作用

Servlet,即Server Let的意思,用来处理用户请求。当客户端发出请求后,由Tomcat去找到可以处理这一请求的Servlet来处理。

也就是说,用户的请求是由Servlet来处理的!例如用户发出注册请求,那么就应该有处理注册的Servlet来处理;用户发出登录请求,那么就应该有登录Servlet来处理。

也就是说,Servlet是由我们自己来完成的!但Servlet一定要实现javax.servlet.Servlet 接口,并且还要在web.xml文件中部署!不然Tomcat是找不到我们写的Servlet的。

one

cn.itcast.servlet.MyOneServlet

one

/oneServlet

当我们写好了cn.itcast.servlet.MyOneServlet类后,还需要在web.xml文件中添加上面的内容。这就是把MyOneServlet部署到项目中去了!

3JavaWeb请求响应原理

当Tomcat接收到请求(http://localhost:8080/hello/oneServlet)后,Tomcat会找到hello 项目中的web.xml文件,然后通过oneServlet这个请求路径,查找处理这个请求的Servlet

类型。这刚好与/oneServlet匹配,这说明存在一个可以通过这个请求的Servlet。然后再通过/oneServlet查找到one,然后再通过one查找到cn.itcast.servlet.MyOneServlet。这时Tomcat已经得到了一个Servlet类名字(一个字符串而已)。

Tomcat通过Servlet类名字去查找Servlet缓存池中是否已经存在了这个Servlet对象,如果存在,那么就不用再去创建,直接获取这个Servlet实例,调用它的service()方法完成请求!

如果这个Servlet不存在,那么Tomcat会通过反射来创建Servlet实例,并把Servlet实例存放到Servlet池中,再去调用Servlet的service方法处理请求。

4Servlet接口

javax.servlet.Servlet接口中方法如下:

●void init(ServletConfig servletConfig):当Tomcat创建Servlet实例后,马上调用init()

方法。这个方法只在创建后调用一次!用来做Servlet初始化工作!一个Servlet实

例只被创建一次,所以init()方法也只被调用一次!(本方法编写对Servlet的初始化

代码)

●void service(ServletRequest request, ServletResponse response):Servlet实例在每次处

理请求时都调用service()方法。

●void destroy():当Tomcat要销毁Servlet实例时,会先调用destroy()方法,再销毁它。

所谓销毁Servlet,其实就是在Servlet缓存池中把Servlet移除!一般只有Tomcat关

闭时,才会销毁Servlet实例!

●ServletConfig getServletConfig():这个方法返回ServletConfig对象,但我们不能自己

去创建ServletConfig对象,所以一般我们会在init()方法中把init()方法的参数保存起

来,然后再在本方法中返回它。ServletConfig对象对应web.xml中当前Servlet实例

的配置信息。

●String getServletInfo():这个方法只是返回一个字符串,用来说明当前Servlet。基本

没用!

5Servlet生命周期

javax.servlet.Servlet接口中,有三个方法说明了Servlet的生命周期:

●void init(ServletConfig):创建后马上调用init()完成初始化;

●void service(ServletRequest,ServletResponse):每次处理请求时调用service()方法;

●void destroy():当Tomcat要销毁Servlet实例时,先调用destroy()方法。

现在你应该已经清楚了,Servlet的实例不由我们创建,Servlet的方法不由我们来调用,这一切都是由Tomcat来完成!!!这就是说由Tomcat来管理Servlet,而我们只需要去编写Servlet实现类,并将其部署到web.xml文件中去!

再次提醒,只有这三个方法是生命周期中的方法。也就是说,生命周期方法会被Tomcat 在不同的时间点来调用!而其它方法就不会被调用了!!!如果你在自己写的Servlet中添加了其他方法,那么Tomcat也是不会去调用它们的!但你可以让生命周期方法去调用你自己写的方法就OK了!

6请求对象和响应对象的基本使用

在Tomcat调用Servlet的service()方法时,需要给service()方法传递参数,这两个参数一个是ServletRequest,另一个是ServletResponse。其实Tomcat传递的是HttpServletRequest 和HttpServletResponse对象。因为我们的请求都是基于HTTP协议的!

HttpServletRequest是ServletRequest的子接口;

HttpServletResponse是HttpServletResponse的子接口。

Tomcat会把所有与请求相关的数据封装到HttpServletRequest对象中。例如请求的是POST还是GET,所有请求头信息,以及请求参数,这些数据都封装到了HttpServletRequest 对象中!!!当我们需要使用这些信息时,可以去调用HttpServletRequest的相关方法来获取。

HttpServletRequest方法:

●String getParameter(String paramName):获取指定请求参数的值;

●String getMethod():获取请求方法,例如GET或POST;

●String getHeader(String name):获取指定请求头的值;

●void setCharacterEncoding(String encoding):设置请求参数编码!只对POST请求中的

参数有效。当调用request.setCharacterEncoding(“utf-8”)之后,再通过getParameter()

方法获取参数值时,那么参数值都已经通过了转码,即转换成了UTF-8编码。所以,这个方法必须在调用getParameter()方法之前调用!

Tomcat会传递给service()方法一个HttpServletResponse对象,这个对象我们称之为响应对象。它可以完成与响应相关的工作。例如向客户端发送响应状态码,向客户端发送响应头信息,向客户端发送响应正文等等!反正只要是与响应相关的方法,你就去HttpServletResponse对象中去查找。

●void setContentType(String contentType):设置响应内部的类型,所谓响应类型,就

是给客户端浏览器用来识别响应内部的类型,如果响应类型是text/html,那么浏览

器就会显示它,如果响应类型为appliction/avi,那么浏览器就会弹出下载对象框。

所以,响应类型是不能写错的。例如:

response.setContent Type(“text/html;charaset=utf-8”),这是告诉构造器,响应内部是

html代码,使用的编码是UTF-8。

●void addHeader(String name, String value):向客户端添加响应头信息;

●void sendError(int code, String errorMsg):向客户端发送状态码,以及错误消息。例

如给客户端发送404:response(404, “您要查找的资源不存在!”)。

●PrintWriter getWriter():获取response的输出流,使用该流可以向客户端响应正文

内容。例如response.getWriter().print(“

Hello JavaWeb!

”);

7ServletConfig

ServletConfig对象对应web.xml文件中的元素。例如你想获取当前Servlet在web.xml文件中的配置名,那么可以使用servletConfig.getServletName()方法获取!

你不能自己去创建ServletConfig对象,Servlet的init()方法的参数就是ServletConfig类型的。Tomcat在调用init()方法时,会传递ServletConfig对象。你可以在init()方法中使用它!

元素中还可以配置初始化参数:

One

c n.itcast.servlet.OneServlet

paramName1

paramValue1

paramName2

paramValue2

添加了两个初始化参数,第一个参数的名称为paramName1,第一个参数的值为paramValue1;第二个参数的名称为paramName2,第二个参数值为paramValue2。

元素中可以加载多个,每个表示一个参数。下有两个子元素:,其中表示参数的名称,而元素参数的值。

注意,是添加到元素中,而不是中。

称的参数值。getInitParameterNames()方法返回所有参数的名字,返回值类型为Enumeration。

相关主题
相关文档
最新文档