JSP快速入门教程
一、概念
- Java Server Page,Java服务端页面
- 一种动态的网页技术,其中即可以定义HTML、JS、CSS等静态的内容,还可以定义Java代码的动态内容
- JSP = HTML + JAVA
- JSP的作用:简化开发,避免在Servlet中直接输出HTML标签
二、JSP 快速入门
- 导入JSP坐标
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
- 创建JSP文件(webapp目录下)
- 编写HTML标签和JAVA代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo</title>
</head>
<body>
<h1>Hello,JSP</h1>
<%
System.out.println("Hello, JSP");
%>
</body>
</html>
三、JSP 原理
- JSP 本质上就是一个Servlet
- JSP 在被访问时,由JSP容器(Tomcat)将其转换为 Java文件(Servlet),再由JSP容器(Tomcat)将其编译,最终对外提供服务的其实就是这个字节码文件
四、JSP 脚本
- JSP 脚本用于在JSP页面内定义Java代码
- JSP 脚本分类:
-
<%…%>:内容会直接放到_jspService()方法之中
-
<%=…%>:内容会放到out.print()中,作为out.print()的参数
-
<%!..%>:内容会放到_jspService()方法之外,被类直接包含
-
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>hello</title>
</head>
<body>
<h1>Hello,JSP</h1>
<%
System.out.println("Hello, JSP");
int i = 0;
%>
<%="hello"%>
<%=i%>
<%!
String name = "zhangsan";
void show(){}
%>
</body>
</html>
五、JSP缺点
- 由于JSP页面内,即可以定义HTML标签,又可以定义Java代码,造成了以下问题
- 书写麻烦:特别是复杂的页面
- 阅读麻烦
- 复杂度高:运行需要依赖于各种环境,JRE,JSP容器,JavaEE…
- 占内存和磁盘:JSP会自动生成.java和.class文件占磁盘,运行的是.class文件占内存
- 调试困难:出错后需要找到自动生成的.java文件进行调试
- 不利于团队协作:前端人员不会Java,后端人员不精HTML
- …
六、EL 表达式
- 概念:Expression Language 表达式语言,用于简化JSP页面内的Java代码
- 主要功能:获取数据
- 语法:${expression}
- JavaWeb中的四大域对象
- page:对当前页面有效
- request:对当前请求有效
- session:对当前会话有效
- application:对当前应用有效
EL表达式获取数据,会依次从这4个域中寻找,直到找到为止
@WebServlet("/demo1")
public class ELDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 准备数据
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));
//2. 存储到request域中
request.setAttribute("brands", brands);
//3. 转发到el.jsp
request.getRequestDispatcher("/el.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>el</title>
</head>
<body>
${brands}
</body>
</html>
七、JSTL 标签
- 概念:JSP标准库标签库(JSP Standarded Tag Library),使用标签取代JSP页面上的Java代码
JSTL快速入门
- 导入坐标
<!--jstl-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>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" %>
- 使用
@WebServlet("/demo1")
public class ServletDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 准备数据
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));
//2. 存储到request域中
request.setAttribute("brands", brands);
//3. 转发到jstl_forEach.jsp
request.getRequestDispatcher("/jstl_forEach.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
<%@ 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>
<%--
forEach相当于:
for(var : items){
...
}
varStatus:遍历对象状态:index 从0开始; count 从1开始
--%>
<c:forEach items="#{brands}" var="brand" varStatus="status">
<tr>
<%--<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 == 0}">
<td>禁用</td>
</c:if>
<td><a href="#">修改</a> <a href="#">删除</a></td>
</tr>
</c:forEach>
</table>
<c:forEach begin="0" end="10" step="1" var="i">
<a href="#">${i}</a>
</c:forEach>
</body>
</html>
声明: 本文内容整理自:黑马程序员新版JavaWeb基础教程,Java web从入门到企业实战完整版