JSP
1、JSP简介
1.1、概念
- Java Server Pages,Java服务端页面
- 一种动态的网页技术,其中既可以定义HTML、JS、CSS等静态内容,还可以定义Java代码的动态内容
- JSP = HTML + Java
1.2、作用
- 简化开发,避免了Servlet中直接输出HTML标签
2、JSP导入
2.1、导入JSP坐标
-
<dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency>
2.2、创建JSP文件
- IDEA —> New —-> JSP….
2.3、编写HTML标签和Java代码
-
<body> <h1> 我是JSP </h1> <% System.out.println("我是Java代码"); %> </body>
-
PS
- 这里的Java代码输出语句有可能会因为JDK版本太高导致JSP报错说无法编译此类
- 解决办法是换JDK成低版本的(如1.8)
3、JSP原理
- JSP本质上就是一个Servlet
- JSP在被访问的时候,由JSP容器(Tomcat)将其转换为Java文件(Servlet),再由JSP容器(Tomcat)将其编译,最终对外提供服务,该服务的提供者其实就是这个字节码文件
- 查看JSP生成的java源码
4、JSP脚本
- JSP脚本用于在JSP页面内定义Java代码
- JSP脚本分类
- 1. <%…%>
- 内容会直接放到
_jspService()
方法中
- 内容会直接放到
- 2.<%=…%>
- 内容会放到
out.print()
中,作为out.print()
的参数
- 内容会放到
- 3.<%!…%
- 内容会放到
_jspService()
方法之外,被类直接包含
- 内容会放到
- 1. <%…%>
- 源码示例
5、JSP缺点
- 由于JSP页面内,既可以定义HTML标签,又可以定义Java代码,造成了以下问题:
- 书写麻烦,特别是复杂的页面
- 阅读麻烦
- 复杂度高,运行需要依赖于各种环境,JRE,JSP容器,JavaEE…..
- 占内存和磁盘,JSP会自动生成.java和.class文件占用磁盘,运行的是.class文件占用内存
- 调试困难,出错后,需要找到自动生成的.java文件进行调试
- 不利于团队协作,前端人员不会Java,后端人员不精HTML
- ….
- JSP现在在企业中已经被淘汰
- 发展历程
6、EL表达式
6.1、EL的概念
- Expression Language:表达式语言,用于简化JSP页面内的Java代码
6.2、主要功能
- 获取数据
6.3、语法
${expression}
${brands}
:获取域中存储的key为brands的数据
6.4、JavaWeb中的四大域对象
- page
- 当前页面有效
- request
- 当前请求有效
- session
- 当前会话有效
- application
- 当前应用有效
6.5、EL表达式获取数据的顺序
- 会依次从这4个域中寻找,直到找到为止
6.6、示例
-
Servlet
-
@WebServlet("/demo02") public class ServletDemo02 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.准备数据 List<Brand> brands = new ArrayList<>(); brands.add(new Brand(2,"优衣库","优衣库",200,"优衣库,服适人生",0)); brands.add(new Brand(3,"小米","小米科技有限公司",1000,"为发烧而生",1)); brands.add(new Brand(5,"华为","华为科技有限公司",1000,"为发烧而生",1)); brands.add(new Brand(6,"三只松鼠","三只松鼠",100,"三只松鼠,好吃不上火",1)); // 2.存储数据到request域中 request.setAttribute("brands", brands); request.setAttribute("username", "zhangsan2"); request.setAttribute("age", 162); // 3.转发到jsp request.getRequestDispatcher("04el.jsp").forward(request, response);
-
-
JSP
-
<body> username: ${username}<br/> brands: ${brands} </body>
-
7、JSTL标签
7.1、概念
-
JSP标准标签库(Jsp Standarded Library),使用标签取代JSP页面上的Java代码
-
eg
-
<c:if test="${flag == 1}"> 男 </c:if> <c:if test="${flag == 2}"> 女 </c:if>
-
7.2、标签类型
7.3、JSTL的使用
-
1.导入坐标
-
<dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
-
-
2.在JSP页面上引入JSTL标签库
-
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-
3.使用
-
<c:if test="...">...</c:if>
,test用于定义条件表达式-
<c:if test="${flag == 1}"> 男 </c:if> <c:if test="${flag == 2}"> 女 </c:if>
-
-
<c:forEach>
:相当于for循环(跟Java中的for循环类似,有增强for循环和普通for循环)-
增强for循环
-
items
:被遍历的容器 -
var
:遍历产生的临时变量 -
varStatus
:遍历状态对象 -
<c:forEach items="${brands}" var="brand"> <tr align="center"> <td>${brand.id}</td> <td>${brand.brandName}</td> <td>${brand.companyName}</td> <td>${brand.description}</td> </tr> </c:forEach> <%--相当于Java代码中的增强for循环 for (Brand brand : brands) { Integer id = brand.getId(); String imgUrl = brand.getImgUrl(); String brandName = brand.getBrandName(); String companyName = brand.getCompanyName(); } --%>
-
-
普通for循环
-
begin
:开始数 -
end
:结束数 -
step
:步长 -
<c:forEach var="i" begin="0" end="10" step="1"> ${i} </c:forEach> <%--相当于Java代码中的普通for循环 for (int i = 0; i <= 10; i++) { System.out.println(i); } --%>
-
-
-
8、MVC模式和三层架构
8.1、MVC模式
- MVC是一种分层开发的模式
- M:Model,业务模型,处理业务
- V:View,视图,界面展示
- C:Controller,控制器,处理请求,调用模型和视图
- MVC的好处
- 职责单一,互不影响
- 有利于分工协作
- 有利于组件重用
8.2、三层架构
- 表现层,业务逻辑层,数据访问层
- 表现层
- 接收请求,封装数据,调用业务逻辑层,响应数据
- 业务逻辑层
- 对业务逻辑进行封装,组合数据访问层中的基本功能,形成复杂的业务逻辑功能
- 数据访问层
- 对数据库的CRUD基本操作
- 表现层
8.3、MVC模式和三层架构之间的关系
9、基于JSP的品牌信息管理案例
- 完成品牌数据的增删改查操作
- 项目结构
- 查询所有
- 添加品牌信息
- 修改品牌信息
- 回显数据
- 修改数据
- 回显数据
- 删除品牌信息
- 前端发送具体要删除的id的请求,web层接收id,调用service中的delete方法,然后delete方法请求Dao层的Mapper接口,执行删除SQL语句,最后完成删除
- 项目结构
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/278728.html