java web 学习

2016-06-09  本文已影响92人  小菜_charry

servlet 的理解

servlet:java server applet 服务端小程序,它是JSP组件的前身,是java web开发技术的基础和核心组件。Servlet对象给web应用进行了封装,针对HTTP请求提供了丰富的API方法。

1、当服务器接受到请求,会创建request和response对象。
2、会将请求消息数据封装在request对象中。
3、将这两个对象穿阿迪给service方法作为参数与
4、当服务器给浏览器作出响应之前,会去response对象中获取设置的响应消息数据,然后作出真正响应

service(request,response);
1、通过request获取请求消息数据
2、通过response设置响应消息

1.接受请求,服务器创建request和response对象
2.将请求消息数据封装到request对象中
3.将这两个对象传递给service方法,调用service方法
4.在service方法中,我们可以通过request对象来获取请求消息数据,通过response对象类设置响应消息数据
5.在服务器真正作出响应之前,会从response对象中获取出我们设置的响应消息数据。
6.当响应完成,这两个对象将被销毁。

request的全路径:org.apache.catalina.connector.Request
response的全路径:org.apache.catalina.connector.Response



响应头及重定向的理解:

而重定向就是设置响应状态码为302,设置响应头的key为"location"值设置为跳转的地址(sendRedirect将其封装好,直接使用sendRedirect即可)。

/**
 * 完成重定向
 * @author super
 *
 */
public class ResponseDemo1 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    /*//1.设置响应状态码  302
    response.setStatus(302);
    //2.设置响应头
    response.setHeader("location", "http://localhost:8080/day08/req");
    */
    //简化版重定向
    response.sendRedirect("/day08/regist.html");

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    this.doGet(request, response);
}

}

response输出:

public class ResponseDemo3 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    //1.获取字节输出流
    ServletOutputStream sos = response.getOutputStream();
    //2.定义输入流关联图片
    String realPath = this.getServletContext().getRealPath("/404.jpg");//获取图片真实路径
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));
    //3.流的对拷
    IOUtils.copy(bis, sos);
    
    bis.close();
    
    
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    this.doGet(request, response);
}
}
public class CheckCodeServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    //1.在内存中创建一张图片
    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);
    
    //写入验证码
    g.setColor(Color.BLACK);
    /*g.drawString("A", 20, 25);
    g.drawString("B", 40, 25);
    g.drawString("c", 60, 25);
    g.drawString("d", 80, 25);*/
    String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    Random ran = new Random();
    for (int i = 1; i <= 4; i++) {
        int index = ran.nextInt(str.length());
        g.drawString(String.valueOf(str.charAt(index)), 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);
    }
    
    
    //2.将图片输出到页面上去
    ImageIO.write(image, "jpg", response.getOutputStream());
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    this.doGet(request, response);
    }
 }

request:请求对象

在jsp中获取虚拟目录(项目的访问方式)

<body>
    
    ${pageContext.request.contextPath }
    <img src="${pageContext.request.contextPath }/checkCode">
    
</body>

请求头

请求体:

中文乱码问题

    //post解决中文乱码问题
    request.setCharacterEncoding("utf-8");
    String username = request.getParameter("username");

重定向和转发的区别与联系

如果想在两个servlet之间共享数据,就需要用到转发

上一篇下一篇

猜你喜欢

热点阅读