Notes -JavaWeb learning journey 11

Forwards the request: a resource in a way to jump inside the server

Steps for usage

1. Get Object request object request forwarder: RequestDispatcher getRequestDispatcher (String path) is the path parameter in the forwarding resources

2. Use Requestispatcher objects forward

Features: browser address bar path will not change, only forward current server internal resources, it is forwarding a request

Sharing data

Domain objects: a scope of the object data can be shared in the range

request field: a request on behalf of a range, generally a plurality of resource requests forwarded shared data

method:

  1. void setAttribute (String name, Object obj): store data
  2. Object getAttiude (Stirng name): Gets the value through the key
  3. void removeAttribute (String name): remove the key by key-value pairs
package com.Data.HttpServlet;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/requestDemo1")
public class RequestDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //使用request对象的方法setAttribute将数据存储到request域中
        request.setAttribute("msg","Hello");
        System.out.println("RequestDemo1被访问了。。。。");
        //转发到requestDemo2
        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/requestDemo2");
        requestDispatcher.forward(request,response);
    }
}
package com.Data.HttpServlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/requestDemo2")
public class RequestDemo2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //访问共享数据,通过键获取值
        System.out.println(request.getAttribute("msg"));
        System.out.println("RequestDemo2被访问了。。。");
    }
}
RequestDemo1被访问了。。。。
Hello
RequestDemo2被访问了。。。

Get ServletContext:

ServletContext getServletContext()

HTTP response message

The server sends the data to the client

Five kinds of data format

1. The response line

1: Composition: Protocol / version state response do Status Code Description

2. The response status codes: the server tells the client browser to request the current status and a response status code is a three-digit code five states

  1. 1xx: the server receiving the client message, but does not receive completion, after waiting for a period of time, multi-state transmission 1xx code
  2. 2xx: Success. On behalf of numbers: 200
  3. 3xx: Redirection. Representative: 302 (redirect), 304 (cache access)
  4. 4xx: Client Error. Representative (404) corresponding to the path is not requested resource, 405 (embodiment not corresponding to the request doxxx Method)
  5. 5xx: server error. Representative: 500 (internal server exception occurs, such as the code is wrong)

2. Response Header

Format: first name: value

Common response headers

Content-Type: The server tells the client data format of this body following the response to the encoding format

Content-dispostition: Open the server tells the client what format the response body data

3. In response blank line

4 in response to the body: the data transmission

Redirect: Resource jump method

package com.data;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/Demo1")
public class ResponseServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo1....");
        //完成重定向
        //设置状态码为302
        //response.setStatus(302);
        //设置响应头,头的名称,头的值
        //response.setHeader("location","/Demo2");
        //重定向可以访问其他站点资源
        //response.sendRedirect("https://www.baidu.com");//访问了百度
        //重定向
        response.sendRedirect("/Demo2");
        //设置共享数据
        request.setAttribute("msg","hello");

    }
}
package com.data;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/Demo2")
public class ResponseServlet2 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //重定向可以访问其他站点的资源
        System.out.println("demo2.....");
        //重定向不能访问共享数据
        Object o1 = request.getAttribute("msg");
        System.out.println(o1);
    }
}
输出结果

demo1....
demo2.....
null

Redirection features: redirect

  1. Address bar changes
  2. Redirected to other site servers can access resources
  3. Redirection is two requests ,, do not get to use the request object to share data
Path wording

Relative path: can not determine the unique resources relative path

Absolute path: the path can be determined by absolute unique resource to the client browser to use the need to add virtual directory server to use, you do not need to add virtual directory

Server output character data to the browser

package com.data;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/Demo3")
public class ResponseServlet3 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //使用响应头,告诉浏览器我使用的编码
        //浏览器收到响应,就会按照指定字符集解码
        response.setContentType("text/html;charset=utf-8");
        //response.setHeader("content-type","text/html;charset=utf-8");
        //向客户端输出数据,先要获取字符输出流
        PrintWriter writer = response.getWriter();
        writer.write("<h1>你好,world</h1>");
    }
}
Server output byte data to the browser
package com.data;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/Demo3")
public class ResponseServlet3 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       response.setContentType("text/html;charset=utf-8");
       ServletOutputStream outputStream = response.getOutputStream();
       outputStream.write("你好,客户端".getBytes("utf-8"));
    }
}
Verification code
package com.data;


import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

@WebServlet("/Demo4")
public class CheckCodeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int width = 100;
        int height = 50;
        //创建对象,该对象可以在内存中生成图片
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        //美化图片
        //填充背景色
        Graphics g = image.getGraphics();
        g.setColor(Color.PINK);
        g.fillRect(0,0,width,height);
        //画边框
        g.setColor(Color.BLUE);
        g.drawRect(0,0,width-1,height-1);
        String str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

            //  写验证码
        Random ran = new Random();
        for(int i = 1;i<=4;i++){
            int index = ran.nextInt(str.length());
            char ch = str.charAt(index);
            g.drawString(ch+"",width/5*i,height/2);
        }
        g.setColor(Color.GREEN);
        for (int i = 0 ; i< 10 ;i++){
            int x1 = ran.nextInt(width);
            int x2 = ran.nextInt(width);

            int y1 = ran.nextInt(height);
            int y2 = ran.nextInt(height);
            g.drawLine(x1,y1,x2,y2);
        }


        //将图片输出到页面上
        ImageIO.write(image,"jpg",resp.getOutputStream());

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        // 分析:
        //     点击超链接或者图片,需要换一张,
        //     给图片和超链接绑定单击事件
        window.onload=function () {
            //获取图片对象
            var img=document.getElementById("change");
            //绑定单击事件
            img.onclick=function () {
               var date =new Date().getTime();
                img.src="/day14/Demo4"+date;
            }
        }
    </script>
</head>
<body>
    <img id="checkCode" src="/day14/Demo4" />
    <a id="change" href="">看不清?换一张</a>
</body>
</html>
ServletContext object:

1. Concept: representative of the web application, the container may be a communication program

method of obtaining:

1.request.getServletContext();

2.this.getServletContext();

Function: Get the MIME type (kind defined in the Internet communication process a file data type, as text / html, image / jpeg)

package com.data;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/Demo5")
public class ServletDemo5 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取MIME类型
        ServletContext context=this.getServletContext();
        //定义文件名称
        String filename = "a.jpg";
        //获取MIME类型
        String mimeType = context.getMimeType(filename);
        System.out.println(mimeType);
    }
}

//image/jpeg

Function: domain objects, data sharing

The method of domain objects

setArrtibute(String name,Object value)

getAttribute(String name)

removeAttribute(String name)

Function: Get the file server path

文件在项目目录下,可以直接文件名获取路径
在WEB-INF目录下,需要加上WEB-INF才可以获取
src目录下的所有文件将来都存放在/WEB-INF/classes目录下
package com.data;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/Demo5")
public class ServletDemo5 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取web目录下的资源访问
        ServletContext context = this.getServletContext();
        String realPath = context.getRealPath("/b.txt");//b.txt在项目目录下,可以直接文件名获取路径
        System.out.println(realPath);
        //获取WEB-INF目录下的资源访问
        String realPath1 = context.getRealPath("/WEB-INF/c.txt");//c.txt在WEB-INF目录下,需要加上WEB-INF才可以获取到路径
        System.out.println(realPath1);
        //获取src目录下的资源能路径
        String realPath2 = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的所有文件将来都存放在/WEB-INF/classes目录下
        System.out.println(realPath2);
    }
}

Guess you like

Origin www.cnblogs.com/train99999/p/10995626.html