Java Web
Tomcat 安装 Tomcat官网:https://tomcat.apache.org/ 启动和配置 启动和关闭 Tomcat 访问测试:https://localhost:8080/ 可以配置启动的端口号(conf\server.xml) tomcat的默认端口号为:8080 mysql:3360 http:80
Tomcat
安装
Tomcat官网:https://tomcat.apache.org/
启动和配置
启动和关闭 Tomcat

可以配置启动的端口号(conf\server.xml)
-
tomcat的默认端口号为:8080
-
mysql:3360
-
http:80
-
https:443
<Connector potr="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>xml可以配置主机的名字
-
默认主机名称为:localhost-->127.0.0.1
-
默认网站应用存放的位置为:webapps
<Host name="kbws.com" appbase="wwebapps"
unpackWARs="true" autoDeploy="true"/>xml面试题
请你谈谈网站是如何访问的!
-
输入一个域名,回车
-
检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名的映射
-
有:直接返回对应的ip地址,这个地址中,有我们需要访问的web程序,可以直接访问
-
没有:去DNS服务器去找,找到的话就返回,找不到就返回找不到

发布一个 Web 网站
将自己写的网站,放到服务器(Tomcat)中指定的web应用的文件夹(webapps)下,就可以访问了
网站应有的结构:
--webapps:Tomcat服务器的web目录
-Root
-kuangstudy:网站的目录名
-WEB-INF
-classes:java程序
-lib:web应用所依赖的jar包
-web.xml:网站配置文件
-index.html 默认的首页
-static
-css
-style.css
-js
-img
-.......xmlHTTP
什么是 HTTP
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当
-
文本:html,字符串,~.....
-
超文本:图片,音乐,视频,定位,地图.......
-
默认端口:80
HTPS:安全的
- 默认端口:443
HTTP 请求
客户端---发送请求(Request)---服务器
百度:
Request URL: https://www.baidu.com/ 请求地址
Request Method: GET get方法/post方法
Status Code: 200 OK 状态码:200
Remote(远程) Address: 110.242.68.4:443xmlAccept: text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9 语言
Cache-Control: max-age=0
Connection: keep-alivexml请求行
-
请求行中的请求方式:GET
-
请求方式:Get/Post
-
get:一次请求能够携带的参数较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但高效
-
post:一次请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但不高效
请求头
Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 ISo8859-1
Accept-Language:告诉浏览器他的语言环境
Cache-Control:缓存控制
Connection: 告诉浏览器,请求完成是断开还是保持连接
HOST:主机 xmlHTTP响应
服务器---响应---客户端
百度:
Cache-Control: private 缓存控制
Connection: keep-alive 连接
Content-Encoding: gzip 编码
Content-Type: text/html;charset=utf-8 类型xml响应体
Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 ISo8859-1
Accept-Language:告诉浏览器他的语言环境
Cache-Control:缓存控制
Connection: 告诉浏览器,请求完成是断开还是保持连接
HOST:主机
Refrush:告诉客户端,多久刷新一次
Location:让网页重新定位 xml响应状态码
200:相应成功
3xx:请求重定向
4xx:找不到资源 404
5xx:服务器代码错误 500 502:网关错误
Servlet
简介
-
Servlet是sun公司开发动态web的一门技术
-
Sun在这些API中提供的一个接口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个步骤:
-
编写一个类,实现Servlet接口
-
把开发好的Java类部署到web服务器中
把实现了Servlet程序的Java程序叫做,Servlet
HelloServlet
Servlet接口sun公司有两个默认的实现类:HttpServlet,GenericServlet
一、构建一个空白Maven项目,删掉里面的src目录,之后的学习就在这个项目里建立Moudel;这个空的工程就是Maven的主工程
Servlet依赖:
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>xmlJSP依赖:
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<!--Tomcat10的依赖-->
<dependency>
<groupId>jakarta.servlet.jsp</groupId>
<artifactId>jakarta.servlet.jsp-api</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>xml二、关于Maven父子工程的理解
父项目中会有
<modules>
<module>servlet-01</module>
</modules>xml子项目中会有
<parent>
<artifactId>demo3</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>xml父项目中的Java子项目可以直接使用
son extends fatherjava三、Maven 环境优化
1、修改web.xml为最新的
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
</web-app>xml2、将Maven的结构搭建完整
四、编写一个Servlet程序
1、编写一个普通类
2、实现Servlet接口,这里我们直接继承HttpServlet
public class HelloServlet extends HttpServlet {
//由于get或者post只是请求实现的不同方式,可以相互调用,业务逻辑都一样
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter();//相应流
writer.print("Hello,Servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}java五、编写Servlet的映射(在web.xml中)
为什么需要映射:我们写的是Java程序,但是需要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务器中注册我们写的Servlet,还需要给他一个浏览器能够访问的路径
<!--注册Servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.java.Servlet.HelloServlet</servlet-class>
</servlet>
<!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>xml一个Servlet要对应一个Class文件
六、配置 Tomcat
注意项目发布的路径
七、启动测试
问题:Tomcat10 无法实例化类
Tomcat10 对 Servlet 依赖包级目录改变,Maven 导入依赖时应该导入:
<dependency>
<groupId>jakarta.servlet.jsp</groupId>
<artifactId>jakarta.servlet.jsp-api</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>xmlServlet详解
核心接口和类
在Servlet体系结构中,除了实现Servlet接口,还可以通过继承GenericServket和HttpServlet类,实现编写
Servlet接口
在Servlet API中最重要的是Servlet接口,所有的Servlet都会直接或间接的与该窗口发生关系,或是直接实现该接口,或间接继承自实现了该接口的类
该接口包含以下五个方法:
init(ServletConfig config)
ServletConfig getServletConfig()
service(ServletRequest req,ServletResponse res)
String getServletInfo()
destroy()javaGenericServlet抽象类
GenericServlet 抽象类使得编写 Servlet 变得容易。它提供的生命周期方法 init 和 destroy 的简单实现,要编写一般的 Servlet,只需要重写 service 方法即可
HttpServlet类
HttpServlet是继承GenericServlet的基础上进一步的拓展
提供将要被子类化以创建适用于Web站点的HttpServlet抽象类。HttpServlet的子类至少重写一个方法,该方法通常是以下这些方法之一:
doGet,如果servlet支持HTTP GET请求
doPost,用于HTTP POST请求
doput,用于HTTP PUT请求
doDelete,用于HTTP DELETE请求javaServlet的两种创建方式
实现接口 Servlet
/*
* Servlet创建的第一种方式:实现接口Servlet
* */
public class HelloServlet02 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}java该方式比较麻烦,需要实现接口中的所有方法
继承 HttpServlet(继承)
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException, IOException {
PrintWriter writer = resp.getWriter();//相应流
writer.print("Hello,Servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}java常见错误
HTTP Status 404 资源找不到
- 第一种情况:地址书写错误
- 第二种情况:地址没有问题,把IDEA项目中的out目录删去,然后重新运行
- Servlet地址配置重复。
- Servlet地址配置错误。javaServlet两种配置方式
使用 web.xml 配置
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<!--注册Servlet-->
<servlet>
<!--名称-->
<servlet-name>hello</servlet-name>
<!--Servlet的全称名称-->
<servlet-class>com.java.servlet.HelloServlet</servlet-class>
<!--启动的优先级,数字越小越先起作用-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--映射配置-->
<!--Servlet的请求路径-->
<servlet-mapping>
<!--名称-->
<servlet-name>hello</servlet-name>
<!--资源匹配规则:精确匹配-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<!--Error-->
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>com.java.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>xmlurl-pattern定义匹配规则,取值说明:
| 精准匹配 | /具体的名称 | 只有url路径是具体的名称的时候才会触发Servlet |
|---|---|---|
| 后缀匹配 | *.xxx | 只要是以xxx结尾的就匹配触发Servlet |
| 通配符匹配 | /* | 匹配所有请求,包含服务器的所有资源 |
| 通配符匹配 | / | 匹配所有请求,包含服务器的所有资源,不包括.jsp |
load-on-startup
-
元素标记容器是否应该在web应用程序的时候就加载这个Servlet
-
它的值必须是一个整数,表示servlet被加载的先后顺序
-
如果该元素的值为负数或没有设置,则容器会当Servlet被请求时再加载
-
如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个Servlet,值越小,servlet的优先级越高,就越被优先加载。值相同时,容器就会自己选择顺序来加载
使用注解
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException, IOException {
PrintWriter writer = resp.getWriter();//相应流
writer.print("Hello,Servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}java@WebServlet注解常用属性
-
name:Servlet名字(可选)
-
value:配置url路径,可以配置多个。例:
@WebServlet(value = {"/bs","/bbs"}) -
urlPatterns:配置url路径,和value作用一样,不能同时使用
-
loadOnStartup配置Servlet的创建的时机,如果是0或者正数,启动程序时创建,如果是负数,则访问时创建。数字越小优先级越高
Servlet应用
request对象
在Servlet中用来处理客户端请求需要用到doGet或doPost方法的request对象

get 和 post 的区别
get请求:
get请求的数据会放在url之后,以?分隔URL和传输数据,参数之间以&连接
get方式明文传递,数据量小,不安全
效率高,浏览器默认请求方法为GET请求
对应的Servlet方法是doGet
post请求:
post 是把提交的数据放在 HTTP 包的 body 中
密文传输数据,数据量大,安全
效率相对没有GET高
对应的方法是doPost
request主要方法
| 方法名 | 说明 |
|---|---|
| String getParameter(String name) | 根据表单组件名称获取提交数据 |
| void setCharacterEncoding(String charset) | 指定每个请求的编码 |
request 应用
HTML页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<form action="rs" method="get">
用户名:<input type="text" name="username"><br/>
密码:<input type="password" name="password"><br/>
<input type="submit" value="注册">
</form>
</body>
</html>htmlServlet代码:
@WebServlet(value = "/rs")
public class RegisterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取用户请求发送的数据
String username=req.getParameter("username");
String password=req.getParameter("password");
System.out.println("提交的数据"+username+"\t"+password);
}
}javaget请求收参问题
产生乱码是因为客户端和服务器沟通的编码不一样导致的,解决的办法为:在客户端和服务端设置一个统一的编码,之后就按照此编码进行数据的传输和接收
get 中文乱码
在Tomcat7及以下版本,客户端以UTF-8的编码传输数据到客户端,而服务端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器与客户端沟通的编码不一致才导致产生中文乱码
解决办法:在接收到指定数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题
Tomcat8的版本中get方式不会出现乱码,因为服务器对url的编码格式可以进行自动转换
解决get中文乱码的代码:
@WebServlet("/GETServlet")
public class GetServlet extend HttpServlet{
private static final long serialVersionUID=1L;
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取表单提交的信息
String name=req.getParameter("name");
name=new String(name.getBytes("ISO8859-1"),"UTF-8");
//获取年龄
String age=req.getParameter("age");
//服务端打印输出
System.out.println(req.getRemoteAddr()+"发来信息:姓名:"+name+"--->年龄:"+age);
}
}javapost 中文乱码
由于客户端是以UTF-8字符编码将表单传输到服务器端的,因此服务器也需要设置以UTF-8字符编码进行接收
解决方案:使用从ServletRequest接口继承来的setCharacterEncoding(charset)方法进行统一的编码设置
@WebServlet("/GETServlet")
public class GetServlet extend HttpServlet{
private static final long serialVersionUID=1L;
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置请求参数的编码格式---对GET无效
req.setCharacterEncoding("UTF-8");
//获取表单提交的信息
String name=req.getParameter("name");
//服务端打印输出
System.out.println(req.getRemoteAddr()+"发来信息:姓名:"+name);
}
}javaresponse对象
response对象用于相应客户请求并向客户端输出信息

response主要方法
| 方法名称 | 作用 |
|---|---|
| setHeader(name,value) | 设置响应信息头 |
| setContentType(String) | 设置响应文件类型、响应式的编码格式 |
| setCharacterEncoding(String) | 设置服务端响应内容编码格式 |
| getWriter() | 获取字符输出流 |
案例:使用response对象向浏览器输出HTML内容,实现用户登录后,输出Login Success
PrintWriter writer = resp.getWriter();
out.println("<html>");
out.println("<head><title>login</title></head>");
out.println("<body>");
out.println("<h1>Login Success!</h1>");
out.println("</body>");
out.println("</html>");go如果输出包含中文,则出现乱码,因为服务器默认使用ISO8859-1编码响应内容
解决输出中文乱码
-
设置服务器响应的编码格式
-
设置客户端响应内容的头文件内容的文件类型及编码格式
不推荐:
response.setCharacterEncoding("utf-8");//设置响应编码格式为utf-8
response.setHeader("Content-type","text/html;charset=UTF-8")java推荐:
同时设置服务端的编码格式和响应端的文件类型及响应时的编码格式
response.setContentType("text/html;charset=UTF-8");javaServlet原理
Servlet是由Web服务器调用,Web服务器在收到浏览器请求后,会:

Mapping问题
1、一个Servlet可以指定一个映射路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>xml2、一个Servlet可以指定多个映射路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>xml3、一个Servlet可以指定通用映射路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>xml4、默认请求路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>xml5、指定一些后缀或前缀等等
<!--可以自定义后缀实现请求映射
注意,*前面不能加项目映射的路径
hello/sdhawuhd.qinjiang-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.qinjiang</url-pattern>
</servlet-mapping>xml6、优先级问题
指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求
<!--404-->
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>com.java.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>xml问题
IDEA创建maven web项目出现“No archetype found in remote catalog. Defaulting to internal catalog”:
1、新建一个名为archetype-catalog.xml 的文件
内容为:
<?xml version="1.0" encoding="UTF-8"?>
<archetype-catalog xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd">
<archetypes>
<archetype>
<groupId>com.fr</groupId>
<artifactId>fr-server</artifactId>
<version>7.0</version>
<repository>
http://git.oschina.net/thinkgem/repos/raw/master
</repository>
</archetype>
<archetype>
<groupId>com.fr</groupId>
<artifactId>fr-third</artifactId>
<version>7.0</version>
<repository>
http://git.oschina.net/thinkgem/repos/raw/master
</repository>
</archetype>
</archetypes>
</archetype-catalog>xml2、将archetype-catalog.xml 放到自己创建的仓库里
3、为IDEA新建项目设置 archetype 的使用方式为 local, File--new project Settings--Settings for new project--Build, Execution, Deployment --Build Tools --Maven -- Runner

4、重新构建 Maven 项目
5、settings.xml 用 Maven 安装目录下的那个,本地仓库用自己创建的那个, 在下边新建一项:键为 archetypeCatalog,值为 internal

6、问题解决
ServletContext
web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用
共享数据
我在这个Servlet中保存的数据,可以在另一个Servlet中拿到

public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String name="张三";
servletContext.setAttribute("username",name);
}
}javapublic class GetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String username = (String) context.getAttribute("username");
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
resp.getWriter().print("名字"+username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}java<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>com.java.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>getc</servlet-name>
<servlet-class>com.java.servlet.GetServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getc</servlet-name>
<url-pattern>/getc</url-pattern>
</servlet-mapping>xml获取初始化参数
在 web.xml 中
<!--配置一些web应用初始化参数-->
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
</context-param>xmlprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String url = context.getInitParameter("url");
resp.getWriter().print(url);
}javaMVC框架
概念
MVC又称为编程模式,是一种软件设计思想,将数据操作、页面展示、业务逻辑分为三个层级(模块),独立完成,又相互调用
-
模型层(Model)
-
视图(View)
-
控制器(Controller)
MVC模式详解
MVC并不是Java独有的,现在几乎所有的B/S的架构都采用了MVC模式
-
视图View:视图即是用户看到并与之交互的界面,比如HTML(静态资源),JSP(动态资源)等等
-
控制器Controller:控制器即是控制请求的处理逻辑,对请求处理,负责流程跳转(转发和重定向)
-
模型Model:对客观世界的一种代表和模拟(业务模拟、对象模拟)

优点
-
低耦合性:模块与模块之间的关联性不强,不与某一具体实现产生密不可分的关联性
-
高维护性:基于低耦合性,可做到不同层级之间的功能模块灵活更换、插拔
-
高重用性:相同的数据库操作,可以服务于不同的业务处理。将数据作为独立模块,提高重用性
MVC在框架中的应用
MVC模式被广泛用于Java的各种框架中,比如Struts2、SpringMVC等等都用到了这种思想

三层架构与 MVC
三层架构
View层(表示界面层)、Service层(业务逻辑层)、DAO层(数据访问层)

MVC与三层架构的区别
-
MVC强调的是视图和业务代码的分离。严格的说MVC关注的是Web层。View就是单独的页面,如JSP、HTML等,不负责业务处理,只负责数据的展示。而数据封装到Model里,由Controller负责在V和M之间传递。MVC强调业务和视图分离
-
三层架构是“数据访问层”、“业务逻辑层”、“表示层”,指的是代码之间的解耦,方便维护和复用