JAVA Web02——JSP的页面元素、JSP九大内置对象

目录

 

一、JSP的页面元素

1.JAVA代码(脚本Scriptlet)

2.指令

3.注释

二、JSP九大内置对象

1.out:输出对象,向客户端输出内容

2.request:请求对象,存储“客户端向服务端发送的请求信息

3.response:响应对象

4.session

cookie和session的区别

cookie(客户端,不是内置对象,要使用必须new)

session:会话

session机制

5.application:全局对象

6.pageContext:JSP页面容器

7.config:配置对象(服务器配置信息)

8.page:当前JSP页面对象(相当于JAVA中的this)

9.exception:异常对象

四种范围对象(由小到大)

①pageContext JSP页面容器  

②request  请求对象

③session  会话对象

④appliation  全局对象


一、JSP的页面元素

1.JAVA代码(脚本Scriptlet)

<%
    局部变量、Java语句
%>

<%!
    全局变量、定义方法
%>

<%=输出表达式%> 

eg:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
	<%!
		public String bookName;
		public void init(){
			bookName = "java书";
		}
	%>
	
	<%
		String name = "zhangsan";
		out.print("hello..."+name);
		init();
	%>
	<%="hello..."+bookName%>
</body>
</html>

 修改web.xml、配置文件、java,需要重启Tomcat服务
修改Jsp\tml\css\js,不需要重启
<%%>里的print输出的是HTML文本

2.指令

<%@ %>

page指令:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>

page指定的属性:

  • language:jsp页面使用的脚本语言
  • import:导入类
  • pageEncoding:jsp文件自身编码 jsp->java
  • contentType:浏览器解析jsp的编码
    import="java.util.Date"

3.注释

<%-- --%>

二、JSP九大内置对象

自带的,不需要new也能使用的对象

1.out:输出对象,向客户端输出内容

2.request:请求对象,存储“客户端向服务端发送的请求信息

对象常见方法

  • String getParameter(String name):根据请求的字段名key,返回字段值value
  • String[] getParameter(String name):根据请求的字段名key,返回多个字段值value(checkbox)
  • void setCharacterEncoding("编码格式utf-8"):设置请求编码(tomcat7以前默认iso-8859-1,tomcat8以后改为了utf-8)
  • getRequestDisatcher("b.jsp").forward(request, response):请求转发的方式跳转页面 A->B
  • ServletContent getSeverContent():获取项目的ServletContent对象

示例:
注册 register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="show.jsp">
		用户名:<input type="text" name="uname"/></br>
		密码:<input type="password" name="upwd"/></br>
		年龄:<input type="text" name="uage"/></br>
		爱好:</br>
		<input type="checkbox" name="uhobbies" value="足球"/>足球
		<input type="checkbox" name="uhobbies" value="篮球"/>篮球
		<input type="checkbox" name="uhobbies" value="乒乓球"/>乒乓球</br>
		<input type="submit" value="注册">
	</form>
</body>
</html>

show.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("uname");
		int age = Integer.parseInt(request.getParameter("uage"));
		String pwd = request.getParameter("upwd");
		
		String[] hobbies = request.getParameterValues("uhobbies");
	%>
	
	注册成功,信息如下:</br>
	姓名:<%=name %></br>
	年龄:<%=age %></br>
	密码:<%=pwd %></br>
	爱好:</br>
	<%
		if(hobbies!=null){
			for(String hobby:hobbies){
				out.print(hobby+"&emsp;");
			}
		}
	%></br>
</body>
</html>

 get提交方式:method="get" 和 地址栏、超链接(<a href="xx">)请求方式 默认都属于get提交方式
get与post请求方式的区别:
get方式在地址栏显示请求信息(但是地址栏能够容纳的信息有限,4-5KB);post不会显示
文件上传操作,必须是POST
推荐使用POST

3.response:响应对象

