java web(5) jsp
JSP
1.什么是JSP?
Java Servlet Pages:java服务器端页面,也和Servlet一样,用于动态Web技术!!!
最大的特点:
- 写jsp就像在写Html
- Jsp页面中可以嵌入Java代码,为用户提供动态的数据。
2.Jsp原理?
思路:jsp到底是怎么执行的!
代码层面没有任何问题
服务器内部工作
Tomcat中有一个work目录;
IDEA中使用Tomcat的话会在IDEA的Tomcat中生产一个work目录。
浏览器向服务器发送请求,不管访问什么资源,本质都是访问Servlet
Jsp最终也会被转换成一个Java类。
Jsp本质上就是一个servlet
- 判断请求
- 内置一些对象
- 输出页面前增加一些代码
- 以上这些对象都可以在jsp页面中直接使用
3. Jsp基础语法
任何语言都有自己的语法,java中有,jsp作为java技术的一种应用,它拥有一些自己扩充的语法(了解即可)
Jsp表达式
<%-- jsp表达式
作用:用来将程序的输出,输出到客户端
<%= 变量或者表达式%>
--%>
<%= new java.util.Date()%>
Jsp脚本片段
<%
int sum=0;
for (int i=1;i<101;i++){
sum+=i;
}
out.print("<h1>sum="+sum+"</h1>");
%>
<%--jsp脚本片段实现 --%>
<%
for (int i = 0; i < 5; i++) {
%>
<h1>html</h1>
<%
}
%>
Jsp声明
<%!
static {
System.out.println("Loading Servlet");
}
private int globalvar=0;
public void speak(){
System.out.println("请说话");
}
%>
Jsp声明:会被编译到JSP生产java的类中!其他的,就会被生成到_jspService中! 在java语言中嵌套即可。
Jsp注释 <% %>
Jsp注释,不会在客户端显示,HTML就会
4. jsp指令
指定错误页面
<%@ page errorPage="error/500.jsp" %>
<%-- 将两个页面合二为一--%>
<%@include file="/common/header.jsp" %>
<div></div>
<%-- 拼接页面,本质还是三个页面--%>
<jsp:include page="/common/header.jsp"></jsp:include>
<div></div>
5.jsp九大内置对象
PageContext 存东西
Request 存东西
Response
Session 存东西
Application (ServletContext) 存东西
Config (ServletConfig)
Out
Page
Exception
<%-- 内置对象 --%>
<%
pageContext.setAttribute("name1","阿军1号"); //保存的数据只在一个页面中有效
request.setAttribute("name2","阿军2号"); //保存的数据只在一个请求中有效,请求转发会携带这个数据
session.setAttribute("name3","阿军3号"); //保存的数据只有在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","阿军4号"); //保存的数据只会在服务器中有效,从打开服务器到关闭浏览器
%>
<%
//从pageContext取出,我们通过寻找的方式来
//从底层到高层(作用域):page -> request -> session -> application
String name1 = (String) pageContext.findAttribute("name1");
String name2= (String) pageContext.findAttribute("name2");
String name3 = (String) pageContext.findAttribute("name3");
String name4 = (String) pageContext.findAttribute("name4");
String name5 = (String) pageContext.findAttribute("name5");
%>
<%--从el表达式中取出来 --%>
<h1>获取的值是:</h1>
${name1}
${name2}
${name3}
${name4}
${name5}
Request:客户端向服务器发送请求,产生数据,用户看完没有用了,比如:新闻,用户看完没有用的。
Session: 客户端向服务器发送请求,产生数据,用户用户还有用,比如:购物车;
Application: 客户端向服务器发送请求,产生数据,一个用户用完了,其他用户还能使用,比如:聊天数据
6.JSP标签和JSTL标签,EL表达式
EL表达式:${}
获取数据
执行运算
获取web开发的常用对象
获取表单的数据:${param.参数名}
调用java方法
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
Jsp标签
<jsp:forward page="tag.jsp">
<jsp:param name="name" value="十三"/>
<jsp:param name="age" value="22"/>
</jsp:forward>
JSTL
JSTL标签库的使用就是为了弥补HTML标签的不足,他自定义许多标签,可以供我们使用,标签的功能和java代码一样。
核心标签(了解部分即可 )
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Jstl标签使用步骤
- 引入 taglib
- 使用
3. <h1>jstl标签</h1>
<form action="coreif.jsp" method="get">
<input type="text" name="username" value="${param.username}">
<input type="submit" value="登录">
</form>
<%--判断如果提交的用户是管理员 ,则登录成功--%>
<c:if test="${param.username=='admin'}" var="isAdmin" >
<c:out value="管理员欢迎您!!!"></c:out>
</c:if>
<c:out value="${isAdmin}"></c:out>
4. \
5.
<%-- 定义一个score 成绩为80--%>
<c:set var="score" value="80"></c:set>
<c:choose>
<c:when test="${score>=90}">
<c:out value="成绩优秀"></c:out>
</c:when>
<c:when test="${score>=80}">
<c:out value="成绩良好"></c:out>
</c:when>
<c:when test="${score>=70}">
<c:out value="成绩一般"></c:out>
</c:when>
<c:when test="${score<=60}">
<c:out value="成绩不及格"></c:out>
</c:when>
</c:choose>
<body>
<%
ArrayList<String> person = new ArrayList<>();
person.add(0,"罗军");
person.add(1,"罗成");
person.add(2,"罗策");
person.add(3,"罗京");
person.add(4,"罗美罗");
request.setAttribute("lists",person);
%>
<%-- var,每一次遍历出来的变量 items要遍历的对象
begin 哪里开始 end到哪里 step步长
--%>
<c:forEach var="person" items="${lists}">
<c:out value="${person}"></c:out>
</c:forEach>
</body>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术