zoukankan      html  css  js  c++  java
  • 【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、请求重定向

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

     设置重定向的方法:

  • 相关阅读:
    团队冲刺二(6)
    团队冲刺二(5)
    JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结
    解决ADB server didn't ACK问题,连上手机问题
    ADB server didn't ACK
    android错误
    Andy
    在Eclipse下搭建Android开发环境教程
    VM VirtualBox 安装 Android 4.3虚拟机完整教程
    电脑安装Android4.0虚拟机的做法
  • 原文地址:https://www.cnblogs.com/frankruby/p/14922230.html
Copyright © 2011-2022 走看看