【JavaWeb Servlet 07】

一、HttpServletRequest类

作用:每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGet和doPost)中供我们使用。我们可以通过HttpServletRequest对象,获取到所有请求的信息。

1、常用的方法

  • getRequestURI()  获取请求的资源路径
  • getRequestURL()  获取请求的统一资源定位符(绝对路径)
  • getRemoteHost()  获取客户端的ip地址
  • getHeader() 获取请求头
  • getParameter() 获取请求的参数
  • getParameterValues()  获取请求的参数(多个值的时候使用)
  • getMethod()   获取请求的方式GET或POST
  • setAttribute(key,value)  设置域数据
  • getAttribute(key)  获取域数据
  • getRequestDispatcher() 获取请求转发对象

代码演示

 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("URI --》"+req.getRequestURI());
        System.out.println("URL --》"+req.getRequestURL());
        System.out.println("HOST --》"+req.getRemoteHost());
    }

2、获取请求的参数

 #案例演示:

表单代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="http://localhost:8080/07-servlet/paramentServlet" method="get">
        用户名:<input type="text" name="username"/><br />
        密码:<input type="password" name="password"/><br />
        兴趣爱好:<input type="checkbox" name="hobby" value="c++"/>c++
        <input type="checkbox" name="hobby" value="java"/>java
        <input type="checkbox" name="hobby" value="php"/>php
        <input type="checkbox" name="hobby" value="python"/>python<br />
        <input type="submit"/>

    </form>
</body>
</html>

Java代码

package com.wufq.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;

/**
 * @Description
 * @Author wufq
 * @Version
 * @Date 2021/6/23 16:16
 */
public class ParamentServlet extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
//        String hobby = req.getParameter("hobby");

        String[] hobbies = req.getParameterValues("hobby");

        System.out.println("username=="+username+" passwd=="+password+" hobby=="+ Arrays.asList(hobbies));

    }
}

含义:

浏览器:http://localhost:8080/07-servlet/form.html (前端页面)填写内容信息,点击提交

-->页面跳转到:http://localhost:8080/07-servlet/paramentServlet?username=wfq&password=wfq&hobby=c%2B%2B&hobby=java&hobby=php(服务端的接口地址)

--> 这样就有了前端和后端交互的形式

===>代码这里面涉及到如果是像兴趣爱好这样多个参数,那么在获取的时候,就应该用getParameterValues,结果是一个数组

------------>有中文会出现乱码<-------------

Post请求解决乱码方式:设置请求体的字符集为UTF-8

req.setCharacterEncoding("UTF-8");

get请求解决乱码方式:

String username = req.getParameter("username");
username = new String(username.getBytes("iso-8859-1"),"UTF-8");

3、请求转发

原理:

 4、base标签的作用

 5、web中的相对路径和绝对路径

相对路径: .  表示当前路径  .. 表示上一级目录   资源名  表示当前目录/资源名

绝对路径: http://ip:port/工程路径/资源路径

注意:在实际开发中,都使用绝对路径,不使用相对路径

二、HttpServletResponse类

1、作用:

HttpServletResponse和HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。

HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息。返回给客户端的信息,都是通过HttpServletResponse对象来设置的

2、传给客户端的方式:通过流(两种)

字节流 :getOutputStream();    常用于下载(传递二进制数据)

字符流:getWriter();常用于回传字符串(常用

两个流同时只能使用一个。否则就会报错()

resp.getWriter();
resp.getOutputStream();

3、往客户端回传数据

public class ReponseServlet  extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       /*
       * 解决返回给客户端乱码问题
       * 它会同时设置服务器和客户端都是哟经UTF-8字符集,还设置了响应头
       * 此方法一定要在获取流对象之前调用才有效
       * */
        resp.setContentType("text/html;charset=UTF-8");

        //给客户端回传字符串数据
        PrintWriter writer = resp.getWriter();
        writer.write("给客户端回传信息!");
    }
}

4、请求重定向

请求重定向,指客户端给服务器发送请求,然后服务器告诉客户端说。我给你一些地址,你去新地址访问,这就叫请求重定向(因为之前的地址可能已经被废弃)

 设置重定向的方法:

原文地址:https://www.cnblogs.com/frankruby/p/14922230.html