Request对象和Response对象

再上一节我们写了HttpServelt类,我们发现我们写的实现类中的dopost方法和doget方法中有两个参数request,response,他们是Resquest的对象和Response的对象,都是由服务器创建

Request对象  获取请求消息,

Response对象   响应

在HttpServelt类中,我们发现方法中的参数是HttpServletResquest对象,这里写一下继承顺序,

  Request---->ServletRequset---->HttpServletRequest,根据多态的性质可以知道参数request也是Request对象,

  这个对象不需要我们创建,由tomcat创建

下面我们来写一下这个Request对象的方法:

首先建立一个html页面,放在web文件夹下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/zs/login" method="post">
        <input type="text" name="username" placeholder="请输入用户名"><br/>
        <input type="password" name="password" placeholder="请输入密码"><br/><input type="checkbox" name="hobby" value="chi"><input type="checkbox" name="hobby" value="he"><input type="checkbox" name="hobby" value="wan"><input type="checkbox" name="hobby" value="le"><br/>
        <input type="submit">
    </form>
</body>
</html>

然后我们运行tomcat,用浏览器输入地址查看是否可以查看该文件,下面我们编写Servelt文件:

package com.zs.servelt;

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;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

@WebServlet("/login")
/*这里需要注意的是,我们之前在html文件的action属性中写的是"/zs/login",里面前面是配置的服务器地址的url,后面代表虚拟路径,
    在这里只需要输入虚拟路径*/
public class ServletDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     /*获取请求行的数据*/
//        1.获取请求的方式
        String method = request.getMethod();
        System.out.println(method);//   POST
//        2.获取目录的路径
        String conpath = request.getContextPath();
        System.out.println(conpath);//    /zs
//        3.获取servelt的路径
        String servletPath = request.getServletPath();
        System.out.println(servletPath);//  /login
//        4.获取请求参数
        String queryString = request.getQueryString();
        System.out.println(queryString);//      null
//        5.获取请求的url
        String requestURI = request.getRequestURI();
        System.out.println(requestURI);//       /zs/login
        StringBuffer requestURL = request.getRequestURL();
        System.out.println(requestURL);//       http://localhost/zs/login
//        6.获得协议版本
        String protocol = request.getProtocol();
        System.out.println(protocol);//     HTTP/1.1
//        7.获得客户的id
        String remoteAddr = request.getRemoteAddr();
        System.out.println(remoteAddr);//       0:0:0:0:0:0:0:1
    /*获取请求参数的通用方式(post,get都可以使用的方法),下面的方法必须记住,会常用*/
//        1.根据参数的名称获得参数,括号内参数为标签的name值
        String username = request.getParameter("username");
        System.out.println(username);//  结果:      165
//        2.根据参数的名成获得参数的数据,例如html标签中checkbox有多个值,就会把这些值放进一个数组中,
        String[] hobbies = request.getParameterValues("hobby");
        System.out.println(Arrays.toString(hobbies));
        //结果:      [chi, he, wan]
//        3.获得所有的请求参数的名称
        Enumeration<String> parameterNames = request.getParameterNames();
        while (parameterNames.hasMoreElements()) {
            String s = parameterNames.nextElement();
            System.out.println(s);
            //结果:
            //username
            //password
            //hobby
        }
//        4.获得所有参数的集合
        Map<String, String[]> parameterMap = request.getParameterMap();
//        遍历集合
        Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();
        for (Map.Entry<String, String[]> entry : entries) {
//            这里可以看出参数的值为数组格式
            String[] value = entry.getValue();
            System.out.println(entry.getKey()+Arrays.toString(value));
            //username[165]
            //password[131]
            //hobby[chi, he, wan]
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*get方式和post提交方式,只是一个显示提交,一个隐式提交示,内部方法是一样的,所以我们这里调用post方法就好了*/
        this.doPost(request,response);
    }
}

 

posted @ 2019-04-10 20:59  Zs夏至  阅读(172)  评论(0编辑  收藏  举报