Servlet In Web Application

本文详细介绍了Servlet的工作原理,包括HTTPServlet的执行流程、HttpServletResponse的使用注意事项、Servlet生命周期管理、ServletContext的应用及RequestDispatcher的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Servlet In Web Application
 
HttpServlet的执行步骤:
1.       容器收到调用请求的时候,先调用HttpServletservice()方法;
2.       如果HttpServletservice()方法没有被重写,那么就调用Servletservice()方法,
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。所以当你想提交比较长的数据,或者不想把表单中的数据显示到链接的后面,那么就必须声明formmethod方法为post.
 
HttpServletResponse:
1.   getWriter() getOutputStream()方法在同一个ServletResponse中只能调用其中之一。否则会抛出IllegalStateException。但是同一个方法是可以多次调用的。
2.       Reponse.setRedirect().方法要在response head发送到客户端之前调用,否则会抛出IllegalStateExceptionserRedirect()方法实际上就是通过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,通过ServletContextServletRequest,这两种方式获得的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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值