JavaWeb(Servlet的原理 XML配置 生命周期 创建 @WebServlet注解 idea代码模板修改)

Servlet

概念:
	运行在服务端的小程序
	其实是定义了一个Java类,可以被浏览器访问的规则 是一个接口
	
作用:
	接收请求 
	处理请求 
	做成响应	

Servlet的快速入门

1.创建web项目
2.新建一个类 实现Servlet接口
3.重写Servlet接口中的方法
4.配置Servlet WEB-INF/web.xml
<servlet>
    <!-- 配置servlet名称 自己起一个-->
    <servlet-name>myServlet</servlet-name>
    <!-- 配置Servlet的 全路径 -->
    <servlet-class>com.edu.web.HelloServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>myServlet</servlet-name>
    <!-- 配置servlet的映射路径,注意前面的斜杠不要少了 
	可以是多级目录 一个Servlet可以配置多个映射路径 -->
    <url-pattern>/hello</url-pattern>
    <url-pattern>/aa/bb/cc</url-pattern>
    <url-pattern>/bbbb</url-pattern>
</servlet-mapping>

启动项目
打开浏览器进行访问

Servlet原理

Servlet的创建 管理 和销毁
是由服务器来处理的 你只是使用

服务器通过反射创建servlet对象
再通过反射调用servlet中的方法
当服务器开启 会加载web.xml中的配置

Servlet生命周期方法

生命周期: 
	一个事务从生到死所经历的阶段
	创建---对外提供服务---销毁
	
在不同的阶段 就会调用不同的生命周期方法
	Servlet对象创建好之后
    当第一次请求时 会调用init()方法
    	一般会在该方法中做一些准备工作
	当不断请求时 会调用service()方法
		每次请求 都会执行
		做核心的业务逻辑
	当servlet对象销毁时 会调用destroy()方法
		正常退出服务器
		做一些善后工作

配置欢迎页面

<welcome-file-list>
    <welcome-file>code.jsp</welcome-file>
</welcome-file-list>

用户体验问题load-on-startup

init()方法
	当用户第一次请求时 才会调用
	如果init()方法中的业务比较耗时
	用户就需要等待半天 用户体验不好
	为了让init()方法 能够在服务器开启时就执行
	这样就能够提高用户的体验
	可以配置init()方法的调用时机 让其提前加载
	
	WEB-INF/web.xml
	<servlet>
        <!-- 配置Servlet创建时机
            默认值是-1
            配置成非负的值 就会在服务器开启时
            就会创建Servlet对象
        	数字越小 优先级越高    
		-->
		<load-on-startup>0</load-on-startup>
	</servlet>	
	

ServletConfig配置对象

ServletConfig配置对象
由服务器创建 作为init()的形参 传递使用

查看Tomcat源码 找到ServletConfig接口的子类

配置对象中的几个方法:
	<!-- 配置初始化参数 -->
	<init-param>
        <param-name>username</param-name>
        <param-value>jack</param-value>
    </init-param>
    
getInitParameter(String name)
获取初始化值
getServletName()
获取Servlet的名字
getServletContext()
获取全局上下文对象

细节:
	<init-param>必须在<load-on-startup>前面配置

创建Servlet的几种方式

方式一
	创建一个类 实现servlet接口 重写5个抽象方法

方式二
	创建一个类 继承GenericServlet类	
	重写service()	
		
方式三: 最终版
	创建一个类 继承HttpServlet类
	重写doGet() doPost()

实现servlet接口

public class HelloServlet implements Servlet {

    private ServletConfig servletConfig;

    public HelloServlet() {
        System.out.println("Servlet构造方法调用了");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.servletConfig = servletConfig;
        
        //来获取 web.xml中配置的初始化参数
        String username = servletConfig.getInitParameter("username");
        String password = servletConfig.getInitParameter("password");
        System.out.println(username + "====" + password);
       
        //获取Servlet的名字
        String servletName = servletConfig.getServletName();
        System.out.println(servletName);
        
        //org.apache.catalina.core.StandardWrapperFacade@2983b225
        System.out.println("ServletConfig 配置对象:" + servletConfig);
        System.out.println("默认情况下 当第一次请求时 会调用init()方法");

    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service()方法 每次请求 都会执行");

        //来获取 web.xml中配置的初始化参数

        //通过全局变量来获取
        //String username = servletConfig.getInitParameter("username");
        //String password = servletConfig.getInitParameter("password");

        //通过方法来获取
        ServletConfig servletConfig = this.getServletConfig();
        String username = servletConfig.getInitParameter("username");
        String password = servletConfig.getInitParameter("password");
        System.out.println(username + "====" + password);
    }

    @Override
    public void destroy() {
        System.out.println("destroy()方法 正常退出服务器 做一些善后工作");
    }

    //获取 ServletConfig 配置对象
    @Override
    public ServletConfig getServletConfig() {
        return this.servletConfig; //返回配置对象
    }

    //获取Servlet的版本,以及作者,没啥用处,但是你得空实现
    @Override
    public String getServletInfo() {
        return null;
    }
}

创建Servlet最终版

public class  MyServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Post请求来了");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Get请求来了");
        //注意加上这行
        this.doPost(req, resp);
    }
}

idea快捷创建Servlet(代码模板)

请添加图片描述
请添加图片描述

注解方式

//urlPatterns="/hehe"   配置Servlet的映射路径
//value="/haha"  配置Servlet的映射路径
//urlPatterns={"/hehe","/haha"} 配置多个映射路径
@WebServlet(name = "MyServlet2")
public class MyServlet2 extends HttpServlet {
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

web工程jar包的位置

WEB-INF/lib

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值