什么是JSP
html:静态网页,内容写完了之后,就固定下来了,不会发生改变。
Java server page(java服务器页面),动态网页!JSP=java+html JSP本质就是Servlet
它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。
JSP产生的原因
需求: 我们要向页面动态输出一个表格. 发现特别的繁琐
servlet在展示页面的时候,相当的繁琐。sun公司为了解决这个问题,参照asp开发了一套动态网页技术jsp。
jsp就是简化书写!
1. 客户端发起第一次请求xxx.jsp,服务器就会找到对应的jsp文件
2. 服务器会将jsp文件翻译成xxx_jsp.java
3. 将xxx_jsp.java编译成xxx_jsp.class
4. 服务器执行xxx_jsp.class文件 输出结果给客户端浏览器
-
JSP:是一个动态网页,在jsp中既可以写java代码,又可以写html代码,作用:简化开发
-
JSP本质就是一个Servlet
-
JSP执行流程:请求-->index.jsp-翻译->index_jsp.java-编译->index_jsp.class-->执行-->响应给浏览器
-
在目前实际开发中,jsp基本不再使用了,1.执行效率低下 2.不利于分工协作
JSP脚本
类型 | 翻译成Servlet对应的部分 | 注意 |
---|---|---|
<%...%>:Java程序片段 | 翻译成Service()方法里面的内容, 局部的 | |
<%=...%>:输出表达式 | 翻译成Service()方法里面的内容,相当于调用out.print() | 输出表达式不能以;结尾 |
<%!...%>:声明成员变量 | 翻译成Servlet类里面的内容 |
JSP&三层架构
获取数组
语法: ${key[下标]} key就是域对象里面存的key
3.3获取list
语法:${list属性名[index]}或者${list属性名.get(index)};list属性名就是存入域对象里面的key
3.4获取Map
语法:${map属性名.键} 或 ${map属性名.get("键")} 或${map属性名[键],map属性名就是存入域对象里面的key }
注意:当map的键比较特殊(eg:"1"、"a.ba.c")时,此时使用点的方式会报错,可以选择使用[]的方式。
JSTL标签库的使用
-
导入jar包
-
在要使用jstl标签的jsp页面上引入jstl标签库
-
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
if标签使用
<c:if test="返回boolean类型结果的el表达式">
<!-- 当test属性值为true的时候 执行if标签体中的内容 -->
</c:if>
choose标签的使用
<!-- 就是多重if选择结构 -->
<c:choose>
<c:when test="返回boolean类型结果的el表达式" ></c:when>
<c:when test="返回boolean类型结果的el表达式" ></c:when>
...
<c:otherwise></c:otherwise>
</c:choose>
forEach标签使用
<!--forEach遍历数据 -->
<!--forEach简单使用 -->
<c:forEach var="迭代变量" begin="开始" end="结束" step="步长" varStatus="元素状态">
${迭代变量}
</c:forEach>
<!--forEach实际使用 -->
<c:forEach items="要遍历的集合|数组" var="迭代变量" varStatus="元素状态">
${迭代变量}
</c:forEach>
JSP的开发模式一
jsp+javabean:实现
1.所有的代码都在jsp中 会存在大量代码冗余 不利于代码维护修改
2.jsp已经属于上个时代的技术了 过时了 jsp执行效率非常低 jsp-->翻译成java代码-->编译class文件-->执行
JSP的开发模式二
JSP【html】 + Servlet + JavaBean 称为MVC的开发模式.
MVC:开发模式
M:model 模型 (javaBean:处理业务封装数据)
V:View 视图 (JSP|html:展示数据)
C:controller 控制器 (Servlet:接收请求进行分发,做为控制器)
模式三: 三层架构
软件中分层:按照不同功能分为不同层,通常分为三层:表现层(web层),业务层,持久(数据库)层
表现层(web层) | com.itheima.web 编写Servlet |
业务层(service层) | com.itheima.service 编写Service类 |
持久层(数据库访问层) | com.itheima.dao 编写Dao类 |
JavaBean | com.itheima.bean 封装数据 |
工具类 | com.itheima.utils 编写工具类 |
-
分层的意义:
-
解耦:降低层与层之间的耦合性。
-
可维护性:提高软件的可维护性,对现有的功能进行修改和更新时不会影响原有的功能。
-
可扩展性:提升软件的可扩展性,添加新的功能的时候不会影响到现有的功能。
-
可重用性:不同层之间进行功能调用时,相同的功能可以重复使用。
-
缺点:代码量增多,结构复杂,当新增功能时,需要web、service、dao分别写一次。
但是利大于弊!所以今后的开发全部使用三层架构进行代码编写。
好的代码:低耦合+高内聚
.DBUtils实现事务管理
API | 说明 |
---|---|
QueryRunner() | 创建QueryRunner对象. 手动提交事务时使用 |
query(connection,String sql, Object[] params, ResultSetHandler<T> rsh) | 查询(需要传入Connection) |
update(connection,String sql, Object... params) | 更新 |