中易网

jee项目启动直接运行servlet

答案:3  悬赏:70  
解决时间 2021-01-12 03:57
  • 提问者网友:相思似海深
  • 2021-01-11 23:20
jee项目启动直接运行servlet
最佳答案
  • 二级知识专家网友:猎心人
  • 2021-01-12 00:19
当你明白了servlet的生命周期之后,你就知道怎么写你的代码了。

首先,你的Servlet配置里面配置了一个
1
节点,也就是告诉Web服务器在启动的时候初始化你的Servlet。当启动Servlet的时候,服务器容器会自动初始化你的Servlet,此时的执行顺序是:
1、首先执行Servlet的构造方法
2、在执行init方法(如果重写了带参数的init方法,则会直接执行带参数的,不带参数的init方法不会执行,如果你没有从写地参数的init方法而是重写了没有带参数的,那么就会执行没有带参数的init方法,听起来比较拗口,说白了,带参数的init方法比没有带参数的init优先级高,而且只选择其一执行)。

你的要求是在Servlet启动的时候调用request执行,明确告诉你是做不到的,里面init带参数的方法里面可以获得application对象。

request对象时请求后才会产生的,所以你别想在服务器启动时(servlet初始化时)在request里面设置Attribute。

建议你可以当servlet启动时,在application初始化你的变量。追问我现在就是完全进不到servlet里来,我有public void init() throws ServletException { 这个方法,但是不执行啊,我现在就想输出个字符串,dabug发现就压根没有用过这个servlet,请问现在怎么能让我一启动先跳进这个servlet追答你要理解servlet的生命周期以及运行的机制才行啊啊啊啊啊!!!

Servlet初始化的时候首先会执行构造方法,在执行init方法,你如果没有重写init方法(注意,是重写父类的方法,而不是臆造你自己的init,它不认识的),servlet就初始化结束了。

如果你重写了父类init方法,一个带参数,一个没有带参数的,如果两个都重写了,带参数的会被调用,没有带参数的是不会被调用的,如果你只重写了一个init方法,那么这个方法会被执行的。

之后就是你请求servlet的映射地址的时候会只用响应的doGet或doPost方法,你有了这个流程了,你怎么写都行啊。

还有,你要在启动的时候调试进入,你就得咋MyEclipse里面以调试模式启动tomcat,之前还得在servlet类的位置打上断点。
全部回答
  • 1楼网友:山君与见山
  • 2021-01-12 02:25
有参数的init应该是这个样子的:public void init(ServletConfig config)throws ServletException
你写的init压根和父类的init没有任何关系,因为参数是不一样的。
所以启动的时候,动用的还是父类的public void init(ServletConfig config)throws ServletException方法,并不会调用你自己写的init方法。
还有一点就是,有请求才会有request,你在启动的时候压根就没有用户请求,哪来的request呢?
  • 2楼网友:長槍戰八方
  • 2021-01-12 01:50
.你这不是直接运行而是初始化把........
这个可以通过上下文初始化来实现

在web.xml里添加



你的listener class的完整名称(包括包明)



--------------------------------------------------------
写一个listener
import javax.Servlet.*;

public class MyContexListener implement ServletContextListener
{
public void contextInitialized(ServletContextEvent event)
{
ServletContext sc = event.getServletContext();
//已经得到ServletContext了 怎么往session里放属性就不需要我多解释了把..
}

public void contextDestroyed (ServletContextEvent event)
{
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息