Servlet 基础学习

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继承体系

// 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() {

    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值