• Servlet Java Web开发(3.1) request response


    0.Servlet get 如何发送流

    a.

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter.print(yourString);}

    b

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        byte [] tosend="good king".getBytes();
        response.getOutputStream().write(tosend);}

    注意:两者只能用一个,不可混用。

    1.重定向。

    关键点:2次请求。

    client请求A资源,A资源返回302,还有B的地址。client请求B。

    BServlet中的代码

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setHeader("Location", "/HelloWorld/CServlet");
            response.setStatus(302);
    注意:或者使用response.sendRedirect("/HelloWorld/CServlet");

    注意重定向位置是相对于主机的,比如localhost:8080,当然也可以不加/,response.sendRedirect("http://www.baidu.com");直接重定向到百度。

    BServlet回复内容:

    HTTP/1.1 302 Found

    Server: Apache-Coyote/1.1

    Location: /HelloWorld/CServlet

    Content-Length: 0

    Date: Fri, 08 Jun 2018 12:43:09 GMT

     然后客户端就按照地址直接访问CServlet去了。

    1.1延时重定向

    访问后,客户端等待几秒后再重定向。BServlet代码如下

    PrintWriter w=response.getWriter();
    w.print("welcome to this page..Redirect in 5 seconds.?");
    response.setHeader("Refresh", "5;URL=/HelloWorld/CServlet");

    客户端访问BServlet,BServlet返回

    HTTP/1.1 200 OK

    Server: Apache-Coyote/1.1

    Refresh: 5;URL=/HelloWorld/CServlet

    Content-Length: 50

    Date: Fri, 08 Jun 2018 13:19:37 GMT

     

    welcome to this page..Redirect in 5 seconds.

    客户端5秒后访问CServlet

    2.请求URL的含义

     3.Referer

    String referer=request.getHeader("Referer");
    System.out.println(referer);

    a,如果使用浏览器直接访问,或者直接链接BServlet,referer值为null

     b项目新建一个html文件,位置是项目(HelloWorld)下的hi.html,主要内容

    <a href="/HelloWorld/BServlet">I am a Link</a>此时,点击链接访问BServlet,http协议中的referer就会是:

    4.请求转发和请求包含

    和重定向不同的是,对于客户端来说,只有一个请求。

     相关代码request.getRequestDispatcher("/anotherServlet").forward(request,response);

    请求转发的例子:

    创建BServlet,get方法中代码,BServlet中不应该设置响应体。

    创建CServlet,get方法中代码

    用户访问BServlet,地址栏不会变化,浏览器输出you're now at CServlet

    控制台输出

    i am BServlet
    i am CSerlet

    请求包含的例子

    和请求转发的区别:BServlet中可以设置响应体。

    浏览器输出something in BServletyou're now at CServlet

  • 相关阅读:
    TcxComboBoxProperties下拉框填充
    Delphi用QJSON解析JSON格式的数据 【转】
    Delphi的idhttp报IOHandler value is not valid错误的原因[转]
    RelayCommand
    ViewModelBase && ObservableObject
    MvvmLight ToolKit 教程
    WPF中的数据验证
    MvvmLight ToolKit .Net4.5版本 CanExecute不能刷新界面bug
    微软虚拟学院MVA 字幕获取方法
    WPF Binding INotifyPropertyChanged 多线程 深入理解
  • 原文地址:https://www.cnblogs.com/legion/p/9157581.html
Copyright © 2020-2023  润新知