🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Servlet [TOC] ## 概述 在之前的课程中,我们虽然学习了JSP(HTML+JAVA),但也一直在强调让**JAVA的归JAVA,HTML的归HTML**,但还是有很多的服务型代码写在了页面中,比如我们之前定义的`xxxService.jsp`页面,导致了多种类型代码的大量混用。 ## 什么是Servlet Servlet是sun公司提供的一门用于开发动态web资源的技术。 Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下3个步骤: * [x] 编写页面,向服务器输出数据。 * [x] 编写一个Java类,实现servlet接口,接收页面发送的数据,并返回数据给页面 * [x] 把开发好的Java类和页面部署到web服务器中。   按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet >[info] 总结一下:在 Web 容器中有浏览器访问地址的特殊 Java 类。在开发中,Servlet 一般充当的就是控制器的角色。 ## 为什么要使用Servelt之MVC MVC模式(Model-View-Controller)是软件工程的一种软件框架,系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller): Controller——负责转发请求,对请求进行处理 View——负责界面显示 Model——业务功能编写、数据存取操作实现、实体类等 在JSP/Servlet开发的软件系统中,这三个部分的描述如下所示: ![](https://img.kancloud.cn/2d/6a/2d6a3942f72ea75489339053027878c1_600x232.png) 1. Web浏览器发送HTTP请求到服务端,被Controller(Servlet)获取并进行处理(例如参数解析、请求转发) 2. Controller(Servlet)调用核心业务逻辑——Model部分,获得结果 3. Controller(Servlet)将逻辑处理结果交给View(JSP),动态输出HTML内容 4. 动态生成的HTML内容返回到浏览器显示 >[warning] MVC模式在Web开发中的好处是非常明显,它规避了JSP与Servlet各自的短板,Servlet只负责业务逻辑而不会通过append()方法动态生成HTML代码;JSP中也不会充斥着大量的业务代码。这大大提高了代码的可读性和可维护性。 ## Servlet的页面跳转 **进行服务器的跳转 - 转发** `request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);` 在实际开发中,我们会把 jsp 页面放到 WEB-INF 中,在 WEB-INF 中的资源属于服务端的资源,是不能被外部链接直接访问的。 在 WebContent 的直接目录下,我们一般放置静态资源,比如图片、CSS、Javascript 等。但是也有特殊的情况,有的应用做的比较好,会被上述的静态资源也通过 Servlet 进行转化后访问。 **进行客户端的跳转 - 重定向** `response.sendRedirect("pages/index3.jsp");` 在客户端跳转中是**不可以**使用`request.setAttribute()`进行赋值后在跳转到的 jsp 通过**request.getAttribute()**获取值的,一定要理解什么是服务器端跳转,什么是客户端跳转,和值应该用什么方式传递。 > **整个 Web 应用程序的开发可以理解为就是一个传值的游戏。**