当前位置:编程学习 > JAVA >>

jee项目启动直接运行servlet

补充:web.xml如下: <servlet> <description></description> <display-name>EventServlet</display-name> <servlet-name>EventServlet</servlet-name> <servlet-class>servlets.EventServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>EventServlet</servlet-name> <url-pattern>/event</url-pattern> </servlet-mapping> servlet如下: public class InitServlet extends HttpServlet { public InitServlet(HttpServletRequest request, HttpServletResponse response) { super(); request.getSession().setAttribute("onoblank", "0"); // TODO Auto-generated constructor stub } public void init(HttpServletRequest request, HttpServletResponse response) throws ServletException { request.getSession().setAttribute("onoblank", "0"); } } (省略dopost,doget),我现在就像在启动的同时给“onoblank”赋值为0,请问怎么办。 由于程序的需要,我不能直接在jsp页面上赋值。
追问:我现在就是完全进不到servlet里来,我有public void init() throws ServletException { 这个方法,但是不执行啊,我现在就想输出个字符串,dabug发现就压根没有用过这个servlet,请问现在怎么能让我一启动先跳进这个servlet
答案:当你明白了servlet的生命周期之后,你就知道怎么写你的代码了。
 
首先,你的Servlet配置里面配置了一个
<load-on-startup>1</load-on-startup>
节点,也就是告诉Web服务器在启动的时候初始化你的Servlet。当启动Servlet的时候,服务器容器会自动初始化你的Servlet,此时的执行顺序是:
1、首先执行Servlet的构造方法
2、在执行init方法(如果重写了带参数的init方法,则会直接执行带参数的,不带参数的init方法不会执行,如果你没有从写地参数的init方法而是重写了没有带参数的,那么就会执行没有带参数的init方法,听起来比较拗口,说白了,带参数的init方法比没有带参数的init优先级高,而且只选择其一执行)。
 
你的要求是在Servlet启动的时候调用request执行,明确告诉你是做不到的,里面init带参数的方法里面可以获得application对象。
 
request对象时请求后才会产生的,所以你别想在服务器启动时(servlet初始化时)在request里面设置Attribute。
 
建议你可以当servlet启动时,在application初始化你的变量。
其他:有参数的init应该是这个样子的:public void init(ServletConfig config)throws ServletException

你写的init压根和父类的init没有任何关系,因为参数是不一样的。
所以启动的时候,动用的还是父类的public void init(ServletConfig config)throws ServletException方法,并不会调用你自己写的init方法。
还有一点就是,有请求才会有request,你在启动的时候压根就没有用户请求,哪来的request呢? 

上一个:在java封装json总共有几种方式,最好能有示例??????
下一个:三大框架整合后,是直接用hibernatetemplate操作持久层好一点,还是用sesssionFactory操作好一点?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,