目录
一、servlet
1.简介
2.要素
3.特性
4.Servlet处理机制
5.生命周期
init() 方法
service() 方法
doGet() 方法
doPost() 方法
destroy() 方法
二、 MVC
1.简介
2.特点
低耦合
重用性高
可维护性高
三、jar 包
1.介绍
2.意义
3.导入jar包的步骤
1.下载相应的jar包文件
2.将下载好的jar文件复制到相应位置
3.配置IDEA导入jar文件(lib不存在,即第一次导入jar文件)
一、servlet
1.简介
在Web服务器端加载并运行的Java应用程序具体运行在Servlet引擎管理的JVM上。Servlet容器负责Servlet和用户的通信以及调用Servlet的方法。Servlet和用户的通信采用请求/响应模式。用于以动态响应客户机请求形式扩展Web服务器(Web Container)的功能。Servlet是开发服务器端应用程序的一个很好选择, Servlet与JSP结合使用,能提供更强大的服务器端功能。
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Servlet 是 Java Web 应用中最核心的组件
Servlet 运行在 Servlet 容器中,能够为各种各样的客户请求提供相应服务。Servlet 能够轻而易举地完成以下任务:
- 动态生成 HTML 文档
- 把请求转发给同一个 Web 应用中的其他 Servlet 组件
- 把请求转发给其他 Web 应用中的 Servlet 组件
- 读取客户端的 Cookie,以及向客户端写入 Cookie
- 访问其他服务器资源(如数据库或基于 Java 的应用程序)
Servlet 之所以有如此高的本领,主要有两个原因:
- Servlet 是用 Java 语言编写出来的类,只要开发人员有着深厚的 Java 编程功底,就可以编写出各类复杂的 Servlet
- Servlet 对象由 Servlet 容器缔造,能驾轻就熟地调用容器中的各种资源。
2.要素
下面是一个最简单的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;
@WebServlet("/index")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().append("Hello World!");
}
}
- 在程序实现的角度,一个Servlet是实现了javax.servlet.Servlet接口(针对HTTP通讯协议,可以是更加具体的javax.servlet.http.HttpServlet抽象类)的子类
- doGet()方法中定义了处理HTTP GET请求的动作,在例子中是将"Hello World!"作为相应内容返回
- HttpServletRequest对象中封装了HTTP请求信息,通过该对象可以访问HTTP请求数据(Header,表单,URL等等)
- HttpServletResponse可以用来生成HTTP响应内容,这里仅仅是写入了一个字符串
- @WebServlet("/index")注解表明只有请求的路径是/index时,才会执行该Servlet生成返回内容
3.特性
1.可移植性:依托于Java语言的跨平台
2.可扩展性,高效:单例多线程,不像CGI一次请求一个实例
3.安全的:依托Java特性,更安全,少错误
4.Servlet处理机制
Servlet容器监听某网络端口,接受并读取客户端发送而来的HTTP请求后,将其分发至指定的Servlet进行处理,Servlet的service()方法的两个参数HttpServletRequest和HttpServletResponse正是对HTTP请求和响应的封装,Servlet接受请求后,可以进行响应的处理:
图中的四种处理响应的方式,都是通过HttpServletResponse对象来完成的:
5.生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
- Servlet 初始化后调用 init () 方法。
- Servlet 调用 service() 方法来处理客户端的请求。
- Servlet 销毁前调用 destroy() 方法。
- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
现在让我们详细讨论生命周期的方法。
init() 方法
init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化,就像 Applet 的 init 方法一样。
Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是您也可以指定 Servlet 在服务器第一次启动时被加载。
当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。
init 方法的定义如下:
public void init() throws ServletException {
// 初始化代码...
}
service() 方法
service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
下面是该方法的特征:
public void service(ServletRequest request,
ServletResponse response)
throws ServletException, IOException{
}
service() 方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,您不用对 service() 方法做任何动作,您只需要根据来自客户端的请求类型来重写 doGet() 或 doPost() 即可。
doGet() 和 doPost() 方法是每次服务请求中最常用的方法。下面是这两种方法的特征。
doGet() 方法
GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet() 方法处理。
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代码
}
doPost() 方法
POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代码
}
destroy() 方法
destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。destroy 方法定义如下所示:
public void destroy() {
// 终止化代码...
}
二、 MVC
1.简介
模型-视图-控制器(Model-View-Controller),简称为MVC。MVC是一种先进的设计结构,其目的是以会话的形式提供方便的GUI支持。MVC首先出现在Smalltalk编程语言中。
MVC是一种通过3个不同部分构造一个软件或组件的理想办法。
- 模型(model)用于存储数据的对象。
- 视图(view)为模型提供数据显示的对象。
- 控制器(controller)处理用户的交互操作,对于用户的操作做出响应,让模型和视图进行必要的交互,即通过视图修改,获取模型中的数据;当模型中的数据变化时,让视图更新显示。
从面向对象的角度看,MVC结构可以使程序更具有对象化特性,也更容易维护。在设计程序时,可以将某个对象看作“模型”。然后为“模型”提供恰当的显示组件,即“视图”。为了对用户的操作做出响应,可以选择某个组件做“控制器”,当触发事件时,通过“视图”修改或得到“模型”中维护着的数据,并让“视图”更新显示。
2.特点
低耦合
降低了视图与业务逻辑间的双向偶合,比如jsp,如果更改控制层,不用重新一起编译视图层,哪一部分需要修改,只用改对应的部分,不会牵连到其他层。
重用性高
多个视图可以请求访问一个服务器端,由一个服务器端处理逻辑,比如手机端和电脑端的访问,视图可能有差别,但用的服务器里的代码都是一样的
可维护性高
因为视图层和逻辑层分开了,所以项目的维护和修改更加容易。
三、jar 包
1.介绍
jar包就是 Java Archive File,顾名思义,它的应用是与 Java 息息相关的,是 Java 的一种文档格式,是一种与平台无关的文件格式,可将多个文件合成一个文件。jar 包与 zip 包非常相似——准确地说,它就是 zip 包,所以叫它文件包。jar 与 zip 唯一的区别就是在 jar 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,该文件是在生成 jar 文件的时候自动创建的,作为jar里面的"详情单",包含了该Jar包的版本、创建人和类搜索路径Class-Path等信息,当然如果是可执行Jar包,会包含Main-Class属性,表明Main方法入口,尤其是较为重要的Class-Path和Main-Class,咱们一会在后续的内容里面会进行详细地讲解。
注:jar包主要是对class文件进行打包,而java编译生成的class文件是平台无关的,这就意味着jar包是跨平台的,所以不必关心涉及具体平台的问题。
2.意义
当开发了一个程序以后,程序中有很多的类,如果需要提供给别人使用,发给对方一大堆源文件是非常不好的,因此通常需要把这些类以及相关的资源文件打包成一个 jar 包,把这个 jar 包提供给别人使用,同时提供给使用者清晰的文档。这样他人在拿到我们提供的jar之后,就能方便地进行调用。
3.导入jar包的步骤
1.下载相应的jar包文件
找到你需要的jar包并下载下来。
2.将下载好的jar文件复制到相应位置
在书写代码的与src同级目录下创建一个新的lib文件夹(当lib文件夹不存在时如是操作),并将所需的jar文件复制粘贴到文件夹中,如下图所示
可以看到我已经将三个jar文件移入lib文件夹中了,此时jar文件我们并不能进行查看,也不能使用。
3.配置IDEA导入jar文件(lib不存在,即第一次导入jar文件)
要想使导入的jar包可以使用还需要以下操作:点击左上角的File选项选择Project Structure 。
找到libraries,点击 + 符号选择java。
选择你需要使用到jar库的src文件夹并点击ok。
清除无用的文件并导入jar文件,完成后点击右下角apply进行应用。
再在左侧选择Modules,在右侧点击 + 符号选择library并选定存放jar文件的src文件,点击Add Selected,Apply,Ok完成添加,如下图:
完成操作后可以看到左边的jar文件都可以展开了,jar文件也就导入成功了。