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操作好一点?