【JavaWeb】JSP详解
1、什么是JSP
JSP(全称JavaServer Pages)是由Sun公司主导创建的一种 动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术 以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
Servlet = server+applet(可以嵌套在网页里面的java程序)
如果直接使用writer.print(“数据”)的话;如果页面数据过于庞大,而且需要动态变化的时候,会给开发人员造成很大的工作量
所以能否将writer.print(“数据”)-----> 新的网页格式就会减少麻烦----->jsp就诞生了
嵌套java代码的jsp:
使用
<%= %>
来嵌套java代码<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%= int i = 0; %> <!DOCTYPE html> <html> <head> <title>JSP - Hello World</title> </head> <body> <h1><%= "Hello World!" %> </h1> <%= for (int j = 0; j < length; j++) { } %> <br/> <a href="hello-servlet">Hello Servlet</a> </body> </html>
2、JSP指令
JSP中内置的指令可以直接在JSP页面中进行使用。
导入包:
通过该条指令,可以在jsp中导入java的包,其实也是相当于导入到了javaServlet中
<%@ page import="包的地址" %>
定制错误页面:
通过该条指令,可以让该JSP在出现错误的时候,跳转到指定的错误页面
<%@ page errorPage="错误页面" %>
声明错误页面:
通过该条指令,可以声明该页面是否为错误处理页面,如果true,则表示是,当该页面声明为错误处理页面后,就可以调用exception对象来显示异常。
<%@ page isErrorPage="true" %> <%=exception.getMessage()%>
合成页面指令:
可以将指定的页面引入,但是要注意的是,这里会合并俩个页面
<%@ include file="页面地址" %>
包含页面指令:
和上面一样,但是这里不会将俩个页面合并,只是引入。
<jsp:include page="页面地址"/>
3、EL表达式
EL表达式,就是在jsp页面内置了一些对象,帮助我们获取绑定的数据
格式:
${对象名.属性名}
=${对象名.get属性()}
=${对象名["属性名"]
${对象名.属性名.属性的属性名}
${对象名.集合名[index]}
页面如何识别:
内置对象: ServletContext application, request,reponse,page…
ServletContext application 上下文对象 HttpServletRequest request 请求对象 HttpServletResponse reponse 响应对象 页面会如何寻找绑定数据:
a、首先requet(请求) ----> requestScope------->去找是否绑定属性user
b、再去session
c、再去application(上下文)
如果找到,直接映射对应java代码,要求:一定 针对pojo对象书写对应get/set方法
EL表达式的使用:
servlet:
@WebServlet("/login") public class LoginServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 实例对象 UserInfo user = new UserInfo(1, "张三", "123456"); List<Integer> list = new ArrayList(); list.add(1); list.add(2); user.setList(list); // 绑定数据 req.setAttribute("user", user); // 转发对象到index.jsp req.getRequestDispatcher("index.jsp").forward(req, resp); } }
jsp:
<%@ page import="com.moon.pojo.UserInfo" %> <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <title>JSP - Hello World</title> </head> <body> <div> <h2>1.获得属性:</h2> <%--EL表达式--%> 用户名:${user.username} <%--java写法--%> <%= ((UserInfo) request.getAttribute("user")).getUsername() %> <h2>2.集合</h2> 集合:${user.list} 集合属性:${user.list[1]} <h2>3.基础的运算</h2> ${1+2} <%--可能会出现字符串拼接--%> ${"3"+"4"} <h2>4.关系运算</h2> ${2>3} <%--等于--%> ${2 eq 3} <%--大于--%> ${2 gt 3} <%--小于--%> ${2 lt 3} </div> </body> </html>
4、Jstl标签库
我们在jsp中插入java代码,会很不方便,sun公司提供了一套标准标签库,就是Jstl标准标签库,通过jstl可以大幅度 优化我们在jsp插入的java代码
jstl标签是 一个java项目,用来帮助我们更加方便获取属性,修改属性,根据逻辑处理属性
Maven驱动包地址:
Jstl:
<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
El:解析el
<dependency> <groupId>javax.el</groupId> <artifactId>javax.el-api</artifactId> <version>3.0.0</version> </dependency>
if标签:
标签:
<c:if test=" "> </c:if>
test属性: 用来进行逻辑判断
<c:if test="${u.username=='李四'}"> 李四 </c:if>
when标签:
标签:
c:choose > c:when
相当于java中的 else if,也比较像 switch
<h6>2.when标签:if elseif elseif else</h6> <c:choose> <c:when test="${user.password='123456'}">1</c:when> <c:when test="${user.password='1234567'}">2</c:when> <c:when test="${user.password='123456789'}">3</c:when> <c:otherwise>都不满足</c:otherwise> </c:choose>
forEach标签:
标签:
<c:forEach items="" var="">
item:表示要遍历的目标
begin:从什么时候开始
end:什么是结束
varStatus:获得循环的第几次,循环的一些其他的特殊属性
<h6>3.forEach </h6> <table border="1"> <tr> <td>v.index</td> <td>i</td> <td>奇数显示</td> </tr> <c:forEach items="${user.list}" var="i" varStatus="v"> <%--<c:if test="${v.index%2==0}"> </c:if>--%> <tr class="my_${v.index%2}"> <td>${v.index}</td> <td>${i}</td> <td>${v.index*2+1}</td> </tr> </c:forEach>
5、Jstl标签库使用案例
导入Jstl库
<%--使用jstl 引入标签库--%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
jsp
<%@ page import="com.moon.pojo.UserInfo" %> <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%--使用jstl 引入标签库--%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html> <head> <title>JSP - Hello World</title> <style> <style> * { font-size: 14px; } .my_0{ background: green; } .my_1{ background: #1b6d85; } </style> </head> <body> <div> <h6>1.if标签 test属性:用来进行逻辑判断 </h6> <c:if test="${u.username=='李四'}"> 李四 </c:if> <h6>2.when标签:if elseif elseif else</h6> <c:choose> <c:when test="${user.password='123456'}">1</c:when> <c:when test="${user.password='1234567'}">2</c:when> <c:when test="${user.password='123456789'}">3</c:when> <c:otherwise>都不满足</c:otherwise> </c:choose> <h6>3.forEach item:表示要遍历的目标 begin:从什么时候开始 end:什么是结束 varStatus:获得循环的第几次,循环的一些其他的特殊属性 </h6> <table border="1"> <tr> <td>v.index</td> <td>i</td> <td>奇数显示</td> </tr> <c:forEach items="${user.list}" var="i" varStatus="v"> <%--<c:if test="${v.index%2==0}"> </c:if>--%> <tr class="my_${v.index%2}"> <td>${v.index}</td> <td>${i}</td> <td>${v.index*2+1}</td> </tr> </c:forEach> </table> </div> </body> </html>