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"%>




Insert title here


	<%!
		public String bookName;
		public void init(){
			bookName = "java书";
		}
	%>
	
	<%
		String name = "zhangsan";
		out.print("hello..."+name);
		init();
	%>
	<%="hello..."+bookName%>

 修改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"%>




Insert title here


	
用户名:
密码:
年龄:
爱好:
足球 篮球 乒乓球

show.jsp

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




Insert title here


	<%
		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");
	%>
	
	注册成功,信息如下:
姓名:<%=name %>
年龄:<%=age %>
密码:<%=pwd %>
爱好:
<% if(hobbies!=null){ for(String hobby:hobbies){ out.print(hobby+" "); } } %>

 get提交方式:method="get" 和 地址栏、超链接()请求方式 默认都属于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"%>




Insert title here


	
用户名:
密码:

 check.jsp
 

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




Insert title here


	<%
		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("用户名或密码错误");
		}
	%>

 success.jsp
 

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




Insert title here


	登陆成功!
欢迎您: <% String uname = request.getParameter("uname"); %> <%=uname %>
  请求转发 重定向
地址栏是否改变 不变 改变
是否保留第一次请求时的数据 保留 不保留
请求的次数 1 2
跳转发生的位置 服务端 客户端

4.session

cookie和session的区别

  session cookie
保存的位置 服务端 客户端
安全性 较安全 较不安全
保存的内容 Object String

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"%>




Insert title here



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

	
用户名:">
密码:

 check.jsp

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




Insert title here


	<%
		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");
	%>

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"%>




Insert title here


	
用户名:
密码:

check.jsp

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




Insert title here


	<%
		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");
		}
	%>

welcome.jsp
 

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




Insert title here


	登陆成功!
欢迎您: <% 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()); } } %>
注销 <% }else{//如果没有登录,应该跳转登录页面 response.sendRedirect("login.jsp"); } %>

5.application:全局对象

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

显示:

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

 

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  全局对象

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

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

 

你可能感兴趣的:(JAVAWEB,session,java,servlet)