JavaWeb核心篇(3)——JSP,MVC,三层架构
2022/9/11 1:23:20
本文主要是介绍JavaWeb核心篇(3)——JSP,MVC,三层架构,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
JavaWeb核心篇(3)——JSP,MVC,三层架构
在本篇文章中我们会学习到JSP,MVC,三层架构
虽然JSP已经快被时代所淘汰,但是在一些老旧的工作场所还是有在使用,所以了解一下也不为过
至于MVC和三层架构,应该是属于核心思想部分
JSP
首先我们先来简单介绍一下JSP:
- 概念:Java Server Pages ,Java服务端页面
- 一种动态的网页技术,其中既可以定义HTML,JS,CSS等静态内容,还可以定义Java代码的动态内容
- JSP = HTML + Java
- JSP的作用:简化开发,避免了在Servlet中直接输出HTML标签的问题
我们先来了解一下未开发JSP之前,Servlet是如何输出HTML标签的:
// Servlet通过writer的write方法进行一行一行的输出: // 例如: Writer.write("<html>"); Writer.write("<body>"); Writer.write("username"); Writer.write("</body>"); Writer.write("</html>");
所以在古老版本,JSP的开发实际上很大程度的遍历了编程
JSP快速入门
JSP需要导入jar包才可以使用,这里我们采用Maven来进行操作:
- 导入JSP坐标(注意:使用范围为provided)
<dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency>
- 创建JSP文件
- 编写HTML和Java代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>hello jsp</h1> <% System.out.println("hello,jsp~"); int i = 3; %> <%="hello"%> <%=i%> <%! void show(){} String name = "zhangsan"; %> </body> </html>
JSP原理
在介绍JSP的脚本语法之前,我们先了解一下JSP的原理:
- JSP本质上是一个Servlet
- JSP在被访问时,由JSP容器(Tomcat)将其转换为Java文件(Servlet),在由JSP容器(Tomcat)将其编译,最终对外提供服务的其实是这个字节码文件
JSP脚本
JSP中可以直接书写HTML代码,因为JSP会自动将文本带入到out的write方法中去
但是Java的内容不能直接输出,需要采用脚本方法
JSP的脚本主要分为三种:
- <% ... %>:
- 内容会直接放到_jspService()方法中去
- 属于正常Java代码,在运行时调用
<% System.out.println("hello,jsp~"); %>
- <%= ... %>:
- 内容会放到out.print()方法中,作为out.print()的参数
- 作为输出
<=% "Hello JSP" %>
- <%! ... %>:
- 内容会放到_jspService()方法之外,被类直接包含
- 作为成员函数或者成员变量
<!% String name; void method(){}; %>
注意:在<%%> 中不可以输入HTML,如果想使用for或if等方法需要在{}之间插入%><%来结束脚本内容来书写HTML标签
代码示例:
<%@ page import="com.itheima.pojo.Brand" %> <%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% // 查询数据库 List<Brand> brands = new ArrayList<Brand>(); brands.add(new Brand(1,"三只松鼠","三只松鼠",100,"三只松鼠,好吃不上火",1)); brands.add(new Brand(2,"优衣库","优衣库",200,"优衣库,服适人生",0)); brands.add(new Brand(3,"小米","小米科技有限公司",1000,"为发烧而生",1)); %> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="button" value="新增"><br> <hr> <table border="1" cellspacing="0" width="800"> <tr> <th>序号</th> <th>品牌名称</th> <th>企业名称</th> <th>排序</th> <th>品牌介绍</th> <th>状态</th> <th>操作</th> </tr> <% for (int i = 0; i < brands.size(); i++) { Brand brand = brands.get(i); %> <tr align="center"> <td><%=brand.getId()%></td> <td><%=brand.getBrandName()%></td> <td><%=brand.getCompanyName()%></td> <td><%=brand.getOrdered()%></td> <td><%=brand.getDescription()%></td> <% if(brand.getStatus() == 1){ //显示启用 %> <td><%="启用"%></td> <% }else { // 显示禁用 %> <td><%="禁用"%></td> <% } %> <td><a href="#">修改</a> <a href="#">删除</a></td> </tr> <% } %> </table> </body> </html>
JSP缺点
我们之前说到JSP已经被时代所淘汰,所以我们现在来谈论一下JSP的缺点:
- 书写麻烦,特别对于复杂的页面
- 阅读麻烦
- 复杂度高,运行时需要依赖各种环境
- 占用内存和磁盘,JSP会自动生成Java和class文件占磁盘,运行的是class文件占内存
- 调试困难,出错后需要找到自动生成的Java代码调试
- 不利于团队协作,现在一般都是前后端分离,技术不协调
最开始由Servlet单独运作,到后来由JSP单独运作,再后来由Servlet和JSP合作运行:
- Servlet:负责逻辑处理,封装数据
- JSP:负责获得数据,便于展现数据
到了如今已经基本完全被HTML和Ajax替代
EL表达式
EL表达式是一种表达式语言,用于简化JSP页面的Java代码:
- 主要功能:获得数据
- 语法:${expression}
${brands}:表示获得域(request)中存储的key为brands的数据
然后我们来介绍一下JavaWeb中的四大域对象:
- page:当前页面有效
- request:当前请求有效
- session:当前会话有效
- application:当前应用有效
EL表达式获得数据,会依次从这四个域中寻找,直到找到为止
域值范围: page < request < session < application
JSTL标签
我们使用JSTL标签需要先导入jar包,这里我们同样使用Maven导入:
- 导入坐标
<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency>
- 在JSP页面上导入JSTL标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 使用即可
<c:if> </c:if>
因为JSTL并不常用,我们在这里只介绍简单的if和for循环:
- if语句
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>Title</title> </head> <body> <%-- c:if:来完成逻辑判断,替换java if else --%> <%-- <c:if test="true"> <h1> true </h1> </c:if> <c:if test="false"> <h1> false </h1> </c:if> --%> <c:if test="${status ==1}"> 启用 </c:if> <c:if test="${status ==0}"> 禁用 </c:if> </body> </html>
- for语句
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="button" value="新增"><br> <hr> <table border="1" cellspacing="0" width="800"> <tr> <th>序号</th> <th>品牌名称</th> <th>企业名称</th> <th>排序</th> <th>品牌介绍</th> <th>状态</th> <th>操作</th> </tr> <!-- c:forEach -> for(int i : nums) items -> nums var -> i varStatus -> 状态码; varStatus有两个属性, status.index 属性:当前迭代的元素在集合中的索引,从 0 开始。 status.count 属性:当前迭代的元素是集合中第几个元素,从 1 开始。 --> <c:forEach items="${brands}" var="brand" varStatus="status"> <tr align="center"> <%--<td>${brand.id}</td>--%> <td>${status.count}</td> <td>${brand.brandName}</td> <td>${brand.companyName}</td> <td>${brand.ordered}</td> <td>${brand.description}</td> <c:if test="${brand.status == 1}"> <td>启用</td> </c:if> <c:if test="${brand.status != 1}"> <td>禁用</td> </c:if> <td><a href="#">修改</a> <a href="#">删除</a></td> </tr> </c:forEach> </table> <hr> <!-- c:forEach -> 对标普通循环 begin:开始数 end:结束数 var:当前数 step:步长(begin = begin + step) --> <c:forEach begin="1" end="10" step="1" var="i"> <a href="#">${i}</a> </c:forEach> </body> </html>
MVC模式
首先我们先来了解一下MVC:
- MVC是一种分层开发的模式
- M:Model,业务模型,处理业务
- V:View,视图,页面展示
- C:Controller,控制器,处理请求,调用模型和视图
MVC优点:
- 责任单一,互不影响
- 有利于分工协作
- 有利于组件重用
三层架构
我们对上面三层进行简单的解释:
- 表现层:接受请求,封装数据,调用业务逻辑层,响应数据
- 业务逻辑层:对业务逻辑进行封装,组合数据访问层层中基本功能,形成复杂的业务逻辑功能
- 数据访问层:对数据库的CRUD基本操作
结束语
好的,关于JSP和MVC三层架构我们就到这里
附录
该文章属于学习内容,具体参考B站黑马程序员陈老师的JavaWeb课程
这里附上链接:01-JSP概述&快速入门&原理_哔哩哔哩_bilibili
这篇关于JavaWeb核心篇(3)——JSP,MVC,三层架构的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-20测试人员都是画画大神,让我看看谁还不会用代码图?
- 2024-05-20年薪百万的程序员都在用的摸鱼方式……
- 2024-05-19永别了,微服务架构!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了