java中servlet使用和配置

该博客主要围绕Java中Servlet的使用和配置展开,虽未给出具体内容,但可知聚焦于Servlet这一后端开发关键技术,涉及如何在Java里正确使用Servlet以及对其进行合理配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.datou.javaweb;

import com.sun.xml.internal.xsom.impl.scd.Iterators;

import javax.servlet.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;

/*
 * Servlet 的生命周期
 * Tomcat是一个Servlet容器,管理整个Servlet生命周期,自己创建Servlet实例并且调用Servlet的相关生命周期方法
 * Servlet容器是运行 Servlet ,Jsp,Filter等软件环境
 *Servlet生命周期相关方法:
 *  构造器:第一次请求servlet时,创建servlet实例调用构造器只被调用一次,说明servlet是单列模式
 *  init: 只被调用一次,在创建好实例时候被调用,用于初始化当前servlet,他有对应参数是构造器不及的所以有init方法
 *  service: 被多次调用,每次请求都会调用service方法,实际用于响应请求
 *  destroy: 只被调用一次,在当前所在的web应用被卸载时候调用,相当于释放当前Servlet所占资源
 *
 * */
public class FirstWeb implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("servlet init");
        //获取在web.xml中配置的init-param参数通过param-name来获取指定的参数
        String user = servletConfig.getInitParameter("user");
        System.out.println(user);

        //获取所有的参数名,然后通过遍历得到对应一个一个的值
        Enumeration<String> names = servletConfig.getInitParameterNames();
        while (names.hasMoreElements()) {
            String name = names.nextElement();
            String v = servletConfig.getInitParameter(name);
            System.out.println("name" + name + "vulue" + v);
        }

        //获取web.xml中servlet-name的值
        String servletName = servletConfig.getServletName();
        System.out.println(servletName);

        //ServletContext
        //1. 可以由ServletConfig获取
        //2.该对象代表当前的web应用,可以认为 ServletContext是当前web应用的一个大管家,
        // 可以从中获取到web应用各个方面的信息

        //获取ServletContext对象
        ServletContext context = servletConfig.getServletContext();

        //获取web.xml web应用的context-param的param-name对应参数的值
        String a = context.getInitParameter("address");
        System.out.println(a);

        //获取web.xml中所以web应用的参数名然后逐个获取对应的值
        Enumeration<String> b = context.getInitParameterNames();
        while (b.hasMoreElements()) {
            String c = b.nextElement();
            System.out.println("name" + c + "v" + context.getInitParameter(c));
        }

        //获取web应用某个文件在web服务器上的绝对路径,而不是部署前的路径
        String repath = context.getRealPath("/37.jpg");
        System.out.println(repath);

        //获取当前web应用的名称
        String contentName = context.getContextPath();
        System.out.println(contentName);

        //获取当前web应用某一个文件对应的输入流
        InputStream s = context.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
        System.out.println(s);
    }


    @Override
    public ServletConfig getServletConfig() {
        System.out.println("servlet config");

        return null;
    }

    //这两个 ServletRequest,ServletResponse由Tomcat服务器帮助实现
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //servletRequest 封装了请求信息,可以从中获取任何的请求信息
        //servletResponse 封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现

        //根据请求参数的名字返回值 名字对应表单name属性
        String a = servletRequest.getParameter("user");
        String b = servletRequest.getParameter("pwd");

        //根据请求参数名字返回 请求参数对应的字符串数组 ,之所以是数组在多选时候是数组列如表单的CheckBox
        String[] c = servletRequest.getParameterValues("user");
        for (String k : c) {
            System.out.println(k);
        }
        System.out.println("servlet service");

        //返回form表单对应的所有name值类似于ServletConfig中的getInitParameterNames一样
        Enumeration<Stringt> s = servletRequest.getParameterNames();

        //返回表单对应的key 和 value
        Map<String, String[]> m = servletRequest.getParameterMap();
        for (Map.Entry<String, String[]> entry : m.entrySet()) {
            System.out.println(entry.getKey() + ":" + Arrays.asList(entry.getValue()));
        }


    }

    @Override
    public String getServletInfo() {
        System.out.println("servlet getservleinfo");

        return null;
    }

    @Override
    public void destroy() {
        System.out.println("servlet destory");


    }

    public FirstWeb() {
        System.out.println("构造器");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--配置初始页面 可以配置多个<welcome-file> 他会依次寻找-web根目录下的页面-->
    <welcome-file-list>
        <welcome-file>login.html</welcome-file>
        <!--<welcome-file></welcome-file>-->
    </welcome-file-list>
    <!--配置当前web应用的初始化参数 多个参数配置多个context-param-->

    <!--context-param和init-param区别-->
    <!--context-param初始化参数可以给所有的servlet用,而init-param只有当前servlet可以获取-->
    <context-param>
        <!--参数名-->
        <param-name>address</param-name>
        <!--参数值-->
        <param-value>上海市宝山区</param-value>
    </context-param>

    <context-param>
        <param-name>as</param-name>
        <param-value>aaaaa</param-value>
    </context-param>

    <!--配置映射Servlet -->
    <servlet>
        <!--Servlet注册名-->
        <servlet-name>firstWeb</servlet-name>
        <!--Servlet全类名,也就是对应位置-->
        <servlet-class>com.datou.javaweb.FirstWeb</servlet-class>
        <!--配置Servlet初始化参数 该节点必须要放在load-on-startup节点的前面 配置多个参数需要配置多个init-param-->
        <init-param>
            <!--参数名-->
            <param-name>age</param-name>
            <!--参数值-->
            <param-value>18</param-value>
        </init-param>
        <init-param>
            <param-name>user</param-name>
            <param-value>admin</param-value>
        </init-param>

        <!--可以指定Servlet 被创建的时机 若为负数则在第一次请求时被创建,若为0或正数则在当前web应用被servlet容器加载时创建
        且数字越小越早被创建-->
        <load-on-startup>1</load-on-startup>

    </servlet>


    <!--通过对Servlet名映射对应url,同一个servlet名称可以被映射到多个servlet-mapping上及servlet-name可以相同
    在使用servlet映射到url中可以使用*通配符,但是只能有两种固定格式。一种格式是"*.扩展名",带扩展名不能加斜杠/,另一种格式是以正斜杠"/"开头并以"/*"结尾
    也就是带*的有两种写法,也就是
     <url-pattern>/*</url-pattern>
     <url-pattern>*.do</url-pattern>
     以下不合法 既带/又带扩展名的不合法
      <url-pattern>/*.action</url-pattern>
    -->
    <servlet-mapping>
        <!--需要和某一个servlet节点的子节点servlet-name节点的文本一致-->
        <servlet-name>firstWeb</servlet-name>
        <!--映射具体的访问虚拟路径其中/代表当前web应用的根目录 -->
        <url-pattern>/first</url-pattern>
    </servlet-mapping>
</web-app>

<!--jsp的本质就是一个jsp servlet-->

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值