• JavaWeb(Servlet的原理 配置 生命周期 创建 idea代码模板修改)


    Servlet

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

    Servlet的快速入门

    1.创建web项目
    2.新建一个类 实现Servlet接口
    3.重写Servlet接口中的方法
    4.配置Servlet WEB-INF/web.xml
    <servlet>
        
        <servlet-name>myServletservlet-name>
        
        <servlet-class>com.edu.web.HelloServletservlet-class>
    servlet>
    
    <servlet-mapping>
        <servlet-name>myServletservlet-name>
        
        <url-pattern>/hellourl-pattern>
        <url-pattern>/aa/bb/ccurl-pattern>
        <url-pattern>/bbbburl-pattern>
    servlet-mapping>
    
    启动项目
    打开浏览器进行访问
    

    Servlet原理

    Servlet的创建 管理 和销毁
    是由服务器来处理的 你只是使用
    
    服务器通过反射创建servlet对象
    再通过反射调用servlet中的方法
    当服务器开启 会加载web.xml中的配置
    

    Servlet生命周期方法

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

    配置欢迎页面

    <welcome-file-list>
        <welcome-file>code.jspwelcome-file>
    welcome-file-list>
    

    用户体验问题load-on-startup

    init()方法
    	当用户第一次请求时 才会调用
    	如果init()方法中的业务比较耗时
    	用户就需要等待半天 用户体验不好
    	为了让init()方法 能够在服务器开启时就执行
    	这样就能够提高用户的体验
    	可以配置init()方法的调用时机 让其提前加载
    	
    	WEB-INF/web.xml
    	<servlet>
            
    		<load-on-startup>0load-on-startup>
    	servlet>	
    	
    

    ServletConfig配置对象

    ServletConfig配置对象
    由服务器创建 作为init()的形参 传递使用
    
    查看Tomcat源码 找到ServletConfig接口的子类
    
    配置对象中的几个方法:
    	
    	<init-param>
            <param-name>usernameparam-name>
            <param-value>jackparam-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

  • 相关阅读:
    【无代码爬虫】web scraper 之 采集多个内容
    Java毕设项目——智能仓储系统(java+SSM+Maven+Mysql+Jsp)
    商陆花、秦丝、管家婆,到底服装加盟管理软件哪家强?来看排行榜
    简述 AOP 动态代理
    计算机毕设(附源码)JAVA-SSM基于的校园商城
    Anylink 安装教程 及 客户端之间互联
    MySQL高级篇
    Linux | gdb的基本使用
    简述Mysql中索引类型及对数据库的性能的影响
    mysql计算2个日期的月份差和天数差
  • 原文地址:https://blog.csdn.net/m0_51318597/article/details/127093531