[TOC]
# Servlet
## 什么是 Servlet
在 Web 容器中有浏览器访问地址的特殊 Java 类。
在开发中,Servlet 一般充当的就是控制器的角色。
## MVC模式
MVC模式(Model-View-Controller)是软件工程的一种软件框架,系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller):
Controller——负责转发请求,对请求进行处理
View——负责界面显示
Model——业务功能编写、数据存取操作实现、实体类等
在JSP/Servlet开发的软件系统中,这三个部分的描述如下所示:
![](https://box.kancloud.cn/84e22786d607684943558bf0725b2282_600x232.png)
1. Web浏览器发送HTTP请求到服务端,被Controller(Servlet)获取并进行处理(例如参数解析、请求转发)
2. Controller(Servlet)调用核心业务逻辑——Model部分,获得结果
3. Controller(Servlet)将逻辑处理结果交给View(JSP),动态输出HTML内容
4. 动态生成的HTML内容返回到浏览器显示
> MVC模式在Web开发中的好处是非常明显,它规避了JSP与Servlet各自的短板,Servlet只负责业务逻辑而不会通过append()方法动态生成HTML代码;JSP中也不会充斥着大量的业务代码。这大大提高了代码的可读性和可维护性。
## 如何创建 Servlet
创建带注解的 Servlet
*第一个 Servlet*
~~~
package com.ntqn.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class IndexServlet
*/
@WebServlet("/IndexServlet.php")
public class IndexServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public IndexServlet() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("<h1>Hello,Sevlet</h1>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
~~~
> 1、需要继承 HttpServlet;
> 2、相关 Servlet 的类文件不是存在于 JDK 的标准开发包中的,而是存在于 Tomcat 的 lib 中servlet-api.jar 中
> 3、在 Servlet 中存在 doPost 和 doGet 方法,我们一般会任一方法中调用另外一个方法,因为doPost 和 doGet 的客户端请求不一样,但是一般业务处理逻辑都是一样的;
> 4、在类的注解中 @WebServlet("/IndexServlet2.php"),表示执行该 Servlet 的请求路径;
> 5、Servlet 可以在 Eclipse 中进行引导式的创建,但是其本质还是一个普通的 class 文件,并无特殊之处,只不过是需要 web 容器的支持才能运行的。
## 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 应用程序的开发可以理解为就是一个传值的游戏。**
- 数据库
- 数据库介绍
- MySQL的安装
- SQL
- 表基本操作
- 修改数据语句
- 数据检索操作
- 多表数据操作
- 练习题
- JAVA
- JAVA 介绍
- JAVA 运行原理
- JDK 配置
- 类和对象
- 数据类型
- 变量
- 直接量
- 运算符
- 流程控制
- 数组结构
- 面向对象
- 隐藏和封装
- 深入构造器
- 类的继承
- 多态
- 包装类
- final 修饰符
- 抽象类
- 接口
- 集合框架
- 常用类学习
- 设计模式-单例模式
- 异常处理
- JDBC
- JSP&Servlet
- Web应用
- Tomcat
- JSP
- Scriptlet
- Page 指令
- 包含指令
- 跳转指令
- 用户注册实例
- JSP练习
- 内置对象
- Servlet
- 过滤器
- Web分层思想
- EL表达式
- JSTL
- 分页实现
- AJAX&JSON
- 开发步骤
- 路径问题
- Log4j
- Mybatis框架
- 框架介绍
- Mybatis简单实现
- 表基本操作
- 优化配置文件
- 表字段名与实体类属性名不同的解决方案
- 一对一关联
- 一对多关联
- Spring框架
- IOC/DI
- 注入对象
- 注解方式 IOC/DI
- AOP
- 注解方式AOP
- 注解方式测试
- Spring MVC框架
- Hello SpringMVC
- 视图定位
- 注解方式
- 接受表单数据
- 客户端跳转
- Session
- 中文问题
- 上传文件
- SSM整合
- 整合步骤
- 分页
- PageHelper
- 连接池
- CRUD
- 事务管理
- JSON
- Maven
- 介绍
- 下载与配置MAVEN
- MAVEN仓库
- ECLIPSE中的MAVEN设置
- ECLIPSE下创建MAVEN风格的JAVA项目
- 添加JAR包
- 创建MAVEN风格的JAVA WEB项目
- 创建SSM项目
- 使用ECLIPSE导入一个MAVEN风格的SSM项目
- 教学管理
- 学员名录
- 周测统计
- 20180608
- 20180706
- 20180721
- 课堂作业
- 练习