JavaWeb-Servlet(2)

HttpServlet

1 HttpServlet 概述
HttpServlet类为GenericServlet的子类,其提供了对HTTP请求的特殊支持,因此通常会继承HttpServlet来自定义Servlet。

2 HttpServlet中的service()覆盖
HttpServlet类中service(HttpServeltRequest,HttpServeltResponse)的方法是其自己的方法,并非由Servlet继承而来。而是①通过GenericServlet中的声明周期方法service(ServeltRequest,ServeltResponse)中的两个参数强制转换为Http协议相关的类型HttpServeltRequest,HttpServeltResponse,②遂调用本类中的service(HttpServeltRequest,HttpServeltResponse)方法。因此,子类可以直接覆盖service(HttpServeltRequest,HttpServeltResponse)方法,之后不需要强制转换请求和响应对象。
③service(HttpServeltRequest,HttpServeltResponse)方法中会通过Request得到当前请求的请求方式,例如POST或者GET,④并根据请求方式选择调用doPost() 或 doGet()方法。所以需要重写的是doPost()或 doGet()方法。
HttpServlet时序图
**

Servlet细节

**
1.Servlet与线程安全
不要在Servlet中创建成员变量,因为可能存在一个线程对这个变量进行写操作,另一个线程进行读操作。

2.让服务器在启动时就创建Servlet
一般默认情况下,都是当发出第一次请求时才会创建相应的Servlet。实际可以在web.xml中对Servlet进行配置,使得服务器在启动时就创建Servlet,其中每个Servlet都有相应的顺序。

<servlet>
	<servlet-name>sun</servlet-name>
	<servlet-class>cm.servlet.AServlet</servlet-class>
	<load-on-startup>0<load-on-startup>
	</servlet>
	

**

ServletContext

**
1.ServletContext概述
服务器会为每个应用创建一个ServletContext对象;
其创建是在服务器启动时完成,其销毁是在服务器关闭时完成
其主要作用是在整个Web应用的动态资源之间共享数据。例如AServlet向ServletContext对象中保存一个值,那么其他的Servlet就可以获取这个值,也就是共享数据的功能。

2.获取ServletContext
(1)ServletConfig对象中的getServletContext()方法
(2)GenericServlet对象中的getServletContext()方法
(3)HttpSession中的getServletContext()方法
(4)ServletContextEvent的getServletContext()方法 etc.

3.域对象的功能
JavaWeb四大域对象:PageContext ServletRequest HttpSesson ServletContext
所有域对象都有存储数据功能,其内部有一个map用来存储数据。

4.获取应用初始化参数
Servlet可以获取初始化参数,但是为局部参数,也就是Servlet只能获取自己的初始化参数,不能获得别人的初始化参数。
可以配置公共的初始化参数,为所有Servlet使用,并且需要通过ServletContext使用。
<context-param>
<param-name>context-param</param-name>
<param-vlaue>context-value</param-value>
</context-param>
//得到ServletContext
ServletContext servletContext = this.getServletContext();
String value = servletContext.getInitParameter("context-param");
System.out.println(value);

5.获取资源相关方法
(1)获取真实路径
可以使用ServletContext对象获取Web应用下的资源
获取真实路径:String realPath = servletContext.getRealPath("/");
(2)获取资源流
把资源以输入流的方式获取:
InputStriam in = servletContext.getResourceAsStream("/")
此方法必须以“/”开头

发布了3 篇原创文章 · 获赞 1 · 访问量 116

猜你喜欢

转载自blog.csdn.net/yangyiyun199863/article/details/104213015
今日推荐