Servlet(全名:serve applet)
package web.servlet;
import javax.servlet.*;
import java.io.IOException;
public class ServletDemo01 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello,servlet");
System.out.println("我在这里");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
注意:service()方法是提供服务的地方
在根标签web-app下添加下方的代码
<!--配置servlet-->
<servlet>
<servlet-name>demo01</servlet-name>
<servlet-class>web.servlet.ServletDemo01</servlet-class>这是全类名。
</servlet>
<servlet-mapping>
<servlet-name>demo01</servlet-name>
<url-pattern>/demo01</url-pattern> 此处是映射的访问目录
</servlet-mapping>
当我们浏览器访问http://localhost:80/demo01时会走以下流程(demo01前面的是applicaton context路径在tomcat小结中有提到):
首先服务器接到请求后解析出URL路径,获取访问的Servlet的资源路径。
1, tomcat会在web.xml中找servlet-mapping 下的url-pattern标签体内容有没有资源路径的对应值。有的话就找出servlet-name
2,然后找出servlet 下的servlet-name 标签体内容和1中name相等的 servlet-class
3,*tomcat会将全类名对应的字节码文件加载到内存。Class.forName();得到类对象cls
*创建对象 cls.newInstance()
*调用方法 service
声明周期方法:
init: 执行一次 说明是单例模式,内存中只会存在一个本类对象。
*默认是在第一次访问时执行。但是可以自行配置执行时机->在<servlet>标签下配置
<load-on-startup>-1</load-on-startup> 本标签决定"init" 方法执行时机 不加此标签默认值为负数,
此时在第一次访问的时候执行,值为正数时在服务器启动时执行。
service 在服务时执行可以执行多次。
*在多人同时访问时,存在线程安全问题,
*解决方案:尽量不定义成员变量,及时定义了也不要修改值。可以在方法中定义局部变量。
destroy 在服务器被正常关闭时执行 ,一般用来释放资源。
上述中是否觉得配置xml文件复杂的呢,所以在Servlet3.0后的版本引入了Annotation WebServlet 其最重要的属性String[] urlPatterns default{} 所以直接在类加WebServlet(urlPatterns="application Context") 可以简化为WebServlet("application context") 是不是相对简单了许多呢?
原文:https://www.cnblogs.com/hellobeicheng/p/13280432.html