JSP&EL&JSTL

1. jsp

什么是jsp?

从⽤户⻆度看待 ,就是是⼀个⽹⻚ , 从程序员⻆度看待 , 其实是⼀个java类, 它继承了
servlet,所以可以直接说jsp 就是⼀个Servlet.

为什么会有jsp?

html 多数情况下⽤来显示静态内容 , ⼀成不变的。 但是有时候我们需要在⽹⻚上显示⼀些动态
数据, ⽐如: 查询所有的学⽣信息, 根据姓名去查询具体某个学⽣。 这些动作都需要去查询数
据库,然后在⽹⻚上显示。 html是不⽀持写java代码 , jsp⾥⾯可以写java代码。

1.1 怎么⽤JSP

1.1.1 指令写法

<%@ 指令名字 %>

1.1.2 page指令

language

表明jsp⻚⾯中可以写java代码

contentType

其实即使说这个⽂件是什么类型,告诉浏览器我是什么内容类型,以及使⽤什么编码

contentType="text/html; charset=UTF-8"
text/html MIMEType 这是⼀个⽂本,html⽹⻚

pageEncoding jsp内容编码
extends ⽤于指定jsp翻译成java⽂件后,继承的⽗类是谁,⼀般不⽤改。
import 导包使⽤的,⼀般不⽤⼿写。
session

值可选的有true or false .
⽤于控制在这个jsp⻚⾯⾥⾯,能够直接使⽤session对象。
具体的区别是,如果该值是true , 那么在代码⾥⾯会有getSession()的调⽤,如果是false : 那
么就不会有该⽅法调⽤,也就是没有session对象了。在⻚⾯上⾃然也就不能使⽤session了。

errorPage
指的是错误的⻚⾯, 值需要给错误的⻚⾯路径
isErrorPage
上⾯的errorPage ⽤于指定错误的时候跑到哪⼀个⻚⾯去。 那么这个isErroPage , 就是声明某⼀
个⻚⾯到底是不是错误的⻚⾯。

1.1.3 include
包含另外⼀个jsp的内容进来。

<%@ include file="other02.jsp"%>

背后细节:

把另外⼀个⻚⾯的所有内容拿过来⼀起输出。 所有的标签元素都包含进来。

1.1.4 taglib

<%@ taglib prefix="" uri=""%>
uri: 标签库路径
prefix : 标签库的别名

1.2 JSP 动作标签

<jsp:include page=""></jsp:include>
<jsp:param value="" name=""/>
<jsp:forward page=""></jsp:forward>

jsp:include

<jsp:include page="other02.jsp"></jsp:include>

包含指定的⻚⾯, 这⾥是动态包含。 也就是不把包含的⻚⾯所有元素标签全部拿过来输出,⽽是
把它的运⾏结果拿过来。

jsp:forward
<jsp:forward page="">/jsp:forward

前往哪⼀个⻚⾯。

<%
//请求转发
request.getRequestDispatcher("other02.jsp").forward(request, response);
%>

jsp:param
意思是: 在包含某个⻚⾯的时候,或者在跳转某个⻚⾯的时候,加⼊这个参数。

Jsp_action.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
other02.jsp
<title>Title</title>
</head>
<body>
<%-- <jsp:include page=""></jsp:include>--%>
<%-- <jsp:forward page=""></jsp:forward>--%>
<%-- <jsp:param name="" value=""/>--%>
<%-- <jsp:include page="other02.jsp"></jsp:include>--%>
<%-- 跳转到other02⻚⾯ 带着参数 --%>
<jsp:forward page="other02.jsp">
<jsp:param name="address" value="beijing"/>
</jsp:forward>
这是JSP_Action ⻚⾯的内容
</body>
</html>

other02.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>这是 Ohter02 的内容</h1>
<br>
接收到的参数是:
<%= request.getParameter("address")%>
</body>
</html>

1.3 JSP内置对象

所谓内置对象,就是我们可以直接在jsp⻚⾯中使⽤这些对象。 不⽤创建。
pageContext
request
session
application
以上4个是作⽤域对象 ,
作⽤域
表示这些对象可以存值,他们的取值范围有限定。 setAttribute 和 getAttribute

