博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.1servlet入门和MVC模型
阅读量:3967 次
发布时间:2019-05-24

本文共 5683 字,大约阅读时间需要 18 分钟。

一.Servlet

JSP的不足:1.虽然JSP页面可以书写Java代码,但是开发效率极低

2.不能导入jar包,代码自动补全等不支持,影响开发。

而JSP的本质是一个Java类.这种类被称之为Servlet

1.Servlet概念

Servlet: Server applet : 运行在服务端的小程序.Servlet就是服务端一个用于接收客户端的请求和向客户端做出响应的程序.

在实际工作中,Servlet的概念,分为狭义和广义的.

狭义的Servlet是一个小程序.

广义的servlet其实是一个Java类,是一个实现了Servlet接口的类.

深度理解 :

1.Web服务器使用HTTP协议来传输数据。在用户请求一个URL时web服务器就将网页发送给客户端, 在这里,我们发现,用户/客户端只能向服务器请求静态网页。如果用户想要根据自己的输入来读取网页,这种方式就不能满足用户的要求。为了动态的响应客户不同的请求而产生了servlet类,里面有请求和响应对象,servlet()专门去处理用户信息。

容器的概念:容器就是程序运行时需要的环境。Tomcat是servlet的运行环境,所以Tomcat是servlet容器。

2.Servlet的作用

读取客户端信息(传递的信息,请求头信息).(获取客户端数据)

处理信息.(处理数据)

响应数据.(返回数据: 业务数据,响应头信息).

3.如何使用Servlet

Servlet: Java类,是一个实现了Servlet接口的类.

1.创建一个类,实现Servlet接口,但实现后需要重写的方法太多所以一般是继承Servlet的实现类HttpServlet,选择需要重写的方法。

继承这个类要导入的包 import javax.servlet.http.HttpServlet;

public class ServletDemo01 extends HttpServlet  {
private static final long serialVersionUID = -2597540888550505998L; @Override public void init() throws ServletException {
System.out.println("================init================"); } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("================service================"); } @Override public void destroy() {
System.out.println("================destroy================"); }}

2.注册(让服务器知道有一个servlet)Servlet并配置(让用户知道如何访问该servlet)Servlet 提供访问方式(web.xml就是用来配置servlet的)

配置web.xml是让servlet容器知道所发送过来的请求是由那个servlet处理,然后把httprequest和httpresponse对象注入到该servlet中。

注意复制类的全路径要点类下面的,直接复制类是它的绝对路径

1.注册:先写servlet标签,再写name和class

2.配置:先写servlet—mapping标签,再写name和url—pattern。注意/不能掉。

ergou
--2
com.sxt.controller.ServletDemo01
--4
ergou
--2
/ergou.html
--1

3.在浏览器上输入http://127.0.0.1:8080/aaa/ergou.html

项目名加访问地址,在控制台就会输出打印内容。 配置的的执行顺序如上图。在浏览器输入这个地址后,向服务器发送请求,服务器根据这个请求找到处理该请求的servlet,执行其中的service()等方法。

注意:

  1. tomcat中servlet是一个单例模式,每个servlet类只会创建一次对象。注意,servlet是非线程安全的。

在使用时,不要定义成员变量,若定义了,且参与了运算,会出现线程安全问题。

  1. 当servlet配置了load-on-startup,且值大于0时,tomcat启动时,会默认创建Servlet对象。
1.详解url-pattern

映射的概念

两个[非空集合]A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。

可以理解为一个servlet根据URL的不同可以匹配一个或者多个,

1.作用:匹配并处理客户端发出的请求

2.匹配顺序

该标签处理客户端请求的顺序为:

(1)完全匹配

/test/userList.do

完全匹配就是等值匹配,它是最先被匹配到的客户端请求。

(2)路径匹配

