首页 > 其他 > 详细

Servlet二

时间:2020-11-28 19:36:35      阅读:24      评论:0      收藏:0      [点我收藏+]

一、HttpServletRequest类

  1. 作用:每次客户端发送请求到Tomcat服务器,都会把请求的协议信息解析封装到Request对象中,然后传递到service方法(doGet或doPost)中,我们可以通过HttpRequestServlet对象,获取到所有的请求信息。
  2. 常用方法:
    • getRequestURI()               获取请求的资源路径
    • getRequestURL()                   获取请求的统一资源定位符
    • getRemoteHost()                    获取客户端ip地址
    • getHeader()                            获取请求头
    • getParameter()                       获取请求体的参数
    • getParameterValues()             获取请求体的参数(多个值调用时)
    • getMethod()                            获取请求的方法
    • setAttribute()                           设置域数据
    • getAttribute()                           获取域数据
    • getRequestDispatcher()          请求重定向
       1        //获取请求的资源路径
       2         System.out.println(req.getRequestURI());
       3         //获取请求的统一资源定位符
       4         System.out.println(req.getRequestURL());
       5         //获取请求头
       6         System.out.println(req.getHeader("User-Agent"));
       7         //获取请求体里的参数
       8         System.out.println(req.getParameter("name"));
       9         //获取请求的ip地址
      10         System.out.println(req.getRemoteHost());
      11         //获取请求的方法
      12         System.out.println(req.getMethod());
      13         //设置域数据
      14         req.setAttribute("key2", "value2");
      15         //获取域数据
      16         Object key2 = req.getAttribute("key2");
      17         System.out.println(key2);
      18         //请求转发
      19         req.getRequestDispatcher("/servlet2").forward(req,resp);

       

二、doGet请求的中文乱码解决

//获取请求体的参数出现中文乱码的解决方案
        String name = req.getParameter("name");
        String newString = new String(name.getBytes("iso-8859-1"),"UTF-8");
        System.out.println(newString);

 三、doPost请求的中文乱码解决

 1 //设置请求体的字符集,解决中文乱码问题 2 req.setCharacterEncoding("UTF-8"); 

四、请求转发

  1. 概念:指服务器收到客户端发送的请求后,从当前资源转发至另一个资源的操作
  2. 特点:
    • 浏览器地址栏没有变化
    • 一次请求
    • 共享request域中的数据
    • 可以访问web_inf下的数据

不能访问web工程以外的数据

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求的参数
        String name = req.getParameter("name");
        System.out.println(name);
        //盖章
        if("Tom".equalsIgnoreCase(name)){
            req.setAttribute("password","123456"); }
        //走路
        req.getRequestDispatcher("/servlet4").forward(req,resp);
    }

六、base标签的作用

  1. 关于网页跳转
    • 点击a标签,网址会发生变化,如从index.html跳转至localhost:8080/untitled/a/b/c.html,想跳转回index.html,则需要以当前浏览器网址为相对路径,通过../../index.html进行跳转
    • 请求转发,网址不会发生变化,因此相对路径依旧是同一个路径
  2. Web中的相对路径和绝对路径
    • 相对路径:  .-表示当前目录    ..-上一级目录   资源名-当前目录下的资源名相当于(./资源名)
    • 绝对路径:http://ip:port/工程路径/资源路径
    • 实际开发中,路径都使用绝对路径,而不是使用简单地相对路径
  3. base标签可以设置页面相对路径工作时参照的地址即href属性的值
    <base href="http://localhost:8080/untitled/">
  4. web中斜杆/的不同含义
    • /如果被浏览器解析-->http://ip/port/

      /如果被服务器解析-->http://ip/port/工程路径/

 

1 req.getRequestDispatcher("/").forward(req,resp);
2 req.getRealPath("/");
3 <url-pattern>/servlet3</url-pattern>
4//特殊情况
5 response.sendRedirect("/")将/发送给浏览器解析,得到http://ip:port/

 

七、HttpServletResponse类

  1. 作用:和HttpServletRequest一样,当Tomcat服务器接收到请求时,都会实例化这两个类传递给Servlet程序去使用,HTTPServletResponse表示所有响应的信息,如果我们需要设置返回给客户端的参数,可通过该类进行设置。
  2. 两个输出流的说明
    • resp.getOutputStream   常用于下载(传递二进制数据)
    • resp.getWriter               常用于回传数据(常用)
    • 注意:两个流只能用一个,否则就会报错
  3. 如何往客户端回传数据 

 

PrintWriter writer = resp.getWriter();
writer.write("123456");

 

  • 解决中文乱码问题
    //设置服务器使用UTF-8字符集
    resp.setCharacterEncoding("UTF-8");
    //设置让浏览器也使用UTF-8字符集
    resp.setHeader("Content-Type","text/html;charset=UTF-8")
    //以上方式不推荐,以下方式能够一步到位
    resp.setContentType("text/html;charset=UTF-8")

八、请求重定向

  1. 概念:就是指当服务器收到请求时,告诉客户端一个新的地址,让它去访问因为之前的地址可能已经废弃
  2. 特点:
    • 两次请求
    • 地址会发生变化
    • 不共享request域中的数据
    • 不能访问web_inf下的数据
  3. 代码
    1 //方案一:推荐
    2 resp.setStatus(302);
    3 resp.setHeader("location","http://localhost:8080/untitled/index.jsp");
    4 //方案二:推荐
    5 resp.sendRedirect("http://localhost:8080/untitled/index.jsp");

     

 

Servlet二

原文:https://www.cnblogs.com/array1688/p/14053467.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!