在写servlet时需要实现5个方法,在一个service方法里面有两个参数request和response。 

浏览器向服务器发送请求会发送HTTP的请求数据——字符串,这些字符串会被Tomcat所解析,然后这些请求数据会被放到一个对象(request)里面保存。

相应的Tomcat也会发送一些响应数据给浏览器

Request——获取请求数据(比如用户名和密码等等)

Response——设置响应数据

java 请求无响应 java请求和响应_请求数据

java 请求无响应 java请求和响应_java 请求无响应_02

 

java 请求无响应 java请求和响应_java_03

入门案例实现

创建一个如下的Servlet对象

@WebServlet("/demo99")
public class ServletDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
        //使用request对象 获取请求数据
        String name=request.getParameter("name");

        //使用response对象 设置相应数据
        response.setHeader("content-type","text/html;charset=utf-8");
        response.getWriter().write("<h1>"+name+",欢迎您!</h1>");
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException , IOException
    {
        System.out.println("Post....");
    }
}

通过request里面的getParameter方法获取请求参数,比如//url?name=zhangsan 这种键值对的形式通过name这个键可以获取参数的值

通过response.setHeadr设置响应头。

如下通过在url中加键值对的方式获取数据并设置相应数据

java 请求无响应 java请求和响应_System_04

到此,完成了简易的客户端浏览器和服务器的交互过程。

Resquest相关

java 请求无响应 java请求和响应_java_05

Request继承体系

java 请求无响应 java请求和响应_System_06

 Tomcat解析了请求数据,因此由Tomcat来提供Resquest的实现类,resquest是由Tomcat创建。

java 请求无响应 java请求和响应_java 请求无响应_07

 

 Request获取请求数据

请求数据分为3部分

1.请求行

请求行的组成:请求方式/访问路径?参数 请求协议

java 请求无响应 java请求和响应_java_08

2.请求头

java 请求无响应 java请求和响应_java_09

3.请求体(只有post请求才有请求体)

post请求会把表单参数放到请求体里面封装提交

请求体数据的获取,request对象使用了流的方式

如果是纯文本使用字符输入流

用到文件上传比如图片之类就要用到字节输入流

java 请求无响应 java请求和响应_请求数据_10

 对上面的6个方法进行简单的演示

/**
 * request 获取请求数据
 */
@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // String getMethod():获取请求方式: GET
        String method = req.getMethod();
        System.out.println(method);//GET
        // String getContextPath():获取虚拟目录(项目访问路径):/request-demo
        String contextPath = req.getContextPath();
        System.out.println(contextPath);
        // StringBuffer getRequestURL(): 获取URL(统一资源定位符):http://localhost:8080/request-demo/req1
        StringBuffer url = req.getRequestURL();
        System.out.println(url.toString());
        // String getRequestURI():获取URI(统一资源标识符): /request-demo/req1
        String uri = req.getRequestURI();
        System.out.println(uri);
        // String getQueryString():获取请求参数(GET方式): username=zhangsan
        String queryString = req.getQueryString();
        System.out.println(queryString);
        
        //------------
        // 获取请求头:user-agent: 浏览器的版本信息
        String agent = req.getHeader("user-agent");
        System.out.println(agent);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取post 请求体:请求参数
        //1. 获取字符输入流
        BufferedReader br = req.getReader();
        //2. 读取数据
        String line = br.readLine();
        System.out.println(line);
    }
}

输出如下(成功输出)

java 请求无响应 java请求和响应_System_11

 获取请求体

准备一个html页面,准备表单使用post请求提交

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/request-demo/req1" method="post">
    <input type="text" name="username"><br>
    <input type="password" name="password"><br>
    <input type="checkbox" name="hobby" value="1"> 游泳
    <input type="checkbox" name="hobby" value="2"> 爬山 <br>
    <input type="submit">
</form>

post输出如下

java 请求无响应 java请求和响应_servlet_12

常见响应状态码 

java 请求无响应 java请求和响应_java_13

java 请求无响应 java请求和响应_servlet_14