【后端开发】06-JavaWeb技术

JavaWeb技术

1. 概述

1.1. JSON格式

JSON(JavaScript Object Notation,Java对象简谱)是一种轻量级的数据交换格式,使用独立于编程语言的文本格式来存储和表示数据

1.1.1. 语法格式
  • 数据存储在键值对key: value中(键必须是字符串),数据间用分隔
  • 值的类型可以是数值、字符串、逻辑值、数组、对象和null,但不能是日期和函数
  • 使用{}表示对象,[]表示数组,\转义字符
  • 通过.[...]访问对象的属性值,使用索引[]访问数组的值
1.1.2. 类型转换

JS对象转换

// JSON串转JS对象
JSON.parse(text[, reviver])

// JS对象转JSON串
JSON.stringify(value[, repalcer[, space]])
  • text:要解析的JSON字符串
  • reviver:解析对象的成员均调用的函数
  • value:转换为JSON格式的值(通常为数据或对象)
  • replacer:转换结果的函数或数组
  • space:数字指定空格的数目,非数字指定符号

Java对象转换

  1. 导入jar

  2. 创建ObjectMapper对象

  3. 调用转换方法

    // JSON串转Java对象
    objectMapper.readValue(jsonStr, ClassName.class);
    
    // Java对象转JSON串
    objectMapper.writeValueAsString(object);
    

1.2. XML格式

XML(EXtensible Markup Language,可扩展标记语言)是一种标记语言,使用自定义标签结构化、存储和传输数据

1.2.1. 文档结构
<?xml version="1.0" encoding="UTF-8"?>
<root>
	...
</root>
  • XML声明用于指定XML版本和字符集编码,若存在必须放在第一行
  • 文档内容由多个元素组成,所有元素嵌套形成树结构
  • 必须包含根元素,该元素所有元素的父元素
  • 使用<!-- -->括起来的内容为注释,且不能嵌套
1.2.2. XML元素
  • 元素由开始标签<name></name>和内容构成,其中标签名规则
    • 可以包含字母、数字和其他字符(不含空格),且大小写敏感
    • 不能以数字、标点、xml(忽略大小写)开头
    • 名称应简短、有描述性,且避免使用-.:
  • 开始标签可定义属性来提供附加信息,其中属性名规则
    • 用键值对key=value定义,且属性值必须加(单、双)引号
    • 属性不能包含多个值、树结构
  • 元素内容可以是其他元素、文本内容或其混合
  • 不包含任何内容的空标签也可以使用单标签表示,解析式为同一种结构
1.2.3. 实体引用
实体引用符号
&lt;(必须)<
&gt;>
&amp;(必须)&
&apos;
&quot;
1.2.4. XML约束
  • DTD约束.dtd:可以自定义标签,但受到DTD约束
  • Schema约束.xsd:所有标签、属性必须在约束中有明确定义
1.2.5. XML DOM

XML DOM定义了访问和操作XML文档的标准方法

  • XML DOM把XML文档当作树结构查看,通过DOM树可以访问、操作所有元素
  • DOM树中,元素、文本和属性被均被视为节点
1.2.6. XML解析

JS解析

  1. 创建解析器对象

    parser = new DOMParser()
    
  2. 解析xml获得DOM对象

    xmlDoc = parser.parseFromString(txt, "text/xml")
    

DOM4J解析

  1. 创建解析器对象(SAXReader)

    SAXReader saxReader = new SAXReader();
    
  2. 解析xml获得DOM对象

    Document document = reader.read(xmlInputStream);
    

1.3. Tomcat服务器

Tomcat是Apache软件基金会的一款技术先进、性能稳定且免费的Web应用服务器软件

1.3.1. Web项目标准结构
web-app					--App根目录
  ├── WEB-INF			--受保护资源(必要)
  │   ├── lib			--依赖文件
  │   └── web.xml		--配置文件
  ├── static			--静态资源(非必要)
  └── index.html		--首页文件(非必要)
1.3.2. Tomcat部署项目

通过移动项目

  • 将编译好的项目或打成的war包放在%CATALINA_HOME%/webapps

通过配置文件

  • %CATALINA_HOME%/conf/Catalina/localhost下创建web-app.xml文件指定项目路径

    <Context path="/web-app" docBase="/path/web-app" />
    
    • path:项目的访问路径,即浏览器中输入的项目名
    • docBase:项目在磁盘上的路径

