javaee笔记第二天

jsp的页面元素

  1. 脚本Scriptlet:
<% 
	java代码 (主要定义局部变量、java语句)
%>
<%java代码 (主要定义全局变量、定义方法)
%>
<%=输出表达式6%>
  1. 指令
  • page指令:
<%@ page ... %>

page指令属性:

属性描述
buffer指定out对象使用缓冲区的大小
autoFlush控制out对象的 缓存区
contentType指定当前JSP页面的MIME类型和字符编码
errorPage指定当JSP页面发生异常时需要转向的错误处理页面
isErrorPage指定当前页面是否可以作为另一个JSP页面的错误处理页面
extends指定servlet从哪一个类继承
import导入要使用的Java类
info定义JSP页面的描述信息
isThreadSafe指定对JSP页面的访问是否为线程安全
language定义JSP页面所用的脚本语言,默认是Java
session指定JSP页面是否使用session
isELIgnored指定是否执行EL表达式
isScriptingEnabled确定脚本元素能否被使用
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
  • Include指令
    JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。
    Include指令的语法格式如下:
<%@ include file="文件相对 url 地址" %>

include 指令中的文件名实际上是一个相对的 URL 地址。
如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。
等价的XML语法:

<jsp:directive.include file="文件相对 url 地址" />
  • Taglib指令
    JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。
    Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。
    Taglib指令的语法:
<%@ taglib uri="uri" prefix="prefixOfTag" %>

uri属性确定标签库的位置,prefix属性指定标签库的前缀。
等价的XML语法:

<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />
  1. 注释
  • html注释:<!-- ... -->
  • java注释://... 或 /*...*/
  • jsp注释:<%-- ... --%>

jsp内置对象

  1. out:输出对象,向客户端输出内容
  2. pageContextjsp页面容器
  3. request:请求对象,存储客户端向服务端发送的请求消息
    • 常见方法

      • String getParameter(String name)根据请求字段名key,获取请求字段的值value
      • String[] getParameterValues(String name) 根据请求字段名key,获取请求字段的值values (常见的有 checkbox)
      • setCharacterEncoding("编码格式")设置请求编码
      • getRequestDispatcher("b.jsp").forward(request,response)请求转发的方式跳转页面A->B
      • getServerContext() 获取项目的ServletContext对象
    • 小例子
      index.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" method="get">
		账号:<input type="text" name="account" /><br/>
		密码:<input type="password" name="password" /><br/>
		年龄:<input type="text" name="age" /><br/>
		爱好:<input type="checkbox" name="hobbies" value="足球"/>足球、
			<input type="checkbox" name="hobbies" value="篮球"/>篮球、
			<input type="checkbox" name="hobbies" value="游戏"/>游戏、
			<input type="checkbox" name="hobbies" 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 account = request.getParameter("account");
		String password = request.getParameter("password");
		String age = request.getParameter("age");
		String[] hobbies = request.getParameterValues("hobbies");
	%>
	注册成功,信息如下:<br/>
	账号:<%=account %><br>
	密码:<%=password %><br>
	年龄:<%=age %><br>
	爱好:<%
		if(hobbies != null){
			for(String hobbie: hobbies){
				out.print(hobbie + " &nbsp; ");
			}
		}
	%>
	<br>
</body>
</html>
  1. response
    • 提供的方法
      • void addCookie(Cookie cookie)服务端向客户端增加一个cookie
      • void sendRedirect(“a.jsp”)重定向到a.jsp(页面跳转的一种方式),会抛异常throws IOException
      • void setContentType(String type) 设置响应编码,设置服务端的content类型
    • 小案例
      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">
    	账号:<input type="text" name="account" /><br/>
    	密码:<input type="password" name="password" /><br/>
    	<input type="submit" value="登录"/>
    </form>
    </body>
    </html>
    

check.jsp代码如下:

