java中servlet使用和配置

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

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java ServletJava EE的一个基本组件,主要用于处理Web应用程序的请求和响应。Servlet运行在Web服务器上,它接收来自Web浏览器的请求,并根据请求生成响应数据,将响应发送回客户端浏览器。下面是Java Servlet使用步骤: 1. 编写Servlet类:Java Servlet类是一个Java类,它必须继承自javax.servlet.http.HttpServlet类,并实现doGet或doPost方法,用于处理HTTP GET或POST请求。 2. 配置Servlet:在Web应用程序,需要在web.xml文件Servlet进行配置,指定Servlet类的映射路径、名称和URL模式等信息。 3. 部署Servlet:将Servlet类编译成.class文件,并将其部署到Web服务器的webapps目录下。 4. 启动Web服务器:启动Web服务器,使其可以接收来自客户端的请求。 5. 访问Servlet:在Web浏览器输入Servlet的URL地址,即可向Servlet发送HTTP请求,并接收到Servlet返回的响应数据。 在Servlet,可以使用HttpServletRequest和HttpServletResponse对象来获取请求和响应数据。可以使用这些对象来获取请求参数、请求头、Cookie等信息,并将响应数据写入到响应流Servlet还支持会话管理、重定向、转发等操作,可以通过这些操作来实现Web应用程序的各种功能。 总之,Java Servlet是一个非常重要的Java EE组件,它可以用于处理Web应用程序的请求和响应,是Java Web开发不可或缺的一部分。掌握Java Servlet使用可以帮助我们更好地开发Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值