1.Servlet_概述
什么是Servlet?
是个接口,里面定义了抽象方法,其实就是在定义一个java文件能够被tomcat执行的规则!!!!!
2.Servlet_快速入门
步骤?
1.IDEA集成tomcat环境;
2.创建一个web项目;
3.自定义类,实现servlet接口,重写service方法;
4.在WEB-INF/web.xml配置文件中:
自动义命名
实现severlet类的全类名
<servlet-mapping>
<servlet-name>自定义命名</servlet-name>
<url-pattern>/资源路径</url-pattern>
</servlet-mapping>
5.把web项目部署到tomcat上,并启动tomcat;
6.在浏览器端进行访问;
3.Servlet_执行原理
当浏览器访问:localhost:8080/day13_tomcat/demo1
查找的顺序?
1.通过ip(localhost)找到对应的服务器计算机;
2.通过端口号(8080)找到服务器计算机上的软件(tomcat);
3.tomcat解析路径,通过/day13_tomcat (虚拟目录)找到web项目,解析该项目中的web.xml配置文件;
4.tomcat解析路径,通过/demo1(资源路径)去查找;
5.tomcat通过找
6.通过找到
7.tomcat通过反射把对应的类加载进内存,创建对象,调用service方法;
***************************
<url-pattern>必须以/开头;它可以叫做资源的访问路径;
4.Servlet_生命周期方法
init方法什么时候执行?
在servlet对象被创建(在内存中只会创建一个)的时候执行,只执行一次;
service方法什么时候执行?
每一次浏览器访问是,都会执行,执行多次
destroy方法什么时候执行?
在servlet销毁前执行,只执行一次;
5.Servlet_生命周期详解
Servlet对象创建的时机?
默认时机:
浏览器第一次访问该Servlet时,创建这个Servlet的对象;
服务器启动时创建:
在web.xml中配置:
正整数
多个用户同时访问一个Servlet资源,会有什么问题?
线程安全问题。
线程安全问题产生的原因:
1.多线程程序;
2.多个线程需要有共享资源;
3.多个线程同时对共享资源进行增删改的操作!!!
6.Servlet_3.0注解配置
通过注解怎么配置一个Servlet?
@WebServlet(urlPatterns=“资源的访问路径”)
由于@WebServlet中,urlPatterns属性和value属性的作用是一样的;
@WebServlet(value=“资源的访问路径”)
由于只给value属性赋值,value可以省略;
@WebServlet(“资源的访问路径”)
7.IDEA与tomcat相关配置
项目是部署到哪个tomcat下了(了解)?
使用IDEA启动tomcat时,会把本地安装的tomcat复制一份,专门供IDEA来使用。
真正在tomcat上执行的项目路径在哪里?
project目录/out/artifacts/项目
WEB-INF目录下的资源,有什么特点??
浏览器不能直接访问!!!!!;
7.1Servlet_体系结构
Servlet的继承体系?
Servlet接口:
GenericServlet实现类:
HttpServlet类;
程序员自己定义的类;
自定义Servlet实现类对象为什么要继承HttpServlet?
因为HttpServlet对http协议相关操作做了封装;我们自定义的类继承后,就可以避免重写这些代码;
简化书写。
8.Servlet_urlpartten配置
定义匹配路径的书写方式?
/xxx;
/xxx/xxx;
*.do;
/*;
/
***************路径优先级******************
1.如果能进行精确匹配,优先执行精确匹配的结果,如果精确匹配失败。会进行模糊匹配;
2. /* > *.do > /
3.如果项目中没有找到任何一个路径匹配目标路径,那么,最终/会匹配;
// servlet规则
// servlet继承体系
// servlet线程安全问题
/**
* 通过注解怎么配置一个Servlet?
* @WebServlet(urlPatterns="资源的访问路径")
* 由于@WebServlet中,urlPatterns属性和value属性的作用是一样的;
* @WebServlet(value="资源的访问路径")
* 由于只给value属性赋值,value可以省略;
* @WebServlet("资源的访问路径")
*
* 真正在tomcat上执行的项目路径在哪里?
* project目录/out/artifacts/项目
*/
//@WebServlet(urlPatterns = "/demo01")
//@WebServlet(value = "/demo01")
//@WebServlet("/demo01")
public class ServletDemo 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("继承Servlet需要重新所有的抽象方法");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
* 真正在tomcat上执行的项目路径在哪里?
* project目录/out/artifacts/项目
*/
//@WebServlet(urlPatterns = "/demo01")
//@WebServlet(value = "/demo01")
//@WebServlet("/demo01")
public class ServletGenericServlet extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("继承GenericServlet可以省去书写其他方法");
}
}
/**
因为HttpServlet对http协议相关操作做了封装;我们自定义的类继承后,就可以避免重写这些代码;
定义匹配路径的书写方式?
/xxx;
/xxx/xxx;
*.do;
*
* ***************路径优先级******************
* 1.如果能进行精确匹配,优先执行精确匹配的结果,如果精确匹配失败。会进行模糊匹配;
* 2. /* > *.do > /
* 3.如果项目中没有找到任何一个路径匹配目标路径,那么,最终/会匹配;
*
*/
//@WebServlet("*.dome01")
//@WebServlet("/demo/demo01")
//@WebServlet("/demo01")
public class ServletHTTPServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
}
/**
* Servlet快速入门
*/
public class ServletDemo1 implements Servlet {
/**
* 初始化方法,在servlet对象创建时只会执行一次,
* @param servletConfig
* @throws ServletException
*/
@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");
}
@Override
public String getServletInfo() {
return null;
}
/**
* 在servlet摧毁前执行,只会执行一次
*/
@Override
public void destroy() {
}
}