web 学习记录2

jsp九大内置对象(自带的不需要new 也能使用的对象)

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

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

常见方法:
a、String getParameter(String name) 根据请求的字段名(input标签的name名)key返回value
b、String[] getParameterValues(String name) 根据请求的字段名key返回多个value
c、void setCharacterEncoding(“编码格式UTF-8”) 设置请求编码 如果不设置(tomcat7及以前默认iso-8859-1,tomcat8以后改为utf-8)
d、getRequestDispatcher(“要跳转到那个页面”).forward(固定的 request,response) 请求转发跳转页面
e、ServletContext getServerContext() 获取项目的ServletContext对象

示例:

<%@ 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="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>
<%@ 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("unane");
		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 a:hobbies){
				out.print(a+"&nbsp;");
			}
		}
		
	%>
</body>
</html>

注意:
method=“get” 、地址栏、超链接(< a href=“xx”>) 请求方式 默认都属于get提交方式
连接/文件?参数名1=参数值1&参数名2=参数名2

3、 response :响应信息

常见方法:
void addCookie(Cookie cookie) :服务端向客户端增加cookie对象
void sendRedirect(String location) throws IOException ; :页面跳转的一种方式(重定向)
void setContentType(String type); 设置服务端响应编码(设置服务端contentType类型)
示例:登陆
login.jsp->check.jsp–>success.jsp(如果检查成功)

#、cookie(不是内置对象)
服务端 session和Cookie关系密切但是cookie不是内置对象使用时需要new
Cookie(客户端 ,不是内置对象):Cookie是由 服务端产生的,再发给客户端保存。(存在于客户端,但是不是客户端产生的,是由服务端产生后给客户端的。)相当于本地缓存的作用
作用:提高访问服务端的效率,但是安全性较差。
Cookie :name= value
是由javax.Servlet.http.Cookie这个类产生的
javax.Servlet.http.Cookie类的方法:
public Cookie (String name,String value) 构造方法
String getName()
String getValue()
void setMaxAge(int expiry ); 设置最大有效期(单位秒)
服务端发送客户端:
response.addCookie(Cookie cookie)
页面跳转(转发,重定向)
客户端获取cookie:request.getCookies() (不能直接获取某一个单独对象,只能一次性将 全部cookie拿到)
通过F12可以发现 除了自己设置的cookie对象以外还有一个name为JSESSIONID的cookie
建议cookie中使用英文和数字 ,不要用中文否则需要编码、解码
4、session : 会话
一次会话:
a、浏览网站:打开浏览器-----浏览信息-------关闭浏览器
b、网购:浏览--------付款-------退出
c、电子邮件:浏览------写邮件-------退出
开始---------结束

session机制
客户端第一次请求服务端时,(第一次JSESSIONIS 和sessionID匹配如果没有就创建一个)服务端会产生一个session对象(用于保存该客户的信息);并且每个session对象都有一个唯一的sessionId(用于区分其他session);服务端又会产生一个cookie,并且该cookie的name=JESSIONID,value=服务端sessionid的值;然后服务端在响应客户端的同时 将该cookie发送给客户端,至此客户端就有了一个cookie(JSESSIONID),因此客户端的cookie就可以和服务端的session进行一一对应(JSESSIONID-----sessionID)
客户端第二/n次请求服务端时:服务端会先根据客户端cookie中JSESSIONISD
去服务端的session中匹配sessionID,如果匹配成功(cookie的JSESSIONID 和session的 session ID),说明此用户不是第一次访问,无需登录;
例子
客户端: 顾客(客户端)
服务端:存包处 --商场(服务端)
顾客第一次存包:商场判断此人 之前是否已经存过包(通过顾客手里是否有钥匙)。
如果是新顾客(没有钥匙),分配一个钥匙给该顾客;钥匙 会 和柜子一一对应;
第二/n次 存包 商场判断此人之前存过包(通过手里的钥匙)
如果是老顾客(有钥匙),则不需要分配;自动会和柜子一一对应
在这里插入图片描述
a、session存储在服务端
b、session是在同一个用于(客户)请求时 共享
c、实现机制:第一次客户请求时 产生一个sessionid并复制给cookie的jsessionid 然后发给客户端。

session方法:
String getId() : 获取sessionId
boolean isNew() : 判断是否是新用户(第一次访问)
void invalidate():使session失效(退出登录、注销)
void setAttribute()
Object getAttribute()
void setMaxInactiveInterval(单位秒):设置最大有效 非活动时间
int getMaxInactiveInterval():获取最大有效 非活动时间
示例
在这里插入图片描述

<%@ 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="text" name="upwd"/></br>
		<input type="submit" value="登录"/></br>
	</form>
</body>
</html>
<%@ 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 name=request.getParameter("uname");
		String pwd=request.getParameter("upwd");
		if(name.equals("zs")&&pwd.equals("abc")){
			session.setAttribute("uname",name);
			session.setAttribute("upwd",pwd);
			session.setMaxInactiveInterval(10);
			request.getRequestDispatcher("welcom.jsp").forward(request, response);
		}
		else{
			//登录失败
			response.sendRedirect("login.jsp");
		}
	%>
</body>
</html>
<%@ 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 name=(String)session.getAttribute("uname");
		//如果 用户没有登录,而直接 通过地址栏 访问welcom.jsp,则获得的name必然使null
		
		if(name!=null){
			out.print(name);
			
		}else{
			//如果没有登录 则跳回登录页面
			response.sendRedirect("login.jsp");
		}
		
	%>
</body>
</html>

5、application :全局对象
常用方法:
String getContextPath() 获取当前项目的虚拟路径
String getRealPath() 绝对路径

6、config :配置信息(服务器配置信息)

7、page : 当前JSP页面对象(相当于Java中的this)

8、exception :异常对象

9、pageContext :JSP页面容器

发布了34 篇原创文章 · 获赞 3 · 访问量 977

猜你喜欢

转载自blog.csdn.net/qq_41870790/article/details/103324197