zoukankan      html  css  js  c++  java
  • 0308 Servlet类

    在Servlet类中有三个方法

    1、init(ServletConfig config) 在servlet对象创建的时候执行

    该方法中传入了一个ServletConfig 对象参数,那么该对象是Servlet配置对象,里面封装的是Servlet类中的配置信息,

    通过getInitParameter方法获取到在配置文件中的配置信息,getServletContext方法创建一个ServletContext对象

    2、service(ServletRequest request,ServletResponse response)每次请求都会执行

    ServletRequest 代表请求封装的都是http请求信息

    ServletResponse 代表响应,封装的都是响应信息

    3、destroy() servlet销毁的时候执行

    代码展示 用实现接口的方法

    public class MyServlet implements Servlet{
    	public ServletConfig getServletConfig() {
    		return null;
    	}
    	public String getServletInfo() {
    		return null;
    	}
    	public void init(ServletConfig arg0) throws ServletException {
    		//ServletConfig 是Servlet配置信息
    		System.out.println("MyServlet创建了");
    		//获取初始化参数
    		String init=arg0.getInitParameter("driver");
    		System.out.println(init);
    		//获取Servletcontext对象
    		ServletContext context=arg0.getServletContext();
    		
    	}
    	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
    		System.out.println("MyServlet被访问了");
    		
    	}
    	public void destroy() {
    		System.out.println("MyServlet被销毁了");
    	}
    
    }
    

      xml文件中配置信息

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>WEB01</display-name>
      <servlet>
      	<servlet-name>MyServlet</servlet-name>
      	<servlet-class>com.oracle.demo01.MyServlet</servlet-class>
      	<!-- Servlet初始化参数 -->
      	<init-param>
      		<param-name>driver</param-name>
      		<param-value>com.oracle.jdbc.Driver</param-value>
      	</init-param>
      	<!-- 设置服务器启动时创建该类对象 内写优先级 -->
      	<!-- <load-on-startup>3</load-on-startup> -->
      </servlet>
      <servlet-mapping>
      	<servlet-name>MyServlet</servlet-name>
      	<url-pattern>/MyServlet</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
    </web-app>
    

      当客户端请求时 的运行结果

     流程图之 解析请求地址

     运行流程

    servlet声明周期

    Servlet何时创建 默认(服务器启动时)第一次访问servlet时创建该对象(也可以设置启动服务器的时候就创建 就是在xml文件中servlet标签中加一个load-on-startup 标签 内写优先级 优先级高先执行

    Servlet何时销毁 服务器关闭servlet就销毁了

    每次访问必然执行的方法 service(ServletRequest req, ServletResponse res)方法

    问题:对XXXServlet进行了10次访问,init(),destory(),service(),doGet(),doPost()      一共执行力多少次?request对象创建几个?response创建几个

    init() 一次 destory() 一次  service() 十次  doGet() 十次 doPost()十次  request对象创建10个 response创建10个

    那我们使用实现接口的方式去实现 那这样创建我们要覆盖的方法过多,那么在实际开发中我们应用创建类去继承HttpServlet类 重写doGet和doPost方法

    代码展示

    public class Servlet01 extends HttpServlet{
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		System.out.println("servlet被访问了");
    		
    	}
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		doGet(req, resp);
    	}
    }
    

      xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>WEB02</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <servlet>
        <servlet-name>Servlet01</servlet-name>
        <servlet-class>com.oracle.web.Servlet01</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>Servlet01</servlet-name>
        <url-pattern>/Servlet01</url-pattern>
      </servlet-mapping>
    </web-app>
    

     我们也可以有更简便的方法,我们不创建类了 我们直接创建servlet

    在src下包名上右击---new---servlet

     那么在xml文件中自动添加关于servlet02的配置信息

    当然我们创建的这个servlet02格式很乱并不是我们想要的格式 那我们可以配置一下

    首先 windows-->preperence

     

     这样我们创建的servlet就是我们想要的格式了

    package com.oracle.web;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Servlet02 extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		response.getWriter().write("hello dandan...");
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    }
    

      看一下自动生成的xml文件内容

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>WEB02</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <servlet>
        <servlet-name>Servlet01</servlet-name>
        <servlet-class>com.oracle.web.Servlet01</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>Servlet01</servlet-name>
        <url-pattern>/Servlet01</url-pattern>
      </servlet-mapping>
      <servlet>
        <description></description>
        <display-name>Servlet02</display-name>
        <servlet-name>Servlet02</servlet-name>
        <servlet-class>com.oracle.web.Servlet02</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>Servlet02</servlet-name>
        <url-pattern>/Servlet02</url-pattern>
      </servlet-mapping>
    </web-app>
    

      运行结果

    xml文件中基本配置中

     其中url-pattern的配置方式

    (1)完全匹配 就是url-pattern标签中写的什么 当服务器请求的时候就得写什么一点都不能错 才能访问到

    (2)目录匹配 格式:/虚拟的目录../*   *代表任意 只要前边虚拟目录对 后边可以随便写 都可以访问到

    (3)扩展名匹配 格式:*.扩展名 前边可以随便写,但是后边的扩展名必须跟这个一样 才能访问

    欢迎页面

    我们发现xml文件中自动有一个 welcome-file-list标签 

    有这些内容

    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>

    当我们浏览器地址栏 只输入 项目名称 例如:http://localhost:8080/WEB02/,那么就会查找xml文件中的welcome-file-list标签中的这些内容,如果项目中没有新建上述标签中的文件 就会报404,如果有 就会显示这文件中的内容

    例如 我们在Web-content文件夹下创建一个index.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    aaa
    </body>
    </html>
    

      那当我们浏览器请求的时候

     那我们说 如果把welcome-file-list标签中的<welcome-file>index.jsp</welcome-file>删掉 ,浏览器中还是会正常显示,因为先查找当前项目中的xml文件 如果没有这个,那就去全局xml文件中查找,那如果有就显示,没有就404

  • 相关阅读:
    ajax参考增删改查
    linux 断网 扫描基本命令
    linux 基本命令大全
    开发者用的linux系统推荐
    python DRF获取参数介绍
    python DRF操作流程
    python 异常处理函数--raise
    DRF-Rest_Framework 学习文档
    前端框架VUE
    python Django rest-framework 创建序列化工程步骤
  • 原文地址:https://www.cnblogs.com/-gongxue/p/14498910.html
Copyright © 2011-2022 走看看