一.jsp内置对象之域对象
1.1 什么是jsp的内置对象?
JSP的内置对象是指在JSP页面系统中已经默认内置的Java对象,这些对象不需要开发人员显式声明即可使用。一共有9个:
分别为request、response、session、application、out、pageContext、config、page和exception。
1.2 什么是域对象?
可以用于存储数据的内置对象,它们作用范围不同.一共4个:
分别是 request、session、application、 pageContext。
1.3 域对象怎么存值和拿值?
域对象 .setAttribute(String key,object value)
域对象 .getAttribute(String key)
1.4 域对象作业范围的区别?
1. pageContext: 可以存储数据,作用范围是当前页面有效
2.request: 可以存储数据,作用范围是同一个请求,转发有效
3.session: 可以存储数据,作用范围是同一个会话有效,常用于保存用户登录信息
4.application: 可以存储数据,作用范围是同一个应用
1.5 常用内置对象与servlet的对应关系
/** * request :HttpServletRequest 【req】 * response :HttpServletResponse【resp】 * session :HttpSession(通过req.getSession()) * out :PrintWriter(通过resp.getWriter()) * application :ServletContext(this.getServletContext()) */
1.6 jsp标签中转发用法
<jsp:forward page="goods.do"></jsp:forward>
二. EL表达式
2.1 什么是EL表达式?
EL即 Expression Language(表达式语言)
2.2 为什么要用EL表达式?
1.为了替代jsp页面中复杂代码
2.EL表达式不会在页面显示null
2.3 EL的语法
${EL expression}
${obj.name}
【注意:${obj.name}实质是调用obj的getName()方法】
【注意:sname必须是stu实体类中的属性名!!!】
eg:${stu.sname}实质就是调用set.getsname()方法
eg:${aa}实质就是拿域对象中键为aa的值
例如:
//存值 键,值
pageContext.setAttribute("aa", "pageContext");//作用域仅限于当前jsp页面
request.setAttribute("bb", "request");//作用域仅限于当前请求 转发有效
session.setAttribute("cc", "session");//作用域仅限于当前会话 登录
application.setAttribute("dd", "application");//作用域在服务器内有效
<h2>二.EL表达式</h2>
<h4>EL表达式拿域对象的值</h4>
1.${aa }<br>
2.${bb }<br>
3.${cc }<br>
4.${dd }<br>
2.4 EL中的隐含对象(作用域)
pageScope,requestScope,sessionScope,appliccationScope 在键出现冲突(重复)的时候
例如:隐藏
<h2>二.EL表达式</h2>
<h4>EL表达式拿域对象的值</h4>
1.${pageScope.aa }<br>
2.${requestScope.bb }<br>
3.${cc }<br>
4.${dd }<br>
2.5 EL运算符
//算术 关系 逻辑运算符同java一致 eg:${2>1&&1!=2} //empty / not empty运算符 判断是否为空 / 不为空 eg:${empty goods }
三.JSTL
3.1 什么是JSTL
JSTL(JavaServerPages Standard Tag Library)JSP标准标签库 惯性c标签
3.2 为什么要用JSTL
使用了EL表达式可以简化JSP页面代码,但是如果需要进行逻辑判断,循环遍历怎么办?
用JSTL
3.3 JSTL核心标签库组成
3.4 使用步骤
1.将两个JSTL的jar包放到webContent--->WEB--->INF---->lib下
2.在所需的JSP页面添加taglib指令
<!-- 引入jstl的核心标签库 -->
<%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c" %>
3.5 语法
3.5.1 通用标签:set remove out
set标签用于给变量设置值和作用范围:<c:set var="变量名" value="值" scope="作用域"></c:set>
out标签在页面上显示信息或变量值:<c:out value=""></c:out>
remove标签用于删除作用域内的变量:<c:remove var="变量" scope="作用域"/>
3.5.2 条件标签:if
<c:if test="条件"> </c:if> 例如: <c:if test="${2>1 }"><!-- 条件成立--> 我是休息休息 <!--才会出现 --> </c:if>
3.5.3 迭代标签:forEach forTokens
<!--1.forEach用于循环遍历--> <c:forEach items="要遍历的集合对象" var="变量" varStatus="状态" end="结束" step="增量"> 循环体代码 </c:forEach> <!--2.forTokens用于分割--> <c:forTokens items="要分割的内容" delims="用什么分割" var="变量"> ${i } </c:forTokens> <!--常用代码--> <c:forEach items="${myls }" var="g"> 商品名称: ${g.gname } 商品价格: ${g.ginfo } </c:forEach>
四.运用
index.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!--引入JSTE标签库--> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <!-- 支持手机端 --> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <!-- 引入CSS --> <link rel="stylesheet" href="CSS/bootstrap.css" /> </head> <body > <h2 class="text-center">主界面</h2> <div class="container"> <table class="table table-hover"> <thead> <tr class="text-center"> <th scope="col">商品编号</th> <th scope="col">商品名称</th> <th scope="col">商品价格</th> <th scope="col">商品简介</th> </tr> </thead> <tbody class="text-center"> <c:if test="${empty ls }"> <jsp:forward page="goods.do"></jsp:forward> </c:if> <c:forEach items="${ls }" var="g"> <tr> <th scope="row">${g.gid }</th> <td>${g.gname }</td> <td>¥${g.gprice }</td> <td>${g.ginfo }</td> </tr> </c:forEach> </tbody> </table> </div> <!-- 引入jQuery的类库 --> <!-- 再引入Bootstrap的类库 --> <script src="js/jquery-3.6.4.js"></script> <script src="js/bootstrap.js"></script> </body> </html>
GoodsSerlvet.java
package com.zking.servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.zking.dao.GoodsDao; import com.zking.entity.Goods; @WebServlet("/goods.do") public class GoodsServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //加载数据 req.setCharacterEncoding("utf-8"); resp.setContentType("text/html; charset=UTF-8\""); //调用dao方法 GoodsDao gd = new GoodsDao(); //调用查询全部 List<Goods> ls = gd.getAll(); //存req中 req.setAttribute("ls", ls); //仅转发有效 去zjm.jsp展示数据 req.getRequestDispatcher("zjm.jsp").forward(req, resp); } }