JSP学习日记
什么是JSP? 曾经我以为jsp就是 "javascript" , 但显然并不是 ,jsp全称为 Java Server Pages , 翻译过来为 java服务器页面 , 其可以在静态的HTML页面中添加java代码 ,使得原来的静态HTML页面变得具有动态交互效果,我觉得这就是jsp目前对我来说最重要的功能及作用.
//开始我的学习路线
怎样在IDEA(2024.1)上新建一个能够创建jsp的项目?
因为之前做过一段时间Java EE的项目 , 因此找到这个样板还是挺简单的
ok,下一步 , 红1 , 蓝2,创建web服务。
之后就会出现
webapp很重要,因为我们的jsp代码要写到webapp里,出现之后就可以开始下一步编写代码了
代码编写
<1 : 网页呈现出 "我的第一个jsp网页"
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp页面</title>
</head>
<body>
<h2>我的第一个JSP页面</h2>
</body>
</html>
是不是感觉和HTML很像?几乎一模一样 , JSP实质上就是在原本静态的HTML网页中添加一段或多端Java代码使其成为具有交互功能的动态网页 ,因此若果不去实现交互那么HTML就和JSP一模一样
<2: jsp中基本的注释
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSP基础语法</title>
</head>
<body>
<pre>
显示注释
1: 能够在客户端查看的注释
继承HTML风格注释 <!--HTML注释-->
<!--HTML注释-->
隐式注释
不能能够在客户端查看的注释
1: jsp自己的注释 <%--jsp自己的注释 --%>
<%-- jsp自己的注释 --%>
2: 继承JAVA风格注释
单行 //
多行 /**/
</pre>
</body>
</html>
<!--HTML注释-->就是 <!-- HTML注释 --> 为了将这行代码显示到网页上就只能将其不作为一段代码,当作一行字符串来向网页上引用 , ctri + / 快捷键注释
<3: jsp中最关键的script脚本小程序介绍
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Scriptlet</title>
</head>
<body>
<%--
在Jsp中Scriptlet脚本小程序一共有三种
1: java脚本段 : 可以写Java代码 , 定义局部变量 , 编写语句
<%
// 里面可以写java代码
%>
生成的代码在servlet中的service方法体中
上面这句话我也有点懵 , 总之大致意思应该就是把在HTMl中写的Java代码会按照标签放在servlet中编译解析
2: 声明 : 声明全局变量 , 或者 声明方法类
<%!
声明全局变量
%>
生成的代码在servlet中的service方法类体中
这也就是为什么他可以是全局变量的关键
3: 输出表达式 : 输出变量或者字面量
<%=数值%>
生成的代码在servlet中的service方法体中 , 相当于out.print()输出
--%>
<%-- Java脚本段 --%>
<%
//注意观察标签
//定义局部变量
String str = "HELLO JSP" ;
//输出内容到控制台
System.out.println(str);
//输出到浏览器
out.print(str);
//输出全局变量
out.write("全局变量: " + num);
%>
<%-- 2声明全局变量 --%>
<%!
//注意观察标签
//声明全局变量
int num = 10;
%>
<%-- 3输出表达式 --%>
<%=str%>
</body>
</html>
总之就分为三种 <% 用来写Java代码 %>
<%! 用来定义全局变量 %>
<%= 输出%>
//自我认为,包含就是为了提高代码的复用率 , 什么叫复用率 ,将大量的相同的的代码,有着相同作用的集合封装起来
//使用时不必一行一行代码重复进行多次的 C V ,利用某行”包含代码“顶替一大堆代码.
<4: 静态包含
1 , 创建三个jsp页面
(1):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>include静态包含-头部</title>
</head>
<body>
<h2>头部内容</h2>
</body>
</html>
(2):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>include静态包含</title>
</head>
<body>
<%--
include静态包含
格式:
<%@include file="要包含的页面地址"%>
特点:
1: 将内容进行直接替换
2: 静态包含只会生成一个源码文件最终全部在JSPservice源码文件中 , 因此不能出现同名变量
3: 效率高 , 耦合度高 , 因此用的较多的为动态包含
--%>
<%@include file="04-jsp-include-static-head.jsp"%>
<h2>主体内容</h2>
<%@include file="04-jsp-include-static-tail.jsp"%>
</body>
</html>
(3):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>include静态包含-尾部</title>
</head>
<body>
<h2>尾部内容</h2>
</body>
</html>
<5: 动态包含
动态包含和静态很像 , 只不过静态像是在原本的主函数里面在增添新的代码 , 而动态就像是写出一个个函数, 主函数若是需要就直接调用函数。
1.创建三个jsp页面
(1):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>include动态包含-头部</title>
</head>
<body>
<h2>头部内容</h2>
</body>
</html>
(2):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>include动态包含</title>
</head>
<body>
<%--
相当于方法的调用,相当于函数
动态包含格式:
<jsp:include page="要包含的地址"></jsp:include>
特点:
1: 动态包含相当于方法的调用
2: 动态包含会生成多个源码文件
3: 可以定义同名文件
4: 效率高 , 耦合度低
提示:
当动态包含不需要传递参数时,双标签中不能出现任何内容
使用动态包含传递参数
<jsp:include page="要包含的地址">
<jsp:param name="参数名" value="参数值"/>
</jsp:include>
提示:
name属性不支持参数值 , value支持参数值
获取参数值:
request.getParameter(name); 通过指定参数名获取参数值
--%>
<%-- 这行代码只会获取null值 , 因为只要跳转页面page就会失效--%>
<jsp:include page="05-jsp-include-dynamic-head.jsp"></jsp:include>
<h2>主体内容</h2>
<%
String str = "code" ;
String url = "05-jsp-include-dynamic-tail.jsp" ;
%>
<jsp:include page="<%=url%>"></jsp:include>
<%-- 动态包含传递参数 --%>
<jsp:include page="<%=url%>">
<jsp:param name="uname" value="admin"/>
<jsp:param name="msg" value="<%=str%>"/>
</jsp:include>
</body>
</html>
(3):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>include动态包含-尾部</title>
</head>
<body>
<h2>尾部内容</h2>
<%-- 获取动态包含传递的参数 --%>
<%
String uname = request.getParameter("uname");
String msg = request.getParameter("msg");
// 输出
out.print(uname + " , " + msg + "\n");
%>
</body>
</html>
<6: 域
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>四大域对象</title>
</head>
<body>
<%--
四大域对象
page:
在当前页面有效 , 跳转后无效
request:
在一次请求中有效 , 服务端跳转有效 , 客户端跳转无效
session:
再一次会话中有效 , 服务端 , 客户端跳转都有效果
application:
在整个应用中都有效
jsp中跳转方式
1 : 服务端跳转
<jsp:forward page = "需要跳转的页面地址" > </jsp:forward>
2 : 客户端跳转
超链接
在合理范围内尽可能小
--%>
<%
//内部对象
//配置page范围内的域对象
pageContext.setAttribute("name1","张三");
//配置request范围内的域对象
request.setAttribute("name2","张四");
//配置session范围内的域对象
session.setAttribute("name3","张五");
//配置application范围内的域对象
application.setAttribute("name4","张六");
%>
<%-- jsp中服务端跳转 page失效 --%>
<%-- <jsp:forward page="06-jsp-FOUR-field-getparmeter.jsp"></jsp:forward>--%>
<%-- 超连接跳转 request失效 --%>
<a href="06-jsp-FOUR-field-getparmeter.jsp" >跳转</a>
<%-- 关闭浏览器再打开 session失效 --%>
<%-- 服务器关闭 application失效 --%>
</body>
</html>
//获取四大域的值
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>四大域对象</title>
</head>
<body>
<%--
四大域对象
--%>
<%
//获取域对象的值
out.print("page范围: " + pageContext.getAttribute("name1") + "<br>");
out.print("request范围: " + request.getAttribute("name2") + "<br>" );
out.print("session范围: " + session.getAttribute("name3") + "<br>" );
out.print("application范围: " + application.getAttribute("name4") + "<br>" );
%>
</body>
</html>
<7: El表达式
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%--
EL表达式是为了简化JSP
格式: ${experssion} experssion: 域对象的名称
操作对象 : 域对象,不能操作局部变量
操作范围 : page request session application
提示:
如果El表达式获取域对象的值为空 , 默认为空字符串
, 默认从小到大寻找 , 找到即止 , 若四个范围都没找到 , 显示空字符串
若想查找指定范围
pageScope , requestScope , sessionScope , apolicationScope
--%>
<%-- 设置数据--%>
<%
pageContext.setAttribute("uname","张三");
request.setAttribute("uname","李四");
session.setAttribute("uname","王五");
application.setAttribute("uname","马六");
//定义局部变量
String str = "侯七" ;
%>
<%-- 获取数据--%>
<%-- 拿不到局部变量--%>
获取局部变量: ${str} <br>
获取域对象: ${uname} <br>
获取指定范围的 page作用域 ${pageScope.uname} <br>
request作用域 ${requestScope.uname} <br>
session作用域 ${sessionScope.uname} <br>
application作用域 ${applicationScope.uname} <br>
</body>
</html>
<8 EL表达式的使用
<1 , 新建一个User.java文件作为javabean
package org.example.po;
public class User {
private Integer id;
private String name;
private String password;
public User() {
}
public User(Integer id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
<2 : 开始编写EL使用的代码
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="org.example.po.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL使用</title>
</head>
<body>
<%-- EL表达式的使用
获取LIST
获取list的size : ${list.size()}
获取list的指定下标 : ${list[num]} num,为指定下标
list代表的是限域变量名
获取map
获取map中指定key的value : ${map.ket} ${map["key"]}
map代表的限域变量名
获取javabean
获取JavaBean中的属性 : ${javabean.属性名} ${javabean.get属性名}
提示:
javabean中的属性字段必须要提供get方法否则获取不到
--%>
<%
//获取list
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list", list);
//获取map
Map map = new HashMap();
map.put("aaa","111") ;
map.put("bbb","222") ;
map.put("ccc","333") ;
request.setAttribute("map", map);
//获取javabean
User user = new User();
user.setId(1);
user.setName("zhangsan");
user.setPassword("123456");
request.setAttribute("user", user);
%>
<h4>获取LIST</h4>
获取listsize : ${list.size()} <br>
获取list指定下标 : ${list[1]} <br>
<h4>获取map</h4>
获取map指定key的value : ${map.aaa}-----${map["bbb"]} <br>
<h4>获取javabean</h4>
${user} <br>
获取javabean中的属性: ${user.name} ------ ${user.password} <br>
</body>
</html>
标签:map,代码,list,学习,获取,jsp,user,日记
From: https://www.cnblogs.com/123456-BX/p/18228386