通过前面的学习我们能够创建并运行一个简单的Servlet 程序,完成浏览器和服务器的简单交互,但是我们编写的 Servlet代码是没有对浏览器的请求进行处理的。现在我们开始学习 如何使用Servlet进行浏览器请求的处理。

Request对象

问题: 浏览器发起请求到服务器,会遵循HTTP协议将请求数据发送给服务器。 那么服务器接受到请求的数据改怎么存储呢?不但要存,而且要保证完成性。

解决: 使用对象进行存储,服务器每接受一个请求,就创建一个对象专门的存 储此次请求的请求数据。

实现: request对象

解释: 服务器接收到浏览器的请求后,会创建一个Request对象,对象中 存储了此次请求相关的请求数据。服务器在调用Servlet时会将创建的 Request对象作为实参传递给Servlet的方法,比如:service方法。

  • 使用
    • 获取请求头数据
      • 获取请求方式:String method = req.getMethod();
      • 获取请求URL:StringBuffer url = req.getRequestURL();
      • 获取请求URI:String uri = req.getRequestURI();
      • 获取协议:String h = req.getScheme();
    • 获取请求行数据
      • 获取指定的请求信息:String value =req.getHeader(“aaa”);
      • 获取所有请求行的键的枚举
        1
        2
        3
        4
        5
        6
        Enumeration e = req.getHeaderNames();
        while (e.hasMoreElements()) {
        String name = (String) e.nextElement();
        String value2 = req.getHeader(name);
        System.out.println(name+":"+value2);
        }
    • 获取用户数据(get和post请求都可以,不能获取同键不同值多项数据的全部值)
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      String name = req.getParameter("uname");
      String pwd = req.getParameter("pwd");
      String [] favs = req.getParameterValues("fav");
      System.out.println(name+":"+pwd);
      //避免当fav不存在的时候,请求fav的值造成空指针异常
      if (favs!=null) {
      for (String fav : favs) {
      System.out.print(fav);
      }
      }

Response对象

问题: 在使用Request对象获取了请求数据并进行处理后,处理的结果如何显 示到浏览器中呢?

解决: 使用Response对象

解释: 服务器在调用指定的Servlet进行请求处理的时候,会给Servlet的方 法传递两个实参request和response。其中request中封存了请求相关的请求数据,而response则是用来进行响应的一个对象.

  • 使用:
    • 设置响应头
      • setHeader(String name,String value);—–在响应头中添加响应信息,但是同键会覆盖
      • addHeader(String name,String value);—–在响应头中添加响应信息,但是不会覆盖。
    • 设置响应状态
      • sendError(int num,String msg);—–自定义响应状态码。
        • 设置响应实体
      • resp.getWrite().write(String str);响应具体的数据给浏览器
        • 设置响应编码格式:
      • resp.setContentType(“text/html;charset=utf-8”);—-告诉浏览器用html格式来解析服务器响应的数据,并且字符集为utf-8.

请求乱码问题解决

  • 使用String进行重新编码:uname=new String(uname.getBytes(“iso8859-1”),”utf-8”);

  • Get方式请求: 在service方法中使用: req.setCharacterEncoding(“utf-8”);在tomcat服务器目录下的conf文件下找到server.xml文件,打开进 行如下配置:

  • Post方式请求: 在service方法中使用: req.setCharacterEncoding(“utf-8”);

Servlet的使用流程

  • 设置请求编码格式
  • 设置响应编码格式
  • 获取请求信息
  • 处理请求信息
  • 响应处理结果

数据流转流程

浏览器——>服务器——->数据库

浏览器<——服务器<——-数据库