Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器上的组件.
public class DataServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
<servlet>
<servlet-name>TestServletservlet-name>
<servlet-class>com.jd.TestServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>TestServletservlet-name>
<url-pattern>/TestServleturl-pattern>
servlet-mapping>
映射步骤:首先浏览器通过127.0.0.1/test/TestServlet来找到web.xml中的url-pattern。2.匹配到了url-pattern后,就会找到第二步servlet的名字TestServlet,知道了名字,就可以通过servlet-name找到第三步,也就能够知道servlet的位置了。然后到其中找到对应的处理方式进行处理。
init( ),service( ),destroy( )是Servlet生命周期的方法。代表了Servlet从“出生”到“工作”再到“死亡 ”的过程。Servlet容器(例如TomCat)会根据下面的规则来调用这三个方法:
//sevlet对象属于实例(程序运行结束之前,缓存中只有一个对象存在)
public TestServlet() {
//用于成员变量赋值,会触发对象创建
//默认情况下,第一次使用该Servlet时创建对象
//如果配置1,则servlet对象随着tomcat的启动而创建
super();
}
public void init() throws ServletException {
//servlet对象创建后,该方法立即执行,用于获取web.xml中的数据。
//由于servlet方法式单例,仅仅创建一次,所以该方法只执行一次
super.init();
//System.out.println("init"+this);
String name = getServletContext().getInitParameter("name");//获取web.xml中多个Servlet共享的值
System.out.println(name);
String mobile = getInitParameter("mobile");//获取自己Servlet的值
System.out.println(mobile);
}
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
//System.out.println("init(ServletConfig config)"+this);
String name = config.getServletContext().getInitParameter("name");//获取web.xml中多个Servlet共享的值
System.out.println(name);
String mobile = config.getInitParameter("mobile");//获取自己Servlet的值
System.out.println(mobile);
}
web.xml中配置:
<context-param>
<param-name>nameparam-name>
<param-value>Jimmyparam-value>
context-param>
<servlet>
<servlet-name>TestServletservlet-name>
<servlet-class>com.zzu.servlet.TestServletservlet-class>
<init-param>
<param-name>mobileparam-name>
<param-value>110param-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>TestServletservlet-name>
<url-pattern>/TestServleturl-pattern>
servlet-mapping>
//任何请求优先到达service方法,通过该方法确定执行doGet还是doPost
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(req, resp);//将这行代码注释将不执行doget或dopost方法
}
//a连接 form指定method标签属性get,异步不写或者指定为get
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
//form指定method标签属性get,异步指定为get
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
//Servlet对象销毁之前调用,用于释放资源。由于servlet方法式单例,仅仅创建一次,所以该方法只执行一次
//Tomcat服务器关闭时调用,项目重新发布前调用
@Override
public void destroy() {
super.destroy();
System.out.println("destroy"+this);
}
Service() 方法:
不管是 get 方式或是 post 方式的请求,如果 自己写的Servlet 类中有 service() 方法,则优先调用 Service 方法进行处理。(如果覆写的service方法中调用了父类的servic()方法super.service(req,resp),则service方法处理完后,会再根据请求方式相应的doPost或是doGet方法执行)。
doGet() 方法:
在没有 service 方法的情况下如果是 get 方式的请求所调 用的处理请求的方法
doPost() 方法:
在没有 service 方法的情况下如果是 post 方式的请求所调 用的处理请求的方法
在Servlet中,"/“代表Web应用的根目录。
“./” 代表当前目录,”…/"代表上级目录
动态获取根目录目录:
request.getContextPath()