/* 匹配根路径下的全部请求

路径匹配类似于模糊匹配,对于/list、listInfo.do、checkInfo.action、index.jsp、abc.css、my.js等等url请求,

都可以被匹配到。这种匹配的顺序排在完全匹配后面。

(3)扩展名匹配

.do匹配全部action 结尾的请求

.css 匹配全部 css结尾的请求
说明:这种匹配匹配在开发中用的比较多。
结论:容器会首先查找完全匹配,如果找不到,再查找目录匹配,如果也找不到,就查找扩展名匹配。

2.servlet的实现原理在这里插入图片描述

1.tomcat启动,解析所有web应用web.xml

2.将web.xml中的配置信息,解析wrapper对象

​ 2.1. 类全路径

​ 2.2.servlet名称:项目名称/servlet别名

​ 2.3.servlet的映射地址

3.将servlet信息放入servlet容器。

4.当有请求进入,从servlet容器中查找,对应的servlet信息

5.调用该servlet的service方法,提供服务器。

4.Servlet的生命周期

Servlet 生命周期: init----> service ----> detory

init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。

service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。
destroy():仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

生命周期也就是工作过程详细描述如下:

(1) 装载Servlet,这一项操作一般是动态执行的。然而,Servlet通常会提供一个管理的选项,用于在Servlet启动时强制装载和初始化特定的Servlet

(2) Server创建一个Servlet实例

(3) Server调用Servlet的init方法

(4) 一个客户端请求到达Server

(5) Server创建请求对象和响应对象

(6) Server激活Servlet的service方法,传递请求和响应对象作为参数

(7) service方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息

(8) service方法使用响应对象的方法。将响应传回Server,最终到达客户端。Service方法可能激活其他方法以处理请求。如doGet,doPost或其他程序员自己开发的方法

(9) 对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此servlet的service方法,将这两个对象作为参数传递给它,如此重复以上的循环,但无需再次调用init方法,Servlet一般只初始化一次

(10) 当Server不再需要Servlet时,比如当Server要关闭时,Server调用Servlet的destroy

5.Servlet与JSP区别

​ 简单的说,SUN首先发展出Servlet,其功能比较强劲,体系设计也很先进,只是编写和修改HTML非常不方便。 只能一句句输出(后面会说到),后来SUN推出了类似于ASP的镶嵌型的JSP,把JSP TAG镶嵌到HTML语句中,这样,就大大简化和方便了网页的设计和修改。

新型的网络语言如ASP,PHP,JSP都是镶嵌型的script语言。

具体区别如下:

1.Jsp是对Servlet的一种简化。jsp经编译,后就变成了Servlet.(JSP的本质就是Servlet类,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)

2.Servlet中没有内置对象,jsp有九大内置对象。

3.Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。

4.Servlet能够很好地组织业务逻辑代码,但是在Java源文件中通过字符串拼接的方式生成动态HTML内容会导致代码维护困难、可读性差。

JSP虽然规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑同样也是不可取的

5.使用jsp主要是通过内置的对象调用方法来实现,使用servlet是通过先继承HttpServlet 然后创建请求响应对象,重写对应的方法实现的。

6.MVC模型

既然JSP和Servlet都有自身的适用环境,那么能否扬长避短,让它们发挥各自的优势呢?答案是肯定的——MVC(Model-View-Controller)模式非常适合解决这一问题。

MVC模式(Model-View-Controller)把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller):

  • Controller——负责转发请求,对请求进行处理
  • View——负责界面显示
  • Model——业务功能编写(例如算法实现)、数据库设计以及数据存取操作实现

在JSP/Servlet开发的软件系统中,这三个部分的描述如下所示:

img

而在JavaWeb开发中,利用各种技术优点和缺点.一般使用:

Servlet充当控制层.。JSP:充当视图层。Model:相关Java代码.

详细介绍

MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的

是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别
用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

模型-视图-控制器(MVC)是Xerox PARC在二十世纪八十年代为编程语言Smalltalk-80发明的一种

软件设计模式,已被广泛使用。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到越
来越多的使用ColdFusion和PHP的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有
很多好处,但也有一些缺点。
MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
Model(模型)表示应用程序核心(比如数据库记录列表)(数据模型)。
View(视图)显示数据(数据库记录)。
Controller(控制器)处理输入输出(写入数据库记录)。
MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制 .

Model: 是应用程序中用于处理应用程序数据逻辑的部分.

数据逻辑部分:数据校验,数据的持久化相关处理.

View(视图) :是应用程序中处理数据的部分.

处理数据:显示数据,输入数据.(界面)

Controller(控制器) :是应用程序中处理用户交互的部分.

7.MVC模型的优点:

降低了程序耦合性,提高了代码的复用性,提高了程序的可维护性,提高了程序的可读性,提高了扩展性,提高了开发效率,等等套话 。但是,提高了程序结构的复杂性.

随着开发的发展,从MVC模型,演变:

MVP: 移动端 MVVM:vue.js

转载地址:http://nqyki.baihongyu.com/

你可能感兴趣的文章
platform设备添加流程(转载)
查看>>
platform设备添加流程(转载)
查看>>
GCC编译关键字“__attribute_…
查看>>
GCC编译关键字“__attribute_…
查看>>
Linux对I/O端口资源的管理( …
查看>>
Linux对I/O端口资源的管理( …
查看>>
[转载]Linux内核中的platfor…
查看>>
[转载]Linux内核中的platfor…
查看>>
IO端口和IO内存 (转载)
查看>>
IO端口和IO内存 (转载)
查看>>
Linux内核驱动模块
查看>>
Linux内核驱动模块
查看>>
linux中同步例子(完成量completion…
查看>>
linux中同步例子(完成量completion…
查看>>
Linux驱动中completion接口…
查看>>
Linux驱动中completion接口…
查看>>
顺序和屏障 收藏
查看>>
顺序和屏障 收藏
查看>>
LINUX内核调试相关--oops信息的…
查看>>
LINUX内核调试相关--oops信息的…
查看>>