JSP Cookie HttpSession入门

JSP  

 首先来个index.jsp演示基本用法

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <!-- 向頁面輸出basePath -->
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
    This is my JSP page. <br>
    <%
    	int a = 10;
    %>
    <%
    	out.print(a++);
    %>
    <br/>
    <%= a %>
    
    <%!
    	int a = 100;	
    public void fun1(){
    	System.out.println(a);
    }
    %>
    <%
    	out.print(this.a++);
    	fun1();
    %>
  </body>
</html>

然后写个简单的jsp与Servlet分工Demo

1.from.jsp

<body>
    <form action="/day11_1/AServlet" method="post">
    	整数1:<input type="text" name="num1"/><br/>
    	整数2:<input type="text" name="num2" /><br/>
    	<input type="submit" value="提交" />
    </form>
  </body>

2.AServlet

package cn.itcast.servlet;

import java.io.IOException;

import javax.naming.spi.DirStateFactory.Result;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/AServlet")
public class AServlet extends HttpServlet {

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取参数
		String s1 = request.getParameter("num1");
		String s2 = request.getParameter("num2");
		//转换成int
		int num1 =Integer.parseInt(s1);
		int num2 = Integer.parseInt(s2);
		//运算
		int sum = num1 + num2;
		
		//把结果保存到request域中
		request.setAttribute("result",sum);
		//转发到result.jsp
		request.getRequestDispatcher("/jia/result.jsp").forward( request, response);
	}

}

3.result.jsp

  <body>
    <%
    	Integer result =(Integer) request.getAttribute("result");
    %>
    
    <%= result %>
  </body>
</html>

如何看到jsp被转换成java代码



Cookie

cookie的最大生命:cookie.setMaxAge(60),以秒为单位 表示被浏览器 保存到硬盘60s

maxAge>0 保存到客户机硬盘

=0 在浏览器内存存在,浏览器进程结束则cookie死亡

<0  浏览器马上删除这个cookie

demo:把a的cookie发送到b 并打印出来

a.jsp

 <body>
   <h1>保存cookie</h1>
   <%--request response session application  pageContext config out page exception--%>
   <%
   		Cookie cookie1 = new Cookie("aaa","AAA");
   		cookie1.setMaxAge(60*60);
   		response.addCookie(cookie1);
   		
   		Cookie cookie2 = new Cookie("bbb","BBB");
   		response.addCookie(cookie2);
   %>
  </body>

b.jsp

  <body>
  	<h1>获取Cookie</h1>
  	<%
  		Cookie[] cookies = request.getCookies();
  		if(cookies!=null){
  			for(Cookie c :cookies){
  				out.print(c.getName()+"=="+c.getValue()+"<br/>");
  			}
  		}
  	%>
  </body>



Cookie的domain  域
  Cookie的path是在同一主机中指定共享Cookie,如果主机不同那么就一定不能共享Cookie,无论path是什么。
  如果希望不同的二级域名中可以共享Cookie,那么就要设置Cookie的domain了。
  例如:news.baidu.com、tieba.baidu.com、zhidao.baidu.com,它们的域名不同,但百度希望它们之间可以共享Cookie,那么就要设置domain了。

  1). 设置Cookie的path为“/”,例如:cookie.setPath("/");

  2). 设置Cookie的domain,例如:cookie.setDomain(".baidu.com"),其中domain中没有指定域名前缀!

HttpSession

三大域对象之1(request,session,application(ServletContext))

只要是域对象 都有这三个方法

1.void getAttribute(String name,Object value)

2.Object getAttribute(String name);

3.void removeAttribute(String name);

demo1:演示session中会话的多次请求中共享数据

a.jsp:向session域中保存数据

 <body>
    <h1>向session域保存数据</h1>
    <%--HttpSession session =request.getSession();已经在jsp最上方自动被创建了9大内置对象 所以这里不用 重新创建--%>
    <%
    	
    	session.setAttribute("aaa", "AAA");
    %>
  </body>

b.jsp:向session域中获取数据

<body>
    <h1>获取session中的数据</h1>
    <%
    	String s = (String)session.getAttribute("aaa");
    %>
    <%= s %>
  </body>


demo2: 演示登录请求 验证登录

login.jsp