1.4. HTTP协议

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是互联网上应用最广泛的一种网络协议,提供了一种发布和接收HTML页面的方法,是一个客户端和服务器请求和应答的标准

1.4.1. 基础简介

请求/响应模型

image-20230504115613961

长/短连接

长连接

  • 概念:一次链接,多次传输数据,通信结束时关闭连接
  • 版本:HTTP/1.1之后版本的默认方式
  • 特点:建立连接需要等待较长时间;建立连接后速度较高

短连接

  • 概念:一次链接,一次传输,传输结束时关闭连接
  • 版本:HTTP/1.0的默认方式
  • 特点:频繁地建立或断开连接,访问量较大时服务器响应过慢
1.4.2. 报文格式

请求报文

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 请求行:包括请求方法、资源地址(服务器上的路径)、协议版本,用空格隔开。常用方法有

    方法说明
    GET向服务器请求读取资源,参数附加在URL中且长度受限
    POST向服务器提交数据,参数封装在请求数据中且以键值对形式给出
  • 请求头部:由键/值组成,用:分割,每行一对。常用字段有

    关键字说明
    Accept客户端可识别的响应内容类型列表
    1. *:按范围将类型分组
    2. */* 指示可接受全部类型
    3. type/*指示可接受 type 类型的所有子类型
    Accept-Charset客户端支持的应答字符集
    Accept-Encoding客户端可接受的编码压缩格式
    Accept-Language客户端可接受的自然语言
    Connection连接方式,可选close 或 keep-alive
    Content-Type请求报文的数据类型
    Content-Length请求报文的数据长度
    Cookie浏览器提供的一个持久化存储数据的机制
    Host请求的主机名
    User-Agent产生请求的浏览器类型
  • 空行(必须):分隔请求头部和请求数据

  • 请求数据(POST):请求体

响应报文

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 状态行:包括协议版本、状态码、状态值,用空格隔开。状态码类型有

    状态吗说明
    1xx服务器已收到客户端请求,客户端可继续发送请求
    2xx服务器已收到客户端请求,并成功处理
    3xx服务器要求客户端重定向
    4xx客户端的请求有非法内容
    5xx服务器未能正常处理客户端的请求而出现意外错误
  • 响应头部:由键/值组成,用:分割,每行一对。常用字段有

    关键字说明
    Connection连接方式,可选close 或 keep-alive
    Content-Type响应报文的数据类型
    Content-Length响应报文的数据长度
    Location用于重定向接受者到一个新的位置
    Server服务器用来处理请求的软件信息及其版本
    Vary不可缓存的请求头列表
  • 空行(必须):分隔响应头部和响应数据

  • 响应数据:响应体

2. Servlet

Servlet(server applet)是运行在服务端的Java小程序,是由sun公司提供的一套动态资源(需要在运行时通过代码生成的资源)规范,用来接收、处理客户端请求并给浏览器提供动态资源响应

2.1. 基础简介

2.1.1. 开发步骤
  1. 创建一个JavaWeb项目
  2. 自定义HttpServlet的子类并重写请求处理方法
  3. 配置Servlet的请求映射路径
  4. 开发form标签,向Servlet发送请求
2.1.2. 资源路径

相对路径

相对路径是指资源相对于当前资源所在目录(URI)的路径,不使用/开头

说明

  • 在请求转发时,URI不发生变化会导致相对路径错误(与磁盘路径不匹配)

绝对路径

相对路径是指资源相对于某个固定根目录的路径,总是以/开头

说明

  • 绝对路径的根目录为schema://host:port,请求转发的根目录还包括项目的上下文路径
  • 设置项目的上下文路径为/可以避免上下文路径变动引起的路径失效

扩展

  • 在HTML文件的head标签添加base子标签并指定href属性,可以为相对路径(即不以/./../开头的路径)添加前缀

2.2. 请求处理

2.2.1. 处理流程
  1. 服务器软件收到请求后,根据请求报文创建HttpServletRequest对象
  2. 服务器软件创建HttpServletResponse对象用于承载响应信息
  3. 服务器软件根据请求中的资源路径寻找并实例化Servlet对象
  4. 服务器软件调用service()方法处理请求并生成响应数据
  5. 服务器软件将HttpServletResponse对象转化为响应报文
2.2.2. 重写方法
  • service方法定义处理所有类型请求的流程,doXxx方法定义了处理Xxx请求(GET、POST、PUT等)的流程
  • 重写service方法或doXxx方法均可实现请求处理,二者重写其一即可
  • 请求处理时通过HttpServletRequest对象可获取请求信息,通过HttpServletRequest对象可设置响应信息
2.2.3. 请求/响应类

HttpServletRequest类

  • javax.servlet.http.HttpServletRequest类继承ServletRequest,封装了客户端的请求信息
  • 其对象由服务器软件收到请求时创建,并作为参数传入service方法

常用方法

分类方法说明
请求行StringBuffer getRequestURL()获取客户端请求的URL
请求行String getRequestURI()获取客户端请求的URI
请求行String getScheme()获取请求协议
请求行String getProtocol()获取请求协议及版本号
请求行String getMethod()获取请求方法
请求行int getLocalPort()获取容器的端口号
请求行int getRemotePort()获取客户端程序的端口号
请求行int getServerPort()获取客户端发送请求时的端口号
请求头String getHeader(String name)获取指定请求头的值
请求头Enumeration<String> getHeaderNames()获取所有请求头的名称
请求头String getContentType()获取请求体的类型
请求头int getContentLength()获取请求体的长度
请求体Enumeration<String> getParameterNames()获取所有请求参数的名称
请求体String getParameter(String name)获取指定单值请求参数的值
请求体String[] getParameterValues(String name)获取指定多值请求参数的值
请求体Map<String, String[]> getParameterMap()获取所有请求参数的键值对集合
请求体BufferedReader getReader()获取请求体的字符输入流
请求体ServletInputStream getInputStream()获取请求体的字节输入流
其他String getServletPath()获取请求的Servlet的映射路径
其他ServletContext getServletContext()获取ServletContext对象
其他Cookie[] getCookies()获取请求中的所有Cookie
其他HttpSession getSession()获取Session对象
其他void setCharacterEncoding(String charSet)设置请求体的字符集

HttpServletResponse类

  • javax.servlet.http.HttpServletResponse继承ServletResponse,用于封装服务器的响应信息
  • 其对象由服务器软件收到请求时创建,并作为参数传入service方法

常用方法

分类方法说明
响应行void setStatus(int code)设置响应状态码
响应头void setHeader(String name, String value)设置/修改响应头的指定属性
响应头void setContentType(String contentType)设置响应头的Content-Type字段(MIME类型与字符集)
响应头void setContentLength(int length)设置响应体的字节长度
响应体PrintWriter getWriter()获取响应体的的字符输出流
响应体ServletOutputStream getOutputStream()获取响应体的的字节输出流
其他void sendError(int code, String message)设置向客户端响应错误信息(错误码、错误描述)
其他void addCookie(Cookie cookie)向响应体中添加Cookie
其他void setCharacterEncoding(String charSet)设置响应体的字符集
2.2.4. 转发和重定向(重要)

请求转发

请求转发是指服务器收到请求后,通过自身访问目标资源并将其发送给客户端

  • 是服务器的内部行为,对客户端屏蔽,通过请求对象获取RequestDispatcher实现
  • 客户端只发送一次请求,地址栏不变;服务端只产生一对请求和响应对象
  • 请求和响应对象在页面间传递,请求参数、数据在Servlet之间共享
  • 目标资源可以是静态资源、动态资源、受保护资源(WEB-INF),但不能是项目外的资源
// 获取转发器
RequestDispatcher requestDispatcher = req.getRequestDispatcher(resourcePath);

// 请求转发
requestDispatcher.forward(req, resp);
  • resourcePath:转发的目标资源路径

响应重定向

响应重定向是指服务端收到请求后,通过发送状态码和资源地址并让客户端去请求资源

  • 是客户端在服务端的提示下的客户端行为,通过响应对象调用sendRedirect方法实现
  • 客户端至少发送两次请求,地址栏会发生变化;服务端产生多对请求和响应对象
  • 请求和响应对象在页面间传递,请求参数、数据在Servlet之间不共享
  • 目标资源可以是静态资源、动态资源、项目外的资源,但不能是受保护资源(WEB-INF)
// 响应重定向
resp.sendRedirect(resourcePath);
  • resourcePath:重定向的目标资源路径

说明

  • 当请求转发和响应重定向均可实现功能时,优先使用响应重定向

2.3. 路径配置

2.3.1. 配置文件web.xml

基本格式

<web-app>
    <servlet>
        <servlet-name>servletName</servlet-name>
        <servlet-class>ServletClass</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>servletName</servlet-name>
        <url-pattern>/mappingPath</url-pattern>
    </servlet-mapping>
</web-app>
  • ServletClass:Servlet程序的全类名,使用servlet-class标签指定
  • servletName:Servlet程序的别名,使用servlet-name标签定义
  • mappingPath:Servlet程序的请求映射路径,使用url-pattern标签定义

说明

  • 一个Servlet可以对应多个请求路径,但多个Servlet不能使用相同的请求路径

常用标签

标签作用
servlet表示一个Servlet对象配置,具体由子标签指定
servlet-mapping表示一个Servlet映射配置,具体由子标签指定
context-param表示Servlet全局参数,具体由子标签指定
servlet-name指定Servlet的别名
servlet-class指定Servlet的全类名
load-on-startup指定Servlet的加载优先级
url-pattern指定Servlet的映射路径
init-param表示一个局部参数,具体由子标签指定
param-name指定参数名
param-value指定参数值

路径通配符

通配符含义
/匹配(除jsp外的)所有资源路径
/*匹配(包括jsp的)所有资源路径
/xxx/*匹配所有以xxx/为前缀的映射路径
*.xxx匹配所有以.xxx为后缀的映射路径
2.3.2. 添加注解@WebServlet

基本格式

@WebServlet(
	...
)
public class ClassName extends HttpServlet {
	...
}

常用参数

参数说明
nameServlet的别名
valueServlet的映射路径(默认参数)
urlPatternsServlet的映射路径列表,支持多个路径
loadOnStartupServlet的实例化优先级
1. 正整数,数字越小优先级越高
2. 默认值为-1,表示加载时不实例化
3. 优先级1~5已被占用,建议从6开始使用
initParamsServlet的初始参数列表,用@WebInitParam(name, value)注解赋值

扩展

  • DefaultServlet在所有Servlet查找失败时提供服务,用于响应静态资源的请求

2.4. 生命周期

Servlet对象由Servlet容器(如Tomcat)创建,其生命周期是该对象从创建到销毁的过程

  1. 实例化:在第一次请求或应用启动时调用构造器,生命周期内只执行一次
  2. 初始化:在调用构造器后调用init方法,生命周期内只执行一次
  3. 服务:在收到客户端请求时调用service方法,生命周期内可执行多次
  4. 销毁:在应用关闭时调用destory方法,生命周期内只执行一次

说明

  • Servlet对象在容器中是单例的,且被多个用户线程共享
  • Servlet存在线程安全问题,应避免定义经常发生修改的成员变量

2.5. 全局/局部配置

2.5.1. ServletConfig对象
  • ServletConfig(javax.servlet.ServletConfig)接口定义Servlet的局部配置规范
  • 其实现类对象在GenericServlet中由init方法根据初始配置参数init-param标签(initParams)赋值

常用方法

方法说明
String getServletName()获取Servlet的别名
ServletContext getServletContext()获取ServletConfig的ServletContext对象
String getInitParameter(String key)获取ServletConfig对象指定初始参数的值
Enumeration< String > getInitParameterNames()获取ServletConfig对象的初始参数名列表
2.5.2. ServletContext对象
  • ServletContext(javax.servlet.ServletContext)接口定义Servlet的全局配置规范
  • 其实现类对象根据全局配置参数context-param标签赋值

常用方法

方法说明
String getInitParameter(String key)获取ServletContext对象指定初始参数的值
Enumeration< String > getInitParameterNames()获取ServletContext对象的初始参数名列表
String getRealPath(String var)获取Servlet指定资源的部署路径
String getContextPath()获取Servlet的上下文路径(项目的部署名)
void setAttribute(String key,Object value)向应用域中添加/修改数据
Object getAttribute(String key)从应用域中获取数据
void removeAttribute(String key)向应用域中移除数据

2.6. 会话管理

2.6.1. Cookie
  • Cookie是一种键值对格式的数据,由服务器创建并通过响应头Set-Cookie返回给客户端
  • 客户端发送请求时会将获得的Cookie携带在请求头并携带到服务器中
  • Cookie存储客户端数据,容易暴露,一般不用于存储敏感信息

时效性

  • 会话级Cookie:服务器端没有明确指定存在时间
    • Cookie存在于客户端的内存上,浏览器关闭时被释放
  • 持久化Cookie:服务器端明确指定了存在时间
    • Cookie存在于客户端的硬盘上,达到预设的时间后被释放

常用API

方法说明
Cookie(String name, String value)创建Cookie对象
void setMaxAge(int expiry)设置Cookie的持久化时间,单位秒
void setPath(String uri)设置Cookie的使用路径
2.6.2. Session
  • Session用于服务端记录某个客户端的信息,由服务端创建并将JSESSIONID以Cookie形式返回给客户端
  • 客户端发送请求时会携带JSESSIONID,服务端根据其查找Session对象并提供服务

获取Session

  1. 从请求对象中获取JSESSIONID,若获取失败则创建HttpSession对象
  2. 获取成功则查找对应的Session对象,若查找失败则创建HttpSession对象
  3. 查找成功则返回已有的HttpSession对象

时效性

  • Session对象可通过配置文件的session-config.session-timeout标签或API设置
  • Session对象的默认最大无交互间隔为30min,发生交互则重置计时

常用方法

方法说明
void setMaxInactiveInterval(int expiry)设置Session的最大无交互间隔
void invalidate()设置Session失效
void setAttribute(String key, Object value)向Session对象中添加属性
Object getAttribute(String key)向Session对象中获取属性

3. 过滤器

过滤器()用于对目标资源的请求进行过滤,是JAVAEE技术规范之一

  • 用于过滤请求、对响应进行再处理,其开发规范定义在javax.servlet.Filter接口中
  • 工作位置是所有目标资源之前、请求和响应对象创建之后
  • 通过doFilter方法控制请求是否继续,如放行则继续,否则拒绝请求

3.1. 开发步骤

  1. 创建一个JavaWeb项目
  2. 自定义Filter的子类并重写doFilter方法
  3. 配置过滤器的映射路径
3.1.1. 重写方法
  • doFilter方法的请求和响应对象的类型分别是HttpServletRequest、HttpServletResponse
  • (servletRequest,servletResponse)用于放行请求
3.1.2. 路径配置

配置文件web.xml

标签作用
filter表示一个Filter对象配置,具体由子标签指定
filter-mapping表示一个Filter过滤配置,具体由子标签指定
filter-name指定Filter的别名
filter-class指定Filter的全类名
servlet-name指定Filter过滤的Servlet别名
url-pattern指定Filter过滤的路径
init-param表示一个局部参数配置,具体由子标签指定
param-name指定参数名
param-value指定参数值
  • filter-mapping可以指定过滤多条路径,且可以同时使用servlet-name和url-pattern指定

添加注解@WebFilter

参数说明
filterNameFilter的别名
valueFilter的过滤路径(默认参数)
urlPatternsFilter的过滤路径列表,支持多个路径
servletNamesFilter过滤的Servlet列表,支持多个路径
initParamsServlet的初始参数列表,用@WebInitParam(name, value)注解赋值

3.2. 生命周期

Servlet对象由Servlet容器(如Tomcat)创建,其生命周期是该对象从创建到销毁的过程

  1. 实例化:在web应用启动时调用构造器,生命周期内只执行一次
  2. 初始化:在执行构造器后调用init方法,生命周期内只执行一次
  3. 过滤:在收到客户端请求时调用doFilter方法,生命周期内可执行多次
  4. 销毁:在web应用关闭时调用destory方法,生命周期内只执行一次

3.3. 过滤器链

过滤器链是指项目中的多个过滤器按照顺序依次作用而形成的一条工作链

  • 配置文件方式的过滤器链按照filter-mapping的顺序依次触发
  • 注解方式的过滤器链按照类名的字典序依次触发
  • 配置文件方式中servlet-name匹配规则的优先级低于url-pattern规则

4. 监听器

监听器用于对域对象发生的事件或状态改变进行监听和相应处理,属于GOF设计模式中的观察者模式

4.1. 域对象

域对象是指用于存储数据和传递数据的对象,包括应用域、会话域和请求域

  • 请求域:HttpServletRequest对象,作用范围为一次请求内,用于存放请求业务有关的数据
  • 会话域:HttpSession对象,作用范围为一次会话内,用于存放会话客户端有关的数据
  • 应用域:ServletContext对象,作用范围为一个应用内,用于存放应用程序有关的数据

常用方法

方法说明
void setAttribute(String key, Object value)向域对象中添加属性
Object getAttribute(String key)从域对象中获取属性
void removeAttribute(String key)从域对象中删除属性

4.2. 监听器

4.2.1. 应用域

域对象监听器

ServletContextListener监听ServletContext对象的创建与销毁

方法说明
void contextInitialized(ServletContextEvent sce)ServletContext对象创建时调用
void contextDestroyed(ServletContextEvent sce)ServletContext对象销毁时调用

域属性监听器

ServletContextAttributeListener监听ServletContext对象中属性的添加、修改和删除

方法说明
void attributeAdded(ServletContextAttributeEvent scae)向ServletContext对象中添加属性时调用
void attributeRemoved(ServletContextAttributeEvent scae)从ServletContext对象中移除属性时调用
void attributeReplaced(ServletContextAttributeEvent scae)修改ServletContext对象中的属性时调用
4.2.2. 会话域

域对象监听器

HttpSessionListener监听HttpSession对象的创建与销毁

方法说明
void sessionCreated(HttpSessionEvent hse)HttpSession对象创建时调用
void sessionDestroyed(HttpSessionEvent hse)HttpSession对象销毁时调用

域属性监听器

HttpSessionAttributeListener监听HttpSession对象中属性的添加、修改和删除

方法说明
void attributeAdded(HttpSessionBindingEvent se)向HttpSession对象中添加属性时调用
void attributeRemoved(HttpSessionBindingEvent se)从HttpSession对象中移除属性时调用
void attributeReplaced(HttpSessionBindingEvent se)修改HttpSession对象中的属性时调用

绑定监听器

HttpSessionBindingListener监听Session中绑定监听器的增加与移除

方法说明
void valueBound(HttpSessionBindingEvent se)该类实例被添加到Session时调用
void valueUnbound(HttpSessionBindingEvent se)该类实例从Session中移除时调用

钝化/活化监听器

HttpSessionActivationListener监听Session中某个对象的序列化与反序列化

方法说明
void sessionWillPassivate(HttpSessionEvent se)该类实例和Session钝化到硬盘时调用
void sessionDidActivate(HttpSessionEvent se)该类实例和Session从硬盘活化时调用
4.2.3. 请求域

域对象监听器

ServletRequestListener监听ServletRequest对象的创建与销毁

方法说明
void requestInitialized(ServletRequestEvent sre)ServletRequest对象创建时调用
void requestDestroyed(ServletRequestEvent sre)ServletRequest对象销毁时调用

域属性监听器

ServletRequestAttributeListener监听ServletRequest对象中属性的添加、修改和删除

方法说明
void attributeAdded(ServletRequestAttributeEvent srae)向ServletRequest对象中添加属性时调用
void attributeRemoved(ServletRequestAttributeEvent srae)从ServletRequest对象中移除属性时调用
void attributeReplaced(ServletRequestAttributeEvent srae)修改ServletRequest对象中的属性时调用

5. 扩展

5.1. MVC架构模式

MVC(Model View Controller)是软件工程中的一种软件架构模式,它把软件系统分为模型(Model)视图(View)控制器(Controller)三个基本部分,实现业务逻辑、数据、界面显示代码的分离

5.1.1. 模块功能
  • M(Model):模型层,其功能为
    1. 存放和数据库对应的实体类、非数据库表完整相关的VO对象
    2. 存放对数据进行逻辑运算操作的业务处理代码
  • V(View):视图层,其功能为
    1. 存放视图相关的代码,如html、css、js等,前后端分离项目中不存在
  • C(Controller):控制层,其功能为
    1. 存放获得请求数据、准备响应数据的代码
5.1.2. 常见包
  • M(Model):模型层,常见包有
    1. 实体类包(pojo/entity/bean):存放和数据库对应的实体类和VO对象
    2. 数据库访问包(dao/mapper):存放对数据表进行CURD操作的类
    3. 服务包(service):存放对数据进行业务逻辑运算的类
  • C(Controller):控制层,,常见包有
    1. 控制层包(controller)
  • V(View):视图层

参考资料

  1. 尚硅谷全新JavaWeb教程,企业主流javaweb技术栈
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值