目录
一、JSP
1.概述
2.主要作用
3.快速入门
4.JSP原理
5.JSP脚本
(1)主要分类
6.JSP使用
7.JSP缺点
8.EL表达式
(1)概述
(2)主要功能
(3)使用
(4)JavaWeb中的四大域对象
9.JSTL
(1)快速入门
一、JSP
了解即可,jsp还有用的吗~
1.概述
Java Server Pages,Java服务端页面
一种动态的网页技术,其中既可以定义 HTML、JS、CSS等静态内容,还可以定义Java代码的动态内容
JSP = HTML + Java
2.主要作用
简化开发,避免了在Servet中直接输出HTML标签
3.快速入门
-
导入JSP坐标
-
创建JSP文件
-
编写html和java代码
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<!-- 与Servlet一样,Tomcat封装了jsp的jar包-->
<scope>provided</scope>
</dependency>
Java代码需要加上<%java代码%>
4.JSP原理
JSP本质上是一个Servlet
5.JSP脚本
JSP脚本用于在 JSP页面内定义Java代码
(1)主要分类
-
<%..%>:内容会直接放到 _jspService()方法之中
-
<%=...%>:内容会放到out.print()中,作为out.print()的参数
-
<%!..%>:内容会放到_jspService()方法之外,被类直接包含
6.JSP使用
展示用户信息
体验并不好~
<%@ page import="com.util.SqlSessionFactoryUtils" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactory" %>
<%@ page import="org.apache.ibatis.session.SqlSession" %>
<%@ page import="com.mapper.UserMapper" %>
<%@ page import="com.pojo.User" %>
<%@ page import="java.util.List" %>
<%
final SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
final SqlSession sqlSession = sqlSessionFactory.openSession();
final UserMapper mapper = sqlSession.getMapper(UserMapper.class);
final List<User> users = mapper.selectAll();
sqlSession.close();
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>hello JSP</h1>
<table border="1px solid black">
<tr>
<th>用户id</th>
<th>用户名</th>
<th>邮箱</th>
</tr>
<%
for (int i = 0; i < users.size(); i++) {
final User user = users.get(i);
%>
<tr>
<td><%= user.getId()%></td>
<td><%= user.getUsername()%></td>
<td><%= user.getPassword()%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
测试:
7.JSP缺点
由于 JSP页面内,既可以定义 HTML标签,又可以定义Java代码,造成了以下问题
-
书写麻烦:特别是复杂的页面
-
阅读麻烦
-
复杂度高:运行需要依赖于各种环境,JRE,JSP容器,JavaEE.
-
占内存和磁盘:JSP会自动生成.java和.class文件占磁盘,运行的是.class文件占内存调试困难:出错后,需要找到自动生成的.java文件进行调试不利于团队协作:
-
前端人员不会 Java,后端人员不精 HTML
-
...
所以淘汰是必然的,但是得知道,史前老项目还有用的~
8.EL表达式
(1)概述
Expression Language 表达式语言,用于简化JSP页面内的Java代码
(2)主要功能
获取数据
//获取域中存储的key为expression的数据
${expression(表达式)}
(3)使用
-
先写一个html,发送请求
<form action="/getInfo" method="post">
<input type="submit" value="查询用户数据">
</form>
-
创建一个GetInfoServlet
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取数据
final SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
final SqlSession sqlSession = sqlSessionFactory.openSession();
final UserMapper mapper = sqlSession.getMapper(UserMapper.class);
final List<User> users = mapper.selectAll();
sqlSession.close();
//将数据存到Request域中
request.setAttribute("info",users);
//请求转发
request.getRequestDispatcher("/el.jsp").forward(request,response);
}
-
创建一个el.jsp
${info}
<%--下方可选,获取数据--%>
<%
final Object info = request.getAttribute("info");
System.out.println(info.toString());
%>
测试:
可能会出现的问题:
${info}会原样输出,如下图:
解决:
参考这个,不写了
el表达式不生效(原样输出问题不被解析)问题的解决办法 - yanggb - 博客园 (cnblogs.com)
(4)JavaWeb中的四大域对象
-
page:当前页面有效
-
request:当前请求有效
-
session:当前会话有效
-
application:当前应用有效
el表达式获取数据,会依次从这4个域中寻找,直到找到为止
9.JSTL
JSP标准标签库(sp Standarded Tag Library),使用标签取代JSP页面上的Java代码
(1)快速入门
-
导入坐标
-
在jsp页面上引入JSTL标签库
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
jsp:
<%--
逻辑判读
test属性:必须,值为逻辑表达式
--%>
<c:if test="${info != null }">
<h1>有值</h1>
<%--
item:需要遍历的容器
var:临时变量
与foreach一样
--%>
<table border="1px solid black">
<tr>
<th>序号</th>
<th>ID</th>
<th>用户名</th>
<th>邮箱</th>
</tr>
<c:forEach items="${info}" var="user" varStatus="status">
<tr>
<%-- index从0开始,count从1开始--%>
<td>${status.count}</td>
<%-- ${user.id} => Id => getId()--%>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.email}</td>
</tr>
</c:forEach>
</table>
<%--
begin:开始数
end:结束数
step:步长
var:循环变量
--%>
<c:forEach begin="1" end="10" step="1" var="i">
<a href="">${i}</a>
</c:forEach>
</c:if>
<c:if test="${info ==null }">
<h1>无值</h1>
</c:if>
更多自行查阅吧
标准标签库:
JSP 标准标签库(JSTL) | 菜鸟教程 (runoob.com)
JSP 表达式语言_w3cschool