Servlet的详细使用(下)

简介: Servlet的详细使用(下)

Request请求转发

服务器内部资源跳转方式
示例代码
假设我们在执行req4请求的时候要跳转到req5上

@WebServlet("/req4")
    public class RequestDemo4 extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doGet(req,resp);
        }
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("demo4...");
            //请求代码
            req.getRequestDispatcher("/req5").forward(req,resp);
        }
    }
@WebServlet("/req5")
    public class RequestDemo5 extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doGet(req,resp);
        }
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("demo5...");
        }
    }

运行结果:



请求转发间共享数据


请求转发特点:
1.浏览器地址栏路径不发生变化
2.只能转发到当前服务器的内部资源
3.一次请求,可以在转发的资源间使用request共享数据


Response

Response设置响应数据功能&完成重定向

响应数据分为3部分:
1.响应行
2.响应头
3.响应体

什么是重定向?
一种资源跳转方式

示例代码:

@WebServlet("/resp1")
    public class ResponseDemo1 extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("resp1.....");
            //重定向
            //1.设置响应状态码
            resp.setStatus(302);
            //2.设置响应头 location
            resp.setHeader("Location","/resp2");
        }
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doPost(req,resp);
        }
    }
@WebServlet("/resp2")
    public class ResponseDemo2 extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doGet(req,resp);
        }
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("resp2.....");
        }
    }

重定向简化方法:


重定向特点:

1.浏览器地址栏路径发生变化

2.可以重定向到任意位置的资源(服务器内部,外部均可)

3.两次请求,不能在多个资源中使用request共享数据
路径问题
什么时候路径需要加虚拟目录?
首先你得明确这个路径给谁使用,如果是给浏览器使用,需要加虚拟目录,如果是给服务器使用,不需要加虚拟目录。
例如:



Response 响应字符数据

示例代码:

@WebServlet("/resp3")
public class ResponseDemo3 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       this.doGet(req,resp);
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取字符输出流
        PrintWriter writer = resp.getWriter();
        //content-type
        resp.setHeader("content-type","text/html");
        writer.write("aaa");
        writer.write("<h1>aaa</h1>");
    }
}

运行结果:


1.writer流不要关闭,因为这个流是随着response对象获取出来的,等这次请求响应完毕后,response对象会被销毁,销毁的时候,writer也会被关闭
2.

这样的话就可以响应中文了

Response 响应字节数据

示例代码:

@WebServlet("/resp4")
    public class ResponseDemo4 extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doGet(req,resp);
        }
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //1.读取文件
            FileInputStream fis = new FileInputStream("C://Users//Administrator//Desktop//1.jpg");
            //2.获取response字节输出流
            ServletOutputStream os = resp.getOutputStream();
            //完成流的copy
            byte[] buff = new byte[1024];
            int len = 0;
            while((len=fis.read(buff))!=-1){
                os.write(buff,0,len);
            }
            fis.close();
        }
    }
目录
相关文章
|
6月前
|
JSON Java 应用服务中间件
|
6月前
|
Java 应用服务中间件 数据库连接
Servlet是什么?
Servlet(Server Applet)是Java Servlet的简称,通常被称为小服务程序或服务连接器。它是一个用Java编写的服务器端程序,具有独立于平台和协议的特性。Servlet的主要功能在于交互式地浏览和生成数据,进而生成动态Web内容。
56 3
|
IDE Java 应用服务中间件
Servlet3.0
Servlet3.0
|
6月前
|
Oracle Java 关系型数据库
浅谈Servlet
浅谈Servlet
30 0
|
小程序 Java 应用服务中间件
Servlet这些你可能还不知道
Servlet这些你可能还不知道
63 0
|
6月前
|
XML Java 应用服务中间件
一文了解Servlet
Servlet是用于开发基于Java的Web应用程序的Java类。Servlet在Web服务器上运行,接收来自客户端(通常是Web浏览器)的请求并生成响应。 Servlet提供了一种动态生成网页内容的方法。它可以接收HTTP请求,读取请求参数,与数据库进行交互,生成动态内容,并返回响应给客户端。 Servlet通常被部署在Java Web容器(如Apache Tomcat)中。
64 1
一文了解Servlet
|
JSON 前端开发 Java
Servlet详解(下)
Servlet详解
75 0
|
前端开发 JavaScript 应用服务中间件
Servlet1(2)
Servlet1(2)
69 0
|
XML JavaScript 前端开发
servlet详解
servlet详解
|
Java 应用服务中间件
Servlet详解
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。 狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
154 1