Servlet2

1 篇文章 0 订阅
1 篇文章 0 订阅

总所周知, HttpServletRequest和HttpServletResponse是doGet/doPost的参数
1.HttpServletRequest类

每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到 Request对象 中,然后传递到service方法(doGet/doPost)
我们可以通过HttpServlet对象 , 来获取所有请求的信息

  •  getRequestURI()     获取请求的URI地址(资源路径
    
  •  getRequestURL()     获取请求的统一资源定位符(绝对路径
    
  •  getRemoteHost()     获取客户端的ip地址
    
  •  getHeader()         获取请求头
    
  •  getParameter()      获取请求的参数
    
  •  getParameterValues()获取请求的参数(多个值的时候使用
    
  •  getMethod()         获取请求方式
    
  •  serAttribute(key,value)
    
  •  getAttribute(key)
    
  •  getRequestDispatcher() 获取请求转发对象
    
public class RequestAPIservlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


//          getRequestURI()     获取请求的URI地址(资源路径
        System.out.println("URI:"+req.getRequestURI());

//              getRequestURL()     获取请求的统一资源定位符(绝对路径
        System.out.println("URL:"+req.getRequestURL());

//               getRemoteHost()     获取客户端的ip地址
//            在idea中,使用localhost访问时,得到的客户端ip地址是 0:0:0:0:0:0:0:1
//                     使用 0:0:0:0:0:0:0:1 访问时,得到的客户端ip地址是 0:0:0:0:0:0:0:1
//                     使用 真实ip 访问时,得到的客户端ip是 真实ip
        System.out.println("ip:"+req.getRemoteHost());

//               getHeader()         获取请求头
        System.out.println("请求头User-Agent"+req.getHeader("User-Agent"));

        //               getMethod()         获取请求方式*/
        System.out.println("请求方式:"+req.getMethod());
    }
}

2.HttpServletReponse类
每次请求进来,tomcat都会创建一个Response对象来传递给Servelet程序使用

  • HttpServletReponse表示所有响应的信息
  • 我们如果需要设置返回给客户端的信息,都可以通过 response 来进行设置

  • 两个输出流的说明
  • 字节流 getOutputStream(); 常用于下载
  • 字符流 getWriter(); 常用于回传字符串(常用
  • 两个流同时只能使用一个
public class Responseservlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        要求:往客户端回传数据
//        PrintWriter writer = response.getWriter();
//        writer.write("response's contend::");

//        //设置服务器字符集为utf-8
//        response.setCharacterEncoding("UTF-8");
//        //通过响应头,设置浏览器也会用utf-8编码
//        response.setHeader("Content-Type","text/html; charset=UTF-8");

        //它会同时设置服务器和客户端都使用utf-8,还设置了响应头,
        // 、、注意:此方法一定要在获取流对象之前 调用才有效
        response.setContentType("text/html; charset=UTF-8");
        System.out.println(response.getCharacterEncoding());
        PrintWriter writer = response.getWriter();
        writer.write("aaaaaa");
        writer.write("我爱你");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

3.请求的转发

  • 请求的转发是指:服务器收到请求后,从一个资源跳转到另外一个资源的操作就叫请求转发
  • 请求转发的特点:1.浏览器地址栏的地址没有变化
  •            2.是一次请求(虽然访问两个资源
    
  •            3.两个程序共用request域中的数据
    
  •            4.可以转发到WEB-INF目录下
    
  •            5.请求转发可以访问工程以外的资源
    

注: base标签可以设置当前页面中所有相对路径工作时, 参照哪个路径来进行跳传

public class servlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //1.获取请求参数
        String username = request.getParameter("username");
        System.out.println("在servlet1中查看参数"+username);

        //2.给材料盖一个章并传递到servlet2查看
        request.setAttribute("key","柜台1的章");

        //3. servlet2怎么走
        /*
        请求转发并需要以斜杠打头 / 表示:http://ip:port/工程名/,映射到idea的webapp目录
        * */
        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/servlet2");

        // 4.跳转到servlet2
        requestDispatcher.forward(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}


public class servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //1。获取请求参数
        String username = request.getParameter("username");
        System.out.println("servlet2中的参数:" + username);

        //2.查看servlet1的章
        Object key = request.getAttribute("key");
        System.out.println("servlet2是否有章:" + key);

        //3.servlet2处理自己的业务


    }
}

4.请求重定向

  • 是指客户端给服务器发请求,然后服务器告诉客户端说,我给你一个新地址,你去新地址访问,叫做请求重定向
  • (因为之前的地址可以已经废弃)
  • 响应状态码:302
  • 告知新的地址: 响应头Location:新地址
  • 特点:1.浏览器地址栏有变化
  •  2.是两次请求
    
  •  3.不共享request域中数据(因为request中的数据在一次请求内是可以共享的
    
  •  4.不能访问WEB-INF资源
    
  •  5.可以访问工程外的资源 如www.baidu.com
    

```java
public class chongdixiang1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("重定向一  曾到此一游");


        request.setAttribute("key", "value");
//        方法1:
        //        //设置响应状态码302,表示重定向
//        response.setStatus(302);
//
//        //设置响应头,说明 新的网址在哪里
        response.setHeader("Location","http://localhost:8080/servlet2/cdx2");
//        response.setHeader("Location","http://www.baidu.com");


//    方法2:
        response.sendRedirect("http://localhost:8080/servlet2/a/b/c.html");
    }

 }
public class chongdingxiang2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter writer = response.getWriter();
        writer.write("重定向2的结果");
        System.out.println(request.getAttribute("key"));

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

注:如果有post请求参数乱码问题

```java

   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求的字符集为UTF-8,解决post请求的乱码问题
        //在获取请求参数之前调用才有效
        req.setCharacterEncoding("UTF-8");

        //获取请求的参数 getParameter(中间放name属性的值)
        System.out.println("------doPost-----");

        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String[] hobby = req.getParameterValues("hobby");
        System.out.println(username);
        System.out.println(password);
        System.out.println(Arrays.asList(hobby));

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值