一、Servlet的介绍
1、What is Servlet?
Servlet(Server Applet),全称Java Servlet,主要用来服务程序,是由sun公司提供的一门用于开发动态Web资源的技术。Servlet是运行在服务器上的一个小程序,用来处理服务器的请求。就像我们现在所用的网页,都是通过浏览器来进行访问。我们使用的浏览器先发送请求,服务器接受到浏览器的请求后,并对其进行处理,这也就是我们经常所说的B/S模型(客户端与服务器的交互模型)。
2、Servlet的作用
一般来说,servlet专门用来接受客户端的请求,专门接受客户端的请求数据,然后去调用底层service去处理数据,并返回结果。
servlet的三大作用域:
1、request(请求):作用范围是一次请求和响应,在三个作用域中最小。
2、session(会话):在一次会话过程中,它的作用域就一直存在。
3、servletcontext:作用域最大,作用于整个服务器中
servlet的核心作用:
1、接受客户端请求,从而完成操作任务。
2、动态生成页面网页。
3、将包含结果数据的动态网页响应给客户端。
3、Servlet的生命周期
- 实例化:servlet容器创建servlet对象。默认创建servlet实例的时机:当我们发送servlet对应的请求时(在使用时创建)。类似单例模式中的懒加载方式。希望容器一旦启动,就自动创建servlet实例通过load-on-startup=1设置,正数数值越低优先级别越高,优先实例化
-
初始化:servlet实例一旦创建,就开始初始化一些参数配置,我们可以做一些参数配置,比如编码,可以在web.xml或注解中配置
-
就绪状态:当发送对应的servlet请求时,会调用service()方法,注意此时不会重新创建servlet实例,也不会调用init()方法
-
销毁状态:调用了destroy()方法后,当前servlet实例将会被标记为回收垃圾,会对servlet实例进行清除处理
4、Servlet的目录结构
webapp:存放部署的web项目
WEB-INF:存放web项目的核心内容
web.xml:web的配置文件
index.html/index.css/index.jsp/image…:存放一些写好的前端页面等等
因为idea会自动处理部署的文件并打包成war包存储在out文件夹中,因此我们使用idea时不用自己创建classes文件夹
5、Servlet创建核心目录结构(以IDEA为例)
可以用idea
6、MVC思想(Model View Controller)
MVC(Model View Controller)是软件工程中的一种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
优点:
- 耦合性低,方便维护,可以利于分工协作
- 重用性高
缺点:
- 使得项目结构变得较为复杂,对开发人员要求高
三层结构的思想
三层架构通常意义上的三层架构就是将整个业务应用划分为:界面层、业务逻辑层、数据访问层。
区分层次的目的即为了“高内聚低耦合” 的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。
因此在servlet一般都是和MVC思想联合起来使用。使用三层架构的目的就是为了耦合度低,达到解耦的目的。
二、Servlet的使用流程
1、Servlet的开发步骤
a.配置xml文件
把项目打包成war包形式
<packaging>war</packaging>
导入servlet包的坐标
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
2、Servlet代码的示例(以查询全部数据为例)
package com.yu.web;
import com.yu.pojo.Brand;
import com.yu.service.BrandService;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;
@WebServlet("/selectAllServlet")
public class SelectAllServlet extends HttpServlet {
private BrandService service = new BrandService();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.调用BrandService完成查询
List<Brand> brands = service.selectAll();
//2.存入request域中
request.setAttribute("brands",brands);
//3.转发到brand.jsp
request.getRequestDispatcher("/brand.jsp").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
一般每一个Servlet中都会有doGet和doPost方法,这是接受请求的两种方式,一般都把操作写在doGet这个请求方法中,在doPost方法中可以直接调用doGet的方法数据。同时,一般servlet都会继承HttpServlet这个对象,再进行页面数据的接受和处理。一个web项目,一般每个功能的实现(注册、登录、增删查看)都要有对应的Servlet对象,方可实现其功能。
Servlet中四个重要的对象:
HttpServletRequest 请求对象:获取请求信息
HttpServletResponse 响应对象:设置响应对象
ServletConfig对象 servlet配置对象
ServletContext对象 servlet的上下文对象
以上为我学习Servlet的一些小总结,如有错误,欢迎指正。