Servlet In Web Application
HttpServlet
的执行步骤:
1.
容器收到调用请求的时候,先调用
HttpServlet
的
service()
方法;
2.
如果
HttpServlet
的
service()
方法没有被重写,那么就调用
Servlet
的
service()
方法,
3.
这个方法中,会根据
requerst head
中的
method
参数来判断执行哪个函数。
方法名称为:
XXX
,那么就执行
doXXX()
方法。
Note:
·
在
http1.0
中有三种方法:
get,post,head.
在
http1.1
中又增加了
5
个方法:
put, options,delete,trace,connect.
·
如果
HttpServlet
中的
service()
被重写,那么就要人工的根据
method
判断需要调用的方法。
·
在浏览器中如果不指定
request
中的方法名,那么默认为
get
。比如链接,未声明
method
的表单,都默认是用
get
。所以当你想提交比较长的数据,或者不想把表单中的数据显示到链接的后面,那么就必须声明
form
的
method
方法为
post.
HttpServletResponse:
1.
getWriter()
和
getOutputStream()
方法在同一个
ServletResponse
中只能调用其中之一。否则会抛出
IllegalStateException
。但是同一个方法是可以多次调用的。
2.
Reponse.setRedirect().
方法要在
response head
发送到客户端之前调用,否则会抛出
IllegalStateException
。
serRedirect()
方法实际上就是通过
response head
告诉浏览器,转向到指定的地址。和重新在地址栏输入地址效果一样。原先发送过的
request
数据是没有的,更
forward()
方法有所区别。
Forward
方法对客户端来说是透明的,服务器端将收到的
request
转发给特定的资源。
Servlet Life Cycle
1. Servlet
实例默认在容器第一次受到对该
Servlet
的请求的时候初始化,也可以进行预加载,在描述文件中设置
<load-on-startup>
。
2.
Servlet
的初始化调用的是
init(ServletConfig)
函数,其中
ServletConfig
包含了在描述文件中对这个
Servlet
设置的初始化参数。这个函数运行完毕之后
Servlet
才能进入
initialized
状态。
3.
GenericServlet(Servlet
接口
的一般实现
)
中还有一个不带参数的
init()
,这方法是用来提供给用户重写的,当想在初始化的时候做些事情,重写这个方法既可,
init(ServletConfig)
方法会自动调用这个方法。在
init()
中如果想使用
ServletConfig
,可以通过函数
getServletConfig()
来获得。如果重写了
init(ServletConfig)
方法,那么记住要在方法中使用
super.init(ServletConfig).
ServletContext
ServletContext
是整个
Web Application
的公共对象,保存了这个应用的环境参数,也可以被共享所有
Servlet
的公共数据。他也有权利访问整个应用的说有资源。
ServletContext
获得资源的方法有:
1. Java.net.URL getResource(String path)
2. java.io.InputStream getResourceAsStream(String path)
3. String getRealPah(String relativePath) //
返回本地绝对路径,但是不能读取
jar
包里面的文件。
RequestDispatcher
有两种方式获得
RequestDispatcher,
通过
ServletContext
和
ServletRequest,
这两种方式获得的
RequestDispatcher
的区别是:后者可以使用相对路径,而前者不可以。
两个函数:
1.
Void forward(ServletRequest request,ServletResponse response)
在
response commited
之前,可以将
request
和
response
路由到别的
servlet
或者
jsp
来继续处理。
2.
Void include(ServletRequest request,ServletResponse response)
在
response commited
之前,可以将
request
和
response
路由到别的
servlet
或者
jsp
来处理,但是处理完成后还会回到本
servlet.