文章目录
- 1. Jsp语法
- 1.1 Page指令
- 1.2 scriptlet标签
- 1.3 Jsp包含指令
- 1.4 Jsp跳转指令
- 2. Jsp四大作用域及九大内置对象
- 2.1 Jsp 四大作用域
- 2.1.1 Page范围:只在一个页面中保存数据; javax.servlet.jsp.PageContext(抽象类)
- 2.1.2 Request范围:只在一个请求中保存数据; javax.servlet.http.HttpServletRequest(接口)
- 2.1.3 Session范围:在一次会话范围中保存数据,仅供单个用户使用;javax.servlet.http.HttpSession(接口)
- 2.1.4 Application范围:在整个服务器上保存数据,所有用户共享;javax.servlet.ServletContext(接口)
- 2.2 九大内置对象
- 2.2.1 Response对象
- 2.2.2 Out对象
- 2.2.3 config 对象
- 2.2.4 exception 对象
- 2.2.5 pageContext 对象
- 3. JavaBean组件
- 3.1 Javabean组件引入
- 3.2 jsp:useBean创建 javabean
- 3.3 jsp:setProperty 设置 javabean 属性值
- 3.4 jsp:getProperty 获取 javabean 属性值
- 3.5 javabean 删除
1. Jsp语法
1.1 Page指令
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Language : 用来定义要使用的脚本语言;
contentType:定义 JSP 字符的编码和页面响应的 MIME 类型;
pageEncoding:Jsp 页面的字符编码
1.2 scriptlet标签
<%!
String str="全局变量";
%>
<%!
public void fun1(){
System.out.println("全局方法");
}
%>
<%!
class C{
private int a;
public void f(){
System.out.println("全局类");
}
}
%>
<%
int a=1234;
String b="java";
out.println(a+b+"局部变量");
%>
<%=b %>
通过 scriptlet 标签我们可以在 Jsp 里嵌入 Java 代码;
第一种:<%! %> 我们可以在里面定义全局变量、方法、类;
第二种:<% %> 我们可以在里面定义局部变量、编写语句;
第三种:<%= %> 我们可以在里面输出一个变量或一个具体内容;
注释:
<!-- html注释 客户端课可见 -->
<%-- jsp注释 客户端不可见 --%>
1.3 Jsp包含指令
<%@ include file="footer.jsp" %> <%--静态包含 先包含 后编译处理--%> <br/>
<jsp:include page="content.jsp"/> <%--动态包含 先编译处理 后包含--%>
1.4 Jsp跳转指令
<!--服务器内部跳转-->
<jsp:forward page="target.jsp">
<jsp:param value="zhangsan" name="userName"/>
<jsp:param value="21" name="age"/>
</jsp:forward>
target.jsp
<body>
userName:<%=request.getParameter("userName") %><br/>
age:<%=request.getParameter("age") %>
</body>
运行:
自动跳转到target.jsp页面且地址栏不变
2. Jsp四大作用域及九大内置对象
2.1 Jsp 四大作用域
2.1.1 Page范围:只在一个页面中保存数据; javax.servlet.jsp.PageContext(抽象类)
pageScope.jsp
<%@ 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>
<%
// 设置两个page范围的数据 key-> value page范围:只在一个页面中保存数据
pageContext.setAttribute("name","page王二小");
pageContext.setAttribute("age",12);
%>
<%
// 取值
String name=(String)pageContext.getAttribute("name");
int age=(Integer)pageContext.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>
</body>
</html>
运行:
2.1.2 Request范围:只在一个请求中保存数据; javax.servlet.http.HttpServletRequest(接口)
requestScope.jsp
<%@ 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>
<%
// 设置两个request范围的数据 key-> value 只在一个请求中保存信息
request.setAttribute("name","request王二小");
request.setAttribute("age",12);
%>
<jsp:forward page="requestTarget.jsp"></jsp:forward>
</body>
</html>
requestTarget.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>
<!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>
<%
// 取值
String name=(String)request.getAttribute("name");
int age=(Integer)request.getAttribute("age");
// 获取头信息
Enumeration enu=request.getHeaderNames();
while(enu.hasMoreElements()){
String headerName=(String)enu.nextElement();
String headerValue=request.getHeader(headerName);
%>
<h4><%= "headerName:"+headerName %></h4>
<h4 style="color:red"><%=headerValue %></h4>
<%
}
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>
</body>
</html>
运行
2.1.3 Session范围:在一次会话范围中保存数据,仅供单个用户使用;javax.servlet.http.HttpSession(接口)
sessionScope.jsp
<%@ 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>
<%
// 设置两个session范围的数据 key-> value 只在一次会话中保存信息,信息保存在服务器中,只能在单个个浏览器中取数据,
//只要不关闭浏览器就可以一直取得数据(默认半小时时间限制)
session.setAttribute("name","session王二小");
session.setAttribute("age",12);
%>
<h1>session值设置完毕!</h1><!-- 访问时 得先访问设置sessionScope.jsp再访问sessionTarget.jsp -->
</body>
</html>
sessionTarget.jsp
<%@ 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>
<%
// 取值
String name=(String)session.getAttribute("name");
int age=(Integer)session.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>
</body>
</html>
2.1.4 Application范围:在整个服务器上保存数据,所有用户共享;javax.servlet.ServletContext(接口)
applicationScope.jsp
<%@ 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>
<%
// 设置两个application范围的数据 key-> value 在整个服务器上保存数据,可以多个浏览器上取数据。
application.setAttribute("name","application王二小");
application.setAttribute("age",12);
%>
<h1>application值设置完毕!</h1>
</body>
</html>
applicationTarget.jsp
<%@ 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>
<%
// 取值
String name=(String)application.getAttribute("name");
int age=(Integer)application.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>
</body>
</html>
注意:得先设置application
运行,是可以在不同浏览器中取值的
2.2 九大内置对象
2.2.1 Response对象
response 内置对象用于响应客户请求,向客户端输出信息;javax.servlet.HttpServletResponse 接口
(1) 自动刷新页面
response01.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<!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.setHeader("refresh","1");
// 获取当前时间
Date myDate=new Date();
%>
当前时间:<%= myDate.toLocaleString() %>
</body>
</html>
(2) 页面重定向应用 客户端跳转
response02.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<!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.sendRedirect("index.html");
%>
</body>
</html>
输入 http://localhost:8080/j_s01/response02.jsp 访问,地址栏会改变
(3) 操作 cookie 应用
post 、get 方法比较: post 放数据包里 ,get 放 Url 后面 ,get 数据量小,不安全;
小功能:登录选择记住密码,再次登录无需输入密码
response03.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<!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>
<script type="text/javascript">
function resetValue(){
document.getElementById("userName").value="";
document.getElementById("pwd").value="";
}
</script>
<%
String userName=null;
String pwd=null;
Cookie[] cookies=request.getCookies();//获取cookie
for(int i=0;cookies!=null &&i<cookies.length;i++){
if(cookies[i].getName().equals("userNameAndPwd")){
userName=cookies[i].getValue().split("-")[0];
pwd=cookies[i].getValue().split("-")[1];
}
}
if(userName==null){
userName="";
}
if(pwd==null){
pwd="";
}
%>
</head>
<body>
<!-- 表单提交的action-->
<form action="userLogin.jsp" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" id="userName" name="userName" value="<%=userName%>"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" id="pwd" name="pwd" value="<%=pwd %>" /></td>
</tr>
<tr>
<td>记住密码:</td>
<td><input type="checkbox" id="remember" name="remember" value="remember-me"/></td>
</tr>
<tr>
<td><input type="submit" value="登录"/></td>
<td><input type="button" value="重置" onclick="resetValue()"/></td>
</tr>
</table>
</form>
</body>
</html>
userLogin.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="javax.servlet.http.*"%>
<!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>
<%
String userName=request.getParameter("userName");
String pwd=request.getParameter("pwd");
String remember=request.getParameter("remember");
if("remember-me".equals(remember)){//设置cookie
Cookie userNameAndPwd=new Cookie("userNameAndPwd",userName+"-"+pwd);
userNameAndPwd.setMaxAge(1*60*60*24*7); // cookie记录一个星期
response.addCookie(userNameAndPwd); // 保存cookie
System.out.println("设置Cookie成功");
}
response.sendRedirect("response03.jsp");
%>
</body>
</html>
Cookie信息保存在了客户端,刷新一下密码账号还是存在页面的
cookie 和 session 的比较:
1 cookie 信息是存客户端的;
2 session 信息是存服务器的;
3 sessionID存在cookie中;
2.2.2 Out对象
Out 内置对象主要用来向客户端输出各种类型的数据,同时还可以管理应用服务器上的输出缓冲区。所以 out 内 置对象的方法是向客户端输出数据和管理缓冲区;底层javax.servlet.jsp.JspWriter抽象类
out01.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<!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>
<%
out.println("<h1>");
out.println("Hello Jsp Servlet");
out.println("</h1>");
%>
</body>
</html>
out02.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<!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>
<%
int totalbuffer=out.getBufferSize(); // 获取总共缓冲区的大小
int available=out.getRemaining(); // 获取未使用的缓冲区的大小
int user=totalbuffer-available; // 获取使用的缓冲区大小
out.println("总共缓冲区的大小:"+totalbuffer);
out.println("未使用的缓冲区的大小:"+available);
out.println("使用的缓冲区大小:"+user);
%>
</body>
</html>
2.2.3 config 对象
Config 内置对象是 JSP 页面通过 JSP 容器进行初始化时被传递的对象。javax.servlet.ServletConfig 。在 Servlet 初始化的时候,JSP 引擎通过 config 向它传递信息。这种信息可以是属性名和属性值匹配的参数,也可以是通过 ServletContext对象传递的服务器的有关信息
运行
2.2.4 exception 对象
Exception 内置对象用来处理 JSP 文件在执行时发生的所有异常,它是 java.lang.Throwable 类的一个对象。
2.2.5 pageContext 对象
pageContext 内置对象是一个比较特殊的对象。它相当于页面中所有对象功能的集合,即使用它可以访问到本页面 中所有对象。pageContext 内置对象由 Jsp 容器创建并初始化,pageContext 对象提供了对 JSP 页面所有对象及控件 的访问。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<%@ page errorPage="error.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>
<%
pageContext.setAttribute("name0", "pageInfo");
request.setAttribute("name1", "requestInfo");
session.setAttribute("name2", "sessionInfo");
application.setAttribute("name3", "applicationInfo");
out.println("使用pageContext<br/>");
out.println("page中的属性值:"+pageContext.getAttribute("name0")+"<br/>");
out.println("request中的属性值:"+pageContext.getRequest().getAttribute("name1")+"<br/>");
out.println("session中的属性值:"+pageContext.getSession().getAttribute("name2")+"<br/>");
out.println("application中的属性值:"+pageContext.getServletContext().getAttribute("name3")+"<br/>");
%>
</body>
</html>
3. JavaBean组件
3.1 Javabean组件引入
3.2 jsp:useBean创建 javabean
<jsp:useBean id="实例化对象名称" scope="保存范围" class="类完整名称"/>
Scope:一共有 page,request,session 和 application4 个属性范围,默认是 page;
3.3 jsp:setProperty 设置 javabean 属性值
<jsp:setProperty property="属性名称" name="实例化对象的名称" value="属性值" param="参数名称"/>
Property=”*” 自动匹配所有
不匹配全部:
(这里设置了age的值)
运行
注意
3.4 jsp:getProperty 获取 javabean 属性值
运行
3.5 javabean 删除
Page 范围:pageContext.removeAttribute(“javaBean Name”);
request 范围:request.removeAttribute(“javaBean Name”);
session 范围:session.removeAttribute(“javaBean Name”);
application 范围:application.removeAttribute(“javaBean Name”);