提供的方法:
void addCookie(Cookie cookie):服务端向客户端增加cookie对象
void sendRedirect(String location) throws IOException:页面跳转的一种方式(重定向)
void setContentType(String type):设置服务端相应的编码(设置服务端的contentType类型)
实例:登录
login.jsp -> check.jsp -> success.jsp

login.jsp
 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="check.jsp" method="post">
		用户名:<input type="text" name="uname"></br>
		密码:<input type="password" name="upwd"></br>
		<input type="submit" value="登录"></br>
	</form>
</body>
</html>

 check.jsp
 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("uname");
		String pwd = request.getParameter("upwd");
		if(name.equals("aa") && pwd.equals("abc")){
			//response.sendRedirect("success.jsp"); 页面跳转:重定向,导致数据丢失
			//页面跳转:请求转发,可以获取到数据,并且地址栏没有改变(仍然保留转发时的页面)
			request.getRequestDispatcher("success.jsp").forward(request,response);
		}else{
			out.print("用户名或密码错误");
		}
	%>
</body>
</html>

 success.jsp
 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	登陆成功!</br>
	欢迎您:
	<%
		String uname = request.getParameter("uname");
	%>
	<%=uname %>
</body>
</html>
 请求转发重定向
地址栏是否改变不变改变
是否保留第一次请求时的数据保留不保留
请求的次数12
跳转发生的位置服务端客户端

4.session

cookie和session的区别

 sessioncookie
保存的位置服务端客户端
安全性较安全较不安全
保存的内容ObjectString

cookie(客户端,不是内置对象,要使用必须new)

Cookie是由服务端生成的,再发送给客户端保存。
相当于本地缓存的作用:客户端 -> 服务端
      作用:提高访问服务端的效率,但是安全性较差
      Cookie:name=value
      javax.servlet.http.Cookie
①服务端产生cookie:
      public Cookie(String name,String value)
      String getName()
      String getValue()
      void setMaxAge(int expiry); 最大有效期(秒)
②服务端准备Cookie:
response.addCookie(Cookie cookie)
③页面跳转(转发,重定向)
④客户端获取cookie:
request.getCookies();
~服务端增加cookie:response对象;客户端获取对象:resquest对象
~不能直接获取某一个单独对象,只能一次性将全部的cookie拿到
通过F12可以发现 除了自己设置的Cookie对象外,还有一个name为JSESSIONID的cookie
建议cookie只保存英文数字,否则需要进行编码、解码
服务端在响应客户端时,会发送一个JESSION的 cookie:客户端在第一次请求服务端时,如果服务端发现此请求没有 JSESSIONID,则会创建一个name=JSESSIONID的 Cookie并返回给客户端
eg:使用Cookie实现记住用户名功能
login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%!
		String uname;
	%>
	<%
		Cookie[] cookies = request.getCookies();
		for(Cookie cookie:cookies){
			if(cookie.getName().equals("uname")){
				uname = cookie.getValue();
			}
		}
	%>

	<form action="check.jsp" method="post">
		用户名:<input type="text" name="uname" value="<%=uname==null?"":uname%>"></br>
		密码:<input type="password" name="upwd"></br>
		<input type="submit" value="登录"></br>
	</form>
</body>
</html>

 check.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("uname");
		String pwd = request.getParameter("upwd");
		
		//将用户名加入到cookie中
		Cookie cookie = new Cookie("uname",name);	//不要中文
		response.addCookie(cookie);
		
		response.sendRedirect("A.jsp");
	%>
</body>
</html>

session:会话

浏览网站:开始-关闭
购物:浏览、付款、退出
电子邮件:浏览、写邮件、退出
从开始到结束是一次会话

session机制

客户端第一次请求服务器时,(jsessionid - sessionid进行匹配,不存在时)服务端会产生一个session对象(用于保存该客户的信息)
并且每个session对象 都会有一个唯一的sessionId(用于区分其他session)
服务端就会产生一个cookie,并且该cookie的name=JSESSIONID,value=服务端sessionId的值
然后服务端会在响应客户端的同时将该 cookie发送给客户端,至此客户端就有了一个 cookie(JSESSIONID)
因此,客户端的cookie就可以和服务端的session一一对应(JSESSION - sessionID)

