web04Servlet请求详解

本文介绍了Servlet的生命周期,包括对象创建、初始化、业务调用及销毁四个阶段,并详细解释了每个阶段的特点及其调用时机。此外,还探讨了如何通过web.xml配置文件实现Servlet的初始化参数设置和请求映射。
摘要由CSDN通过智能技术生成

*一个请求服务器创建一个servlet处理请求会很消耗资源:

想办法是多个请求到达同一个servlet让该servlet做请求转发.

<servlet-name>action</servlet-name>

<servlet-class>ActionServlet</servlet-class>



通过通配符的方式使多个请求到达同一个url-pattern减少配置量.

web.xml中url-pattern的统配符匹配方式:

1>精确匹配:

<url-pattern>/addEmp</url-pattern>


2>前缀匹配:(使用最多分模块)

<url-pattern>/user/*</url-pattern>

<url-pattern>/flight/*</url-pattern>

可以被拦截:

http://localhost:8080/web04/user/login

http://localhost:8080/web04/user/user/login

不可被拦截:

http://localhost:8080/web04/admin/user/login

3>后缀匹配:

前面不能有 / 

<url-pattern>*.do</url-pattern>

<url-pattern>*.php</url-pattern

<url-pattern>*.htm</url-pattern>


http://localhost:8080/web04/user/login不可匹配

http://localhost:8080/web04/user/user/login.do可以匹配


问题:

<url-pattern>*.html</url-pattern>和静态页面谁会被返回

浏览器发送一个请求首先tomcat拦截,然后去web.xml中匹配,看下有没有url-pattern的配置

若找不到就去部署目录中找静态文件,若找不到404异常.

http://localhost:8080/web04/day09.zip  浏览器若无法解析则弹出下载框下载.


4>完全模糊匹配:

<url-pattern>/*</url-pattern>(过滤器使用)



在servlet中想办法根据不同的url,手动做请求分发.

request.getRequestURI();String 

request.getRequestURL();StringBuffer 



servlet生命周期(一般不是自己创建的东西有生命周期)

生命周期指:对象的创建到消亡的过程

4个阶段:

1>对象创建:

谁创建了Servlet对象? 什么时候创建的.

tomcat(web容器)创建,

默认情况下载第一次请求到来的时候创建,若请求再次到达该servlet Tomcat不会创建servlet对象会直接使用创建过的,所以servlet对象在web容器中是单例的.(减少资源创建节省资源...)

非单:

main{

new Context()....

}

class Context

{

}

单例:

main{

new Context()....

}

class Context

{

private static Context context;

private Context(){}

public static Context getContext(){

if(context==null){

context=new Context();

}

return context;

}

}

}

若servlet对象是单例的,则在大数据并发访问对象的临界资源时,容易出现线程安全问题

1, synchronized  servlet/  system.out.println()加锁了不适合服务器端应用,适合客户端

2,尽量不要在servlet中编写需要修改的临界资源.(成员变量)...


我们可以修改web.xml来告诉tomcat当web容器启动的时候立即创建servlet对象.

<load-on-startup>1</load-on-startup>

num:代表servlet对象创建的优先级


2>初始化:

init(ServletConfig config){}

servlet生命周期相关的API:(类与接口)

Servlet(I)

Init(ServletConfig config)

Servic(ServletRequest,ServletResponse);

destory()

ServletConfig(I)

ServletRequest(I)

ServletResponse(I)


Servlet子类GenericServlet(AC)implements Servlet

init(){}

destroy(){}

service()(抽象)


HttpServlet(AC)extends GenericServlet

service(HttpServletRequest req,HttpServletResponse resp){}


ActionServlet extends HttpServlet(我们自己的)

HttpServletRequest(I)

HttpServletResponse(I)


初始化阶段问题:

谁调用初始化方法init()? 什么时候调用?

tomcat容器调用init方法.

在servlet创建后,执行init()立即执行init()进行对象初始化,仅仅执行1次.


init方法中一般编写什么代码?

对成员变量进行初始化.

在对象创建完毕后仅仅执行一次义务.

init(ServletConfig config)

{

super.init(config);//不能省父类有事要做.

}


ServletConfig接口作用:

config对象中包含了用户在web.xml中对当前servlet的一些初始化参数的配置信息.

如何在web.xml中配置初始化参数?

<init-param>

<param-name>words</param-name>

<param-value>dog</param-value>

</init-param>


如何使用config对象读取初始化参数?

config.getInitParameter("words");


模板设计模式:

GenericServlet()

{

init(ServletConfig config)

{

.........................

init();

init2...();(钩子方法子类不想执行带参的时可以执行不带参的...重写不带参的时候任然可以执行该方法.)

}

init(){};

}

ActionServlet{

init(ServletConfig config){

super.init(config)

}

}


3>业务调用:

谁调用的?什么时候调用?

web容器调用.

请求到达servlet对象时调用一次.service方法可以调用多次.

405异常

如果service方法写错,tomcat会调用httpServlet的service的方法.

HttpServlet{

service(req,resp)

{

if(get){

doget(req,resp)

}else if(post){

doPost(req,resp);

}


}

doGet(){

throw new 405异常.

}

doPost(){

throw new 405异常.

}




4>对象的销毁:destory(){}

谁调用?什么时候调用?

web容器调用.

看tomcat心情.(tomcat内部有一个动态监测不常用的servlet对象会把servlet销毁.)

应用被移除.或服务器被关闭.

servlet对象销毁之前执行一次该生命周期方法.(一生只死一次...)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值