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

文章目录

    • Servlet
    • Servlet的快速入门
    • Servlet原理
    • Servlet生命周期方法
    • 配置欢迎页面
    • 用户体验问题load-on-startup
    • ServletConfig配置对象
    • 创建Servlet的几种方式
      • 实现servlet接口
      • 创建Servlet最终版
      • idea快捷创建Servlet(代码模板)
      • 注解方式
    • web工程jar包的位置

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(代码模板)

JavaWeb(Servlet的原理 XML配置 生命周期 创建 @WebServlet注解 idea代码模板修改)_第1张图片
JavaWeb(Servlet的原理 XML配置 生命周期 创建 @WebServlet注解 idea代码模板修改)_第2张图片

注解方式

//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

你可能感兴趣的:(JavaWeb,servlet,服务器,java)