你想要多大的成功,你愿意为这份成功付出什么?
一.jsp
定义: 每一种技术名称都一定说明他的作用. jsp 的全称: Java Server pages ( Java服务器页面),
既然他是Java服务器页面, 则它能支持 Java代码编写的web页面.
jsb 是Java服务器动态web开发技术. 相当于: HTML+Servlet;
1. jsp书写Java代码: 在<% %>中编写Java代码;
2. jsp注释 在<%-- 注释内容 -- %>中编写Java代码;
3. html注释:<!-- 注释内容 -->注释内容会被写到网页上
4. 显示数据 : <%= % > 相当于out.print();
5. 声明成员变量的<%! %> : 在这里声明成员变量, 相当于声明在类中方法外.
2.既然它是在Java服务器页面, 那它就是基于sun的JDK来执行, 也就是说, jsp文件是Java文件的
某种伪格式.
3.jsp的运行: 1.jsp在tomcat以后发布, 2: 在浏览器访问过程中会有jsp生成,:jsp.Java 和jsp.class文件生成
说明jsp在执行过程中先生成Java文件, 再使用Java语法编译成.class文件,然后再jvm上面运行 ,在服务器 work/catAlina/里面看到;
二. 三个指令( 写在头上 )
1. page
1. 1: <%@ page session = " true " %> : 相当于session开关,默认开启, 关上,系统默认不帮你创建session;
1. 2: <%@ page errorPage = " 3.jsp " %> : 设置错误页面, ,直接跳转到错误页面3.jsp页面中
1.3 :<%@ page isErrorPage = " true " %> : 默认是关闭的, 开启后可以使用Exception.getMassage() 获取信息;
2.jsp文件
<%@page import="javax.websocket.Session"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 相当于session开关,默认是开启 关上时候,系统默认不帮你创建w'j-->
<%@page session= "true" %>
<!-- 设置错误页面 网址没有动,直接跳转到错误页面;-->
<%@page errorPage= "3.jsp" %>
<!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>
</head>
<body>
<%
//session.getAttribute("123");
int num = 10 / 0; //如果3.jsp开启了isErrorPage,则可以获取到 Exception信息 by/zero,
%>
</body>
</html>
3.jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 默认是关闭的,开启后可以使用Exception对象来获取异常信息; -->
<%@page isErrorPage="true" %>
<!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>
</head>
<body>
服务器正在升级维护中.....
<%=
exception.getMessage()
%>
</body>
</html>
2. include
1. 静态包含: <%@ include file="/include2.jsp" %>
作用:将两个页面放在一起,编译成一个.Java文件和.class文件
运行后: 会在服务器work/catalina 里面看到编译的文件;
2.动态包含: <jsp:include page="/include2.jsp"></jsp:include>
作用: 只有读到动态包含的时候, 才会把动态包含的那个页面编译成.Java和.class文件
运行后:我们会看到两个 .Java文件和.class文件.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 静态包含 <%@ include file="/include2.jsp" %> 生成一个Java文件-->
<!-- 动态包含 当读取到动态包含时候 会把动态包含的那个页面, 才会被编译成.Java文件
<jsp:include page="/include2.jsp"></jsp:include>-->
<!-- prefix :使用标签时候起的别名 -->
<%@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>
</head>
<body>
wwwwwwww
</body>
</html>
3 .taglib 是标准标签库(c标签) : 也是引一个头文件,自往里面进行添加;
1. 导入jar 包的时候可以使用 prefix: 使用标签的时候起的别名;
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
三 : 6个动作标签
1 .<jsp: include> : 动态包含
2.<jsp: forward> : 请求转发
3< jsp:param> : 设置请求参数
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
</head>
<body>
<%
// pageContext 域对象
//作用范围只能当前页面访问到
pageContext.setAttribute("sex", "nv");
%>
<%=pageContext.getAttribute("sex") %>
<jsp:forward page="7.jsp">
<jsp:param value="wanglong" name="username" />
<jsp:param value="123" name="password" />
</jsp:forward>
</body>
</html>
7.jsp文件 来进行获取上面的内容6的内容;
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
</head>
<body>
hha
<%=request.getParameter("password") %>
<%=request.getParameter("username") %>
<!-- 测试配置Context -->
<%=pageContext.getAttribute("sex") %>
</body>
</html>
4.<jsp:useBean>: 创建一个对象
5<jsp:setProperty> :给指定的对象属性赋值
6<jsp:getProperty> : 取出指定对象的属性值
<%@page import="com.lanou3g.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
</head>
<body>
<%
User user = new User();
user.setUsername("wanglong");
user.setPassword("123");
%>
<!-- 方式1 获取到username; -->
<%=user.getUsername()%>
<!-- 使用userBean标签创建对象;
id 表示创建的这个对象的名字;
class: 表示使用哪个类创建该对象;
name: 表示要赋值哪个对象;
property相当于from表单中的name;
-->
<jsp:useBean id="user1" class="com.lanou3g.User" />
<jsp:setProperty property="username" name="user1" value="kuner" />
<jsp:setProperty property="password" name="user1" value="123" />
<!-- 获取对象 方式2 获取到username;-->
<jsp:getProperty property="username" name="user1" />
</body>
</html>
四: PageContext 域
定义: 指的是当前页面的域对象: 离开了当前页面也就消失了;
1 .pageContext:的强大之处是可以获取所有的域对象:
当然;也可以往各个域对象里面存值了
2. 获取所有域对象的时候是从小域到大域进行查找: 注意session 是保存浏览器的,关闭浏览器才会消失
public void fun(PageContext pageContext) {
//该对象提供了获取所有域对象的方法;
pageContext.getRequest();
pageContext.getServletContext();
pageContext.getRequest();
pageContext.getSession();
//从全域查找保存的值,并且该方法是按域对象的范围从小到大进行查找,
pageContext.findAttribute("name");
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
</head>
<body>
<% // 所以尽量不要使用一样的名字;
//利用配置PageContext对象往各个域中存值. 参数2= 存的值, 参数3 向哪个域中存值.
// pageContext.setAttribute
//pageContext.setAttribute("www", "pageContext", PageContext.PAGE_SCOPE);
//相当于request.setAttribute("www","request")
pageContext.setAttribute("www", "request",PageContext.REQUEST_SCOPE);
//直接注释session 也不会找到ServletContext, 浏览器不关闭session会一直保存;
pageContext.setAttribute("www", "session",PageContext.SESSION_SCOPE);
pageContext.setAttribute("www", "ServletContext", PageContext.APPLICATION_SCOPE );
%
五: EL表达式:
定义: 一个书写规范: 提供了Java代码在jsp页面简便书写方式, 可以简化代码;
1. ${www} : 代表全域查找, name = www的值, 并且帮你输出到网页上, 如果没有网页什么都不显示;
2.利用EL表达式获取对象的 属性值 分别从 --对象中 --集合中--map集合中
<%@page import="com.lanou3g.City"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.lanou3g.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
</head>
<body>
<!-- EL表达式 获取对象的属性值
javaBean導航(对象导航)
-->
<%
City city = new City();
city.setAddress("sh");
User u1 = new User();
u1.setUsername("wanglong");
u1.setPassword("123");
u1.setCity(city);
request.setAttribute("u1", u1);
//创建数据保存俩值
ArrayList<String> list = new ArrayList();
list.add("zhansan");
list.add("lisi");
request.setAttribute("list", list);
//创建map 保存俩值
HashMap<String, String> m1 = new HashMap<>();
m1.put("a", "aaaa");
m1.put("b", "bbb");
m1.put("c", "ccc");
request.setAttribute("m1", m1);
%>
<!-- 内部相当于调用了getUsername()这个方法; 使用[]但是里面要加""号或者''单引号 -->
<!-- 用点能获取的,用[]都能获取, 用[]获取的 点获取不了 -->
${u1.username} //
${u1["username"]}
${ list[1]}
${m1["b"] }
${m1.c}
${u1.city.address }
${u1["city"]["address"]} //页面显示内容wanglong wanglong lisi bbb ccc sh sh
</body>
</html>
3.使用EL表达式的隐式对象:注意隐式对象在EL表达式中书写. https://www.cnblogs.com/wwlearn/articles/3034235.html
作用范围有关的隐式对象: pageScope ,requestScope ,sessionScope ,applicationScope
在EL中则使用下面的方法:${sessionScope.username}
注意:如果没有设定使用EL内置对象的作用范围,则按照pageScope、requestScope、sessionScope和applicationScope的先后顺序读取属性值。
利用隐式对象获取你想要的保存在各个域中的值: 可以获取你想要的
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
</head>
<body>
<!-- EL表达式的隐士对象: 写在哪里 注意; 隐式对象在el表达式中书写
利用隐式对象获取,你想要的值;
-->
<%
//利用pageContext对象向各个域中保存值
pageContext.setAttribute("xxx", "pageContext", PageContext.PAGE_SCOPE);
pageContext.setAttribute("xxx", "request", PageContext.REQUEST_SCOPE);
pageContext.setAttribute("xxx", "session", PageContext.SESSION_SCOPE);
pageContext.setAttribute("xxx", "application", PageContext.APPLICATION_SCOPE);
%>
<!-- 使用隐式对象必须和el表达式里面去写; 指定域中查找对应的值 ${ xxx} -->
${pageScope.xxx }
${requestScope.xxx }
${sessionScope.xxx }
${applicationScope.xxx }
<br>
<!-- .相当于get();方法 -->>
<form action="${pageContext.request.contextPath }/13.jsp" method="post">
账号 <input type="text" name ="username"><br>
密码 <input type="text" name ="password"><br>
唱歌 <input type="checkbox" name ="hobby" value ="sing"><br>
求 <input type="checkbox" name ="hobby" value ="boll"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
5 .获取表单提交数据 表单就在上面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
</head>
<body>
<% // 设置编码格式否则会乱码的
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
%>
<!-- 获取表单提交的数据 多数值要指定你要查询哪一个-->
${param.username }
${param.password }
${paramValues.hobby[0] }
</body>
</html>
6 .EL表达式对空值的判断 以及显示
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
</head>
<body>
<!-- EL表达式 对空值的判断 -->
<%
String str1 = null;
request.setAttribute("str1", str1);
String str2 = "";
request.setAttribute("str2", str2);
String str3 = "wanglong";
request.setAttribute("str3", str3);
ArrayList<String> list2 = new ArrayList<>();
request.setAttribute("list2", list2);
//wanglong [] [hahahaahahahhahhahah, bbbbbbbb] 如果存的是数组为空,显示只有一对中括号;
ArrayList<String> list3 = new ArrayList<>();
list3.add("hahahaahahahhahhahah");
list3.add("bbbbbbbb");
request.setAttribute("list3", list3);
//测试三目 根据从域中取出的值 来让单选框默认选择哪个值;
String name = "nan";
request.setAttribute("name", name);
%>
<!-- 测试EL表达式对空值的显示结果
el表达式里面只要是null还是没有内容 都不会报错;
真正的值才会显示: (容错性高);
-->
${str1 }
${str2 }
${str3 }
${list2 }
${list3 }
<!-- 判断空值的方法empty -->
${empty str1 }
${empty str2 }
${empty str3 }
${empty list2 }
${empty list3 }
<!-- 支持三目表达式打印结果 wanglong [] [hahahaahahahhahhahah, bbbbbbbb] true true false true false 我是后面的
根据你域里面取出来的值判断是什么?
-->
${ empty str3 ? "我是前面的":"我是后面的"}
<!-- 测试 根据request里面保存的数据,判断男还是女; -->
<br>
男: <input type="radio" name ="sex" value="nan" ${name=="nan"?"checked='checked'":"" }>
女: <input type="radio" name ="sex" value="nv" ${name=="nv"?"checked='checked'":"" }>
</body>
</html>