<%@page import="java.io.IOException"%>
<%@ 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 account = request.getParameter("account");
		String password = request.getParameter("password");
		if(account.equals("张三") && password.equals("abc123")){
		//如果账号密码正确则转发到success.jsp(数据不会丢失,通过forward(request, response)中的参数传递)
			request.getRequestDispatcher("success.jsp").forward(request, response);
		}else{
			try{
			//账号密码不正确,重定向到login.jsp(数据会丢失)
				response.sendRedirect("login.jsp");
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	%>
</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/>
	欢迎
	<%=request.getParameter("account") %>
</body>
</html>
  • 请求转发与重定向的区别
    请求转发重定向
    地址栏是否改变不变
    是否保留第一次请求时的数据保留
    请求次数1
  1. session

    • Cookie(不是内置对象,由服务端产生,再发送给客户端保存,相当于本地缓存)
      • 可以Cookie可以提高访问效率,但是安全性较差
      • Cookie:key = value
      • 所在jar包:javax.servlet.http.Cookie
      • Cookie方法:public Cookie(String key, String value)、String getName()、String getValue()、void setMaxAge(int expiry)设置最大有效期,单位是秒;
      • 服务端发送给客户端:response.addCookie(Cookie cookie)
      • 客户端获取Cookie:request.getCookies();
    • 小案例

addCookie.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>

<%
	Cookie cookie1 = new Cookie("name","张三");
	Cookie cookie2 = new Cookie("password","abc123");
	
	response.addCookie(cookie1);
	response.addCookie(cookie2);
	
	response.sendRedirect("getCookie.jsp");
%>

</body>
</html>

getCookie.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>

<%
	Cookie[] cookies = request.getCookies();
	for(Cookie cookie : cookies){
		out.print(cookie.getName() + "---" +cookie.getValue() + "<br/>");
	}
%>

</body>
</html>

效果:

在这里插入图片描述

  • 记住密码和用户名案例

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 uAccount;
	String uPassword;

%>
<%
	Cookie[] cookies = request.getCookies();
	for(Cookie cookie : cookies){
		if(cookie.getName().equals("name")){
			uAccount = cookie.getValue();
		}else if(cookie.getName().equals("password")){
			uPassword = cookie.getValue();
		}
	}
%>
	<form action="check.jsp">
		账号:<input type="text" name="account" value="<%= uAccount==null?"":uAccount%>"/><br/>
		密码:<input type="password" name="password" value="<%= uPassword==null?"":uPassword%>"/><br/>
		<input type="submit" value="登录"/>
	</form>
</body>
</html>

check.jsp代码如下:

<%@page import="java.io.IOException"%>
<%@ 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 account = request.getParameter("account");
		String password = request.getParameter("password");
		
		//将用户信息添加到cookie中
		Cookie uAccount = new Cookie("name",account);
		Cookie uPassword = new Cookie("password",password);
		
		response.addCookie(uAccount);
		response.addCookie(uPassword);
		
		uAccount.setMaxAge(60);
		uPassword.setMaxAge(60);
		
		response.sendRedirect("success.jsp");
	%>
</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>
<%!
	String uAccount;
%>
<%
	Cookie[] cookies = request.getCookies();
	for(Cookie cookie : cookies){
		if(cookie.getName().equals("name")){
			uAccount = cookie.getValue();
		}
	}
%>
	登录成功!<br/>
	欢迎
	<%=uAccount %>
	
</body>
</html>
  • session(会话)
    • 从开始浏览网页到关闭网页为一次会话
    • session机制:客户端第一次请求时,服务端会产生一个session对象(用于存储用户的信息),并且每个session对象都有一个唯一的sessionId(用于区分其他的session),服务端会产生一个cookie,并且该cookie的name = JSESSIONID,value = 服务端sessionId的值;服务端在响应客户端的时候会将该cookie发送给客户端,至此,客户端就有一个cookie(同时拥有JSESSIONID);客户端的cookie就可以和服务器端的session一一对应,(JSESSIONID与sessionId一一对应);当客户端第2/n此请求服务端时,服务端会先用客户端的cookie中的JSESSIONID去服务端session中匹配sessionId,如果匹配成功,说明此用户不是第一次访问,无需登录等操作,如果匹配失败,这需要登录。
    • session方法:String getId()获取sessionId,Boolean isNew()判断是否是第一次访问,void invaliddate()是session失效,如退出登录,void setAttribute(),Object getAttribute(),void setMaxInactiveInterval(秒)设置最大有效非活动时间,int getMaxInactiveInterval()查看当前最大非活动时间
  • 小例子

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 account = (String) session.getAttribute("account") == null ? "":(String) session.getAttribute("account");
	String password = (String) session.getAttribute("password") == null ? "":(String) session.getAttribute("password");
	if(account.equals("张三") && password.equals("abc123")){
		response.sendRedirect("success.jsp");
	}
	%>
	<form action="check.jsp">
		账号:<input type="text" name="account" /><br/>
		密码:<input type="password" name="password" /><br/>
		<input type="submit" value="登录"/>
	</form>
</body>
</html>

check.jsp代码如下:

<%@page import="java.io.IOException"%>
<%@ 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 account = request.getParameter("account") == null ? (String) session.getAttribute("account") : request.getParameter("account");
		String password = request.getParameter("password") == null ? (String) session.getAttribute("password") : request.getParameter("password");
		if(account == null || password == null){
			try{
				response.sendRedirect("login.jsp");
			}catch(IOException e){
				e.printStackTrace();
			}
		}else if(account.equals("张三") && password.equals("abc123")){
			session.setAttribute("account", account);
			session.setAttribute("password", password);
			session.setMaxInactiveInterval(30);
			response.sendRedirect("success.jsp");
		}else{
			try{
				response.sendRedirect("login.jsp");
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	%>
</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 account = (String)session.getAttribute("account");
	if(account == null){
		response.sendRedirect("login.jsp");
	}else{
		out.print(account);
	}
		
	%>
	<br>
	<a href="logout.jsp">注销</a>
</body>
</html>

logout代码如下:

<%@ 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>
	<%
		session.invalidate();
		response.sendRedirect("login.jsp");
	%>
</body>
</html>
- session与cookie的区别
sessioncookie
保存的位置服务端客户端
安全性较安全较不安全
保存的内容ObjectString
  1. application全局对象
  • String getContextPath()获取虚拟路径
  • String getRealPath(String name)获取绝对路径(与虚拟路径相对应的)
  1. config配置对象(服务器配置信息)

  2. page当前jsp页面对象(相当于java中的this)

  3. exception异常对象

四种范围对象

从小到大:pageContext(page对象)、request、session、application

对象范围
pageContext当前页面
request同一次请求有效
session同一次会话有效
application整个项目运行期间(切换浏览器仍然有效)
  1. 以上四个对象,通过setAttribute赋值,通过getAttribute取值;
  2. 以上四个对象,尽量使用小范围,因为对象范围越大,性能损耗越大

以上四个对象共有的方法

  • getAttribute(String name)根据属性名获取属性值
  • void setAttribute(String name, Object obj)设置属性名和值(新增,修改)
  • void removeAttribute(String name) 根据属性名删除对象

未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮沉逆旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值