访问接口:

通过 IDEA 查看:
打开 Tomcat 运行配置:Run → Edit Configurations。
选择你的 Tomcat 服务器,在 Deployment 选项卡中查看 Application context 字段的值。
在这里插入图片描述
在这里插入图片描述

  1. javax.servlet.Servlet 中的方法


import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;



//@WebServlet(urlPatterns = {"/demo1","/demo2"})
//@WebServlet(value = {"/demo2"})
@WebServlet("/demo3")
//@WebServlet("*.do")
//@WebServlet("/day18/ServletDemo")
public class ServletDemo1 implements Servlet {
    /**
     * 初始化servlet的方法
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    /**
     * 获取一个servlet的配置对象
     * @return
     */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * 提供服务的方法
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service被调用了0... ...");
//        getMethod();


    }

    /**
     * 获取servlet信息的一个方法
     * @return
     */
    @Override
    public String getServletInfo() {
        return null;
    }

    /**
     * 销毁的方法:释放资源
     */
    @Override
    public void destroy() {
    }
}

  1. 查看请求头中的一些信息

doPost 是Post方法调用后会执行的
doGet 是Get方法调用后会执行的

package com.demo.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/servletDemo2")
public class ServletDemo2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 获取请求行数据
        //			* GET /day14/demo1?name=zhangsan HTTP/1.1
        //			* 方法:
        //				1. 获取请求方式 :GET
        //					* String getMethod()
        //				2. (*)获取虚拟目录:/day14
        //					* String getContextPath()
        //				3. 获取Servlet路径: /demo1
        //					* String getServletPath()
        //				4. 获取get方式请求参数:name=zhangsan
        //					* String getQueryString()
        //				5. (*)获取请求URI:/day14/demo1
        //					* String getRequestURI():		/day14/demo1
        //					* StringBuffer getRequestURL()  :http://localhost/day14/demo1
        //
        //					* URL:统一资源定位符 : http://localhost/day14/demo1
        //					* URI:统一资源标识符 : /day14/demo1
        //
        //				6. 获取协议及版本:HTTP/1.1
        //					* String getProtocol()
        //
        //				7. 获取客户机的IP地址:
        //					* String getRemoteAddr()

        //1. 获取请求方式 :GET
        String method = request.getMethod();
        System.out.println(method);
        //2. * 获取虚拟目录:
        String contextPath = request.getContextPath();
        System.out.println(contextPath);
        //3. 获取Servlet路径:
        String servletPath = request.getServletPath();
        System.out.println(servletPath);
        //4. 获取get方式请求参数:
        String queryString = request.getQueryString();
        System.out.println(queryString);
        //5. (*)获取请求URI:
        String requestURI = request.getRequestURI();
        System.out.println(requestURI);
//        StringBuffer requestURL = request.getRequestURL();
//        System.out.println(requestURL.toString());
        //6. 获取协议及版本:
        String protocol = request.getProtocol();
        System.out.println(protocol);
        //7. 获取客户机的IP地址:
        String remoteAddr = request.getRemoteAddr();
        System.out.println(remoteAddr);
        Enumeration<String> headerNames = request.getHeaderNames();
        //2、遍历
        while(headerNames.hasMoreElements()){
            String name = headerNames.nextElement();
            //通过name获取value
            String value = request.getHeader(name);
            System.out.println(name + "---" + value);
        }
        //1、获取一个BufferedReader字符缓冲读流
        BufferedReader reader = request.getReader();
        //2、循环读数据
        String line = null;
        while((line = reader.readLine())!=null){
            System.out.println(line);
        }
    }
}

  1. 获取请求参数

http://localhost:8080/day18_war_exploded/servletDemo3?username=21312&hoppy=2,2,2

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;

@WebServlet("/servletDemo3")
public class ServletDemo3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //根据参数名称获取参数值
        String username = request.getParameter("username");
        System.out.println(username);
        System.out.println("____________________");
        //根据参数名称获取参数值的数组
        String[] hoppies = request.getParameterValues("hoppy");
        System.out.println(String.join(",", hoppies));
        System.out.println("____________________");
        //获取所有请求的参数名称
        Enumeration<String> parameterNames = request.getParameterNames();
        System.out.println(parameterNames);
        // 遍历所有参数名
        while (parameterNames.hasMoreElements()) {
            String paramName = parameterNames.nextElement();

            // 获取参数值(单个值)
            String paramValue = request.getParameter(paramName);
            System.out.println(paramName + " = " + paramValue);

            // 如果参数可能有多个值(如复选框),使用 getParameterValues
            String[] paramValues = request.getParameterValues(paramName);
            if (paramValues != null && paramValues.length > 1) {
                System.out.println(paramName + " = " + Arrays.toString(paramValues));
            }
        }
        //获取所有参数的map集合
        Map<String, String[]> parameterMap = request.getParameterMap();
        for (String s : parameterMap.keySet()) {
            System.out.println("key->" + s + " ,value->" + String.join(",", parameterMap.get(s)));
        }
        //解决:在获取参数前,设置request的编码
        request.setCharacterEncoding("utf-8");
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                this.doPost(request,response);
    }


}

}

  1. 设置请求参数
@WebServlet("/servletDemo4")
public class ServletDemo4 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("12311");
        //setAttribute(String name,Object obj):存储数据
        //servletDemo4跟servletDemo5公用request;
        request.setAttribute("name","name");
        RequestDispatcher name = request.getRequestDispatcher("/servletDemo5");
            name.forward(request,response);


    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                this.doPost(request,response);

    }


}

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/servletDemo5")
public class ServletDemo5 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //getAttribute(String name):通过键获取值
        System.out.println("123");
        Object name = request.getAttribute("name");
        System.out.println(name);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                this.doPost(request,response);

    }


}


  1. 获取上下文路径,也就是配置的一级菜单,可用来区分服务。
@WebServlet("/requestDemo4")
public class RequestDemo4 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String method = request.getMethod();
        System.out.println(method);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String contextPath = request.getContextPath();
        System.out.println(contextPath);

    }
}

  1. 服务器端转发(Forward)

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/requestDemo8")
public class RequestDemo8 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo8......");

//        //1、通过request对象获取请求转发器对象
//        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/requestDemo9");
//        //2、转发
//        requestDispatcher.forward(request,response);

        //存储数据
        request.setAttribute("name","zs");

        //移除键值对
        request.removeAttribute("name");

        request.getRequestDispatcher("/requestDemo9").forward(request,response);
//        request.getRequestDispatcher("http://www.baidu.com").forward(request,response);



    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       this.doPost(request,response);
    }
}


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/requestDemo9")
public class RequestDemo9 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo9......");

        //获取数据
        String name = (String) request.getAttribute("name");
        System.out.println(name);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       this.doPost(request,response);
    }
}


特性 转发(Forward) 重定向(Redirect)
API调用 request.getRequestDispatcher().forward(); response.sendRedirect()
浏览器感知 不知道发生了转发,URL 不变 知道发生了跳转,URL 会改变为新的地址
请求对象 同一个request对象(数据可共享) 生成新的request对象(原数据丢失)
执行位置 服务器内部完成 客户端(浏览器)参与,发送两次请求
应用场景 页面跳转、控制器分发逻辑 避免表单重复提交、跨应用跳转
  1. 获取一个ServletContext对象
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/requestDemo10")
public class RequestDemo10 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //获取一个ServletContext对象
        ServletContext servletContext = request.getServletContext();
        System.out.println(servletContext);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       this.doPost(request,response);
    }
}

用到的jar

javax.servlet.jar

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