<body>
   <%-- 本页面提供登录表单 还要显示错误信息 --%>
   <h1>登录</h1>
   <%	
   		//读取名为uname的cookie 不为空就显示到username文本框
   		String uname="";
   		Cookie[] cookies =  request.getCookies();
   		if(cookies!=null){ //如果存在cookie
   			for(Cookie cookie:cookies){ //遍历
   				if("uname".equals(cookie.getName())){	//查找名为uname的cookie
   					uname = cookie.getValue();	//获取cookie的值 赋值给uname;
   				}
   			}
   		}
   %>
   	<%
   		String message="";
   		String msg = (String) request.getAttribute("msg");	//获取request的msg信息
   		if(msg!=null){
   			message = msg;
   		}
   	%>
   <font color="red"><b>
   <%= message %>
   </b></font>
   <form action="/day11_3/LoginServlet" method="post">
   		<!-- 把cookie的用户名显示到用户名文本框 -->
   		用户名:<input type="text" name="username" value="<%= uname %>"><br/>
   		密码:<input type="password" name="password"> <br/>
   		<input type="submit" value="登录">
   </form>
  </body>

LoginServlet

package cn.itcast.servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/**
		 * 获取表单数据
		 */
		//如果出现乱码 则编码一下
		request.setCharacterEncoding("utf-8");
		//获取
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		/*
		 * 校验用户名和密码是否正确
		 */
		if(!"itcast".equals(username)){	//不等于itcast就登陆成功
			/*
			 * 附加功能:把用户名保存到cookie中 发送给客户端浏览器
			 * 当再次打开login.jsp时  login.jsp会读取request中国的cookie 把他显示到用户名文本框中
			 */
			Cookie cookie = new Cookie("uname", username);
			cookie.setMaxAge(60*60*24);	//设置cookie命长为1天
			response.addCookie(cookie);	//保存cookie
			
			
			/*
			 * 如果成功 1.保存用户信息到session 2.重定向到succ1.jsp	
			 */
			HttpSession session = request.getSession(); //获取session
			session.setAttribute("username",username);	//向session域保存用户名
			session.setAttribute("password", password);
			response.sendRedirect("/day11_3/session2/succ1.jsp"); //重定向
			
		}else{ //登录失败
			/*
			 * 失败 保存错误信息到request域中
			 * 转到login.jsp
			 */
			request.setAttribute("msg","用户名或者密码错误");
			RequestDispatcher qr =request.getRequestDispatcher("/session2/login.jsp");
			qr.forward(request, response);	//转发
		}
	}

}

登录成功界面 succ1.jsp

 
  <body>
  	<h1>succ1</h1>
  	<%
  		String username = (String) session.getAttribute("username");
  		if(username ==null){
  			/* 
  			1.向request域保存错误信息,转发login.jsp
  			*/
  			request.setAttribute("msg","你还未登录");
  			RequestDispatcher rd = request.getRequestDispatcher("/session2/login.jsp");
  			rd.forward(request, response);
  			return;
  		}
  	%>
  	欢迎欢迎,欢迎<%= session.getAttribute("username") %>
  </body>

登录成功界面 succ2.jsp (和1界面一样 只是为了验证session信息还活着)

<body>
	<h1>succ2222222</h1>
  	<%
  		String username = (String) session.getAttribute("username");
  		if (username == null) {
  			/* 
  			1.向request域保存错误信息,转发login.jsp
  			*/
  			request.setAttribute("msg", "你还未登录");
  			RequestDispatcher rd = request
  					.getRequestDispatcher("/session2/login.jsp");
  			rd.forward(request, response);
  			return;
  		}
  	%>
  	欢迎欢迎,欢迎<%=session.getAttribute("username")%>
  </body>


URL重写

package cn.itcast.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/AServlet")
public class AServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//让其编码为utf-8
		response.setContentType("text/html;charset=utf-8");
		request.getSession();
		response.getWriter().print("请查看是否有session这个cookie");
	}
	
}
<!-- URL重写 就是把所有的页面中的路径.都使用response.encodeURL("路径")处理一下 就是把cookie变成参数 -->
  <body>
  <a href="/day11_3/AServlet;JSESSIONID=<%=session.getId() %>">点击这里</a>
  <a href="/day11_3/AServlet;JSESSIONID=<%=session.getId() %>">点击这里</a>
  <a href="/day11_3/AServlet;JSESSIONID=<%=session.getId() %>">点击这里</a>
  <%
  	//它会查看cookie是否存在 如果不存在 在指定的url添加JSessionId参数
  	//如果cookie存在 则不会在url后加任何东西
  	out.print(response.encodeUrl("/day11_3/AServlet"));
  %>
  </body>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值