使⽤作⽤域来存储数据<br>
<%
pageContext.setAttribute("name", "page");
request.setAttribute("name", "request");
session.setAttribute("name", "session");
application.setAttribute("name", "application");
%>
取出四个作⽤域中的值<br>
<%=pageContext.getAttribute("name")%>
<%=request.getAttribute("name")%>
<%=session.getAttribute("name")%>
<%=application.getAttribute("name")%>

作⽤域范围⼤⼩:

pageContext -- request --- session -- application

1.4 四个作⽤域的区别

pageContext 【PageContext】
作⽤域仅限于当前的⻚⾯。
还可以获取到其他⼋个内置对象。
request 【HttpServletRequest】
作⽤域仅限于⼀次请求, 只要服务器对该请求做出了响应。 这个域中存的值就没有了。
session 【HttpSession】
作⽤域限于⼀次会话(多次请求与响应) 当中。
application 【ServletContext】
整个⼯程都可以访问, 服务器关闭后就不能访问了。

other03.jsp

<html>
<head>
<title>Title</title>
</head>
<body>
使⽤四个作⽤域对象存值
<% pageContext.setAttribute("name","page");%>
<% request.setAttribute("name","request");%>
<% session.setAttribute("name","session");%>
<% application.setAttribute("name","application");%>
<br>
<br>
取值:
<br>
<%= pageContext.getAttribute("name")%><br>
在other03.jsp中添加代码跳转到other04.jsp
<%= request.getAttribute("name")%><br>
<%= session.getAttribute("name")%><br>
<%= application.getAttribute("name")%><br>
</body>
</html>

在other03.jsp中添加代码跳转到other04.jsp

<%
request.getRequestDispatcher("other04.jsp").forward(request,response);
%>

继续修改other03.jsp

<%
//
request.getRequestDispatcher("other04.jsp").forward(request,response);
response.sendRedirect("other04.jsp");
%>

关闭浏览器,重新打开.继续测试 session

 

out 【JspWriter】

response 【HttpServletResponse】

2. EL表达式

是为了简化咱们的jsp代码,具体⼀点就是为了简化在jsp⾥⾯写的那些java代码。
写法格式
${表达式 }
如果从作⽤域中取值,会先从⼩的作⽤域开始取,如果没有,就往下⼀个作⽤域取。 ⼀直把四个
作⽤域取完都没有, 就没有显示。

2.1 取出4个作⽤域中存放的值。

2.2 如果域中所存的是数组

2.3 如果域中锁存的是集合

<%
pageContext.setAttribute("name","page");
request.setAttribute("name","request");
session.setAttribute("name","session");
application.setAttribute("name","application");
%>
<br>
使⽤普通⼿段取值<br>
<%= pageContext.getAttribute("name")%><br>
<%= request.getAttribute("name")%><br>
<%= session.getAttribute("name")%><br>
<%= application.getAttribute("name")%><br>
<br>
EL表达式取作⽤域中存的值<br>
${pageScope.name}<br>
${requestScope.name}<br>
${sessionScope.name}<br>
${applicationScope.name}<br>
<br>------------取数组中的值-------------<br>
<%
String[] args = {"aa","bb","cc","dd"};
pageContext.setAttribute("array",args);
%>
${array[0]},${array[1]},${array[2]},${array[3]}
<br>------------取集合中的值-------------<br>
<%
List<String> list = new ArrayList<>();
list.add("11");
list.add("22");
list.add("33");
list.add("44");
pageContext.setAttribute("list",list);
2.4 取出Map集合的值
%>
${list.get(0)},${list.get(1)},${list.get(2)},${list.get(3)}
</body>

2.5 取值细节:

1. 从域中取值。 得先存值。
<%
//pageContext.setAttribute("name", "zhangsan");
session.setAttribute("name", "lisi...");
%>
直接指定说了,到这个作⽤域⾥⾯去找这个name
${ pageScope.name }

 

练习:

学⽣信息管理系统

需求分析

代码:链接:https://pan.baidu.com/s/1ne6cqpCZ84StgeGb5_0-7Q 提取码:kf9q

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值