客户端第二/n次请求服务器时:服务端会先用客户端cookie中的JSESSIONID 去服务端的session中匹配sessionid,如果匹配成功(cookie jsessionid和session sessionid)说明此用户不是第一次访问,无需登录;

session:
1、session存储在服务端
2、session是在同一个用户(客户)请求时共享
3、实现机制:第一次客户请求时 产生一个sessionid 并复制给cookie的jsession然后发给客户端。最终通过session的sessionid-cookie的jsessionid匹配

session方法:
String getId():获取sessionId
boolean isNew():判断是否是新用户(第一次访问)
void invalidate():使session失效(退出登录、注销)

void setAttribute()
Object getAttribute()

void setMaxInactiveInterval(秒):设置最大有效非活动时间
int getMaxInactiveInterval():获取最大有效非活动时间

示例:登录、注销
request:数据同一次请求有效
login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="check.jsp" method="post">
		用户名:<input type="text" name="uname"></br>
		密码:<input type="password" name="upwd"></br>
		<input type="submit" value="登录"></br>
	</form>
</body>
</html>

check.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("uname");
		String pwd = request.getParameter("upwd");
		if(name.equals("aa") && pwd.equals("abc")){
			//只有登录成功,session中才会存在uname/upwd
			session.setAttribute("uname", name);
			session.setAttribute("upwd", pwd);
			
			//session.setMaxInactiveInterval(10);
			
			request.getRequestDispatcher("welcome.jsp").forward(request,response);
		}else{
			response.sendRedirect("login.jsp");
		}
	%>
</body>
</html>

welcome.jsp
 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	登陆成功!</br>
	欢迎您:
	<%
		String name = (String)session.getAttribute("uname");
		//如果用户没有登录,而是直接通过地址栏访问welcome.jsp,则必然获取到的name是null
		if(name!=null){
			out.print(name);
			System.out.println("sessionId:"+session.getId());
			Cookie[] cookies = request.getCookies();
			for(Cookie cookie:cookies){
				if(cookie.getName().equals("JSESSIONID")){
					System.out.println("JSESSIONID:"+cookie.getValue());
				}
			}
	%>
		<a href="invalidate.jsp">注销</a>
	<%
		}else{//如果没有登录,应该跳转登录页面
			response.sendRedirect("login.jsp");
		}
	%>
</body>
</html>

5.application:全局对象

String getContextPath() 虚拟路径
String getRealPath(String name) 绝对路径(虚拟路径 相对的绝对路径)

显示:

<%="当前项目的虚拟路径:"+application.getContextPath()+"<br/>"%>
<%="虚拟路径对应的绝对路径:"+application.getRealPath("/项目名")+"<br/>"%>

 

6.pageContext:JSP页面容器

7.config:配置对象(服务器配置信息)

8.page:当前JSP页面对象(相当于JAVA中的this)

9.exception:异常对象

四种范围对象(由小到大)

pageContext JSP页面容器  当前页面有效
request  请求对象                同一次请求有效
session  会话对象                同一次会话有效
appliation  全局对象             全局有效(整个项目有效)

以上四个对象共有的方法:
Object getAttribute(String name):根据属性名,获取属性值
void setAttribute(String name,Object obj):设置属性值(新增,修改)
void removeAttribute(String name):根据属性名,删除对象

①pageContext JSP页面容器  

当前页面有效,页面跳转后无效

②request  请求对象

同一次请求有效,其它请求无效(请求转发有效,重定向无效)

③session  会话对象

同一次会话有效(无论怎么跳转,都有效;关闭/切换浏览器后无效;从登陆到退出之间全部有效)

④appliation  全局对象

整个项目运行期间都有效(切换浏览器仍然有效)

以上项目尽量用小,因为范围越大性能损耗越大

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值