JavaWeb-05 会话及其会话技术

目录

Cookie对象

实例:显示用户上次访问时间

Session对象

实例:实现购物车

                                                                                                           

 任务:实现用户登录 

1.创建封装用户信息类

2.创建Servlet

3.创建登陆页面

4.启动项目,查看结果


Cookie对象

Cookie类的常用方法
功能描述方法声明
String getName()用于返回Cookie 的名称
void setValue(String newValue)用于为Cookie设置一个新的值
String getValue()用于返回 Cookie的值
void setMaxAge(int expiry)用于设置Cookie在浏览器客户机上保持有效的秒数
int getMaxAge()用于返回Cookie在浏览器客户机上保持有效的秒数
void setPath(String uri)用于设置该Cookie项的有效目录路径
String getPath()用于返回该Cookie 项的有效目录路径
void setDomain(String pattern)用于设置该Cookie项的有效域
 String getDomain()用于返回该Cookie 项的有效域
void setVersion(int v)用于设置该Cookie 项采用的协议版本
int getVersion()用于返回该Cookie 项采用的协议版本
void setComment(String purpose)用于设置该Cookie项的注解部分
String getComment()用于返回该Cookie 项的注解部分
void setSecure(boolean flag)用于设置该Cookie项是否只能使用安全的协议传送
boolean getSecure()用于返回该Cookie项是否只能使用安全的协议传送

实例:显示用户上次访问时间

1.创建Servlet
在Eclipse中新建Web项目chapter05,并在该项目下新建一个名称为pidan.cookie.example的包,在该包中编写一个名称为LastAccessServlet的Servlet类,用于实现获取 Cookie信息并将当前时间作为Cookie 值发送给客户端。

package pidan.cookie.example;

import java.io.IOException;
import java.util.Date;

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;

/**
 * Servlet implementation class LastAccessServlet
 */
@WebServlet("/LastAccessServlet")
public class LastAccessServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		
		Cookie[] cookies=request.getCookies();
		
		String lastTime=null;
		for(int i=0;cookies!=null&&i<cookies.length;i++) {
			String name=cookies[i].getName();
			if("lastccess".equals(name)) {
				lastTime=cookies[i].getValue();
			}
		}
		if(lastTime==null) {
			response.getWriter().print("第一次访问本网站!");
		}else {
			response.getWriter().print("上次访问的时间是:"+lastTime);
			response.getWriter().print("学号:2020080604029");
		}
		String time=String.format("%tF%<tT", new Date());
		Cookie cookie=new Cookie("lastccess", time);
		Cookie cookie1 = new Cookie("dashuju", "2004");
		response.addCookie(cookie);
		response.addCookie(cookie1);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

由于这里直接通过 @WebServlet 标签配置URL映射,不再需要从 web.xml 里面配置 servlet。

启动Tomcat 服务器,在浏览器的地址栏中输入 localhost:8080/chapter05/LastAccessServlet”访问 LastAccessServlet,由于是第一次访问LastAccessServlet:

重新访问地址(刷新页面):

Session对象

HttpSession接口中的常用方法
方法声明功能描述
String getld()用于返回与当前HttpSession对象关联的会话标识号
long getCreationTime()返回 Session创建的时间,这个时间是创建Session的时间与1970年1月1日00:00:00之间时间差的毫秒表示形式
long getLastAccessedTime()返回客户端最后一次发送与Session相关请求的时间,这个时间是发送请求的时间与1970年1月1日00:00:00之间时间差的毫秒表示形式
void setMaxlnactivelnterval(int interval)用于设置当前HttpSession对象可空闲的以秒为单位的最长时间,也就是修改当前会话的默认超时间隔
boolean isNew()判断当前HttpSession对象是否是新创建的
void invalidate()用于强制使Session对象无效
ServletContext getServletContext()用于返回当前HttpSession对象所属于的Web应用程序对象,即代表当前Web应用程序的ServletContext对象
void setAttribite(String name,Object value)用于将一个对象与一个名称关联后存储到当前的HttpSession对象中
String getAttribute()用于从当前HttpSession对象中返回指定名称的属性对象
void removeAttribute(String name)用于从当前HttpSession对象中删除指定名称的属性

实例:实现购物车

新建一个名称为pidan.session.example01的包,在该包中创建一个名称为Book的类,该类用于封装图书的信息,其中定义了id和name属性,分别用来表示书的编号和名称。

package pidan.session.example01;

public class Book {
	private String id;
	private String name;
	public Book() {
		
	}
	public Book(String id, String name) {
	
		this.id = id;
		this.name = name;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

在pidan.session.example01包中创建一个名称为BookDB的类,该类用于模拟保存所有图书的数据库。

package pidan.session.example01;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

public class BookDB {
	private static Map<String,Book> map = new 	LinkedHashMap<String,Book>();
	static{
		map.put("1", new Book("1","javaWeb"));
		map.put("2", new Book("2","jdbc入门"));
		map.put("3", new Book("3","java基础"));
		map.put("4", new Book("4","struts框架"));
		map.put("5", new Book("5","hibernate框架"));
		
	}
	//1.得到所有图书
	public static Collection<Book> getAll(){
		return map.values();
	}
	//2.根据map的key,也就是图书的id,得到某本图书
	public static Book getBook(String id){
		return map.get(id);
	}
}

创建一个名称为ListBookServlet的Servlet类,该Servlet用于显示所有可购买图书的列表,通过单击“购买”链接,便可将指定的图书添加到购物车中。

package pidan.session.example01;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;

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

/**
 * Servlet implementation class BookDB
 */
@WebServlet("/ListBookServlet")
public class ListBookServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		//1,
		Collection <Book> books= BookDB.getAll();
		
		PrintWriter out=response.getWriter();
		
		out.print("本网站售卖的书籍:"+"<br/><br/>");
		
		for(Book b:books) {
			String name= b.getName();
			String id=b.getId();
			String url="<a href='purcharse?id="+id+"'>点击购买</a>";
			out.print("图书名称: "+name+"  "+url+"<br/><br/>");
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

创建一个名称为PurchaseServlet的Servlet类

package pidan.session.example01;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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("/purcharse")
public class purcharseServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		String id=request.getParameter("id");
		System.out.println("id :"+id);		
		if(id==null) {
			response.sendRedirect("list");
			return;
		}
		Book book=BookDB.getBook(id);
		HttpSession session=request.getSession();//获得内存区域
		List<Book> list=(List<Book>)session.getAttribute("cart");//获得购物车
		if(list==null) {//首次购买
			list =new ArrayList<Book>();	
			session.setAttribute("cart", list);
		}
		list.add(book);
		Cookie cookie =new Cookie("JESSIONID", session.getId());
		response.addCookie(cookie);
		response.sendRedirect("cart");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

创建一个名称为CartServlet的Servlet类,该类主要用于展示用户已经购买的图书列表

package pidan.session.example01;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

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



@WebServlet("/cart")
public class CartServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		List<Book> cart=null;
		HttpSession session = request.getSession(false);
		boolean cartFlag=true;
		if(session==null) {
			cartFlag=false;
		}else {
			cart=(List<Book>)session.getAttribute("cart");
			if(cart==null) {
				cartFlag=false;
			}
		}
		if(!cartFlag) {
			out.print("您的购物车里面没有图书,请前往购买");
		}else {
			out.print("购买图书如下:"+"<br/>");
			for(Book b:cart) {
				out.print(/*"购买的图书:"+*/b.getName()+"<br/>");
			}
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

启动Tomcat 服务器,访问ListBookServlet,

单击图中“javaweb开发”后的“点击购买”链接,

再次访问(或点击浏览器的返回上一页)ListBookServlet,选择“jdbc开发”后的“点击购买”链接


                                                                                                           

 任务:实现用户登录 

 实现效果:

        用户登录的整个流程,当用户访问某个网站的首界面时,首先会判断用户是否登录,如果已经登录则在首界面中显示用户登录信息,否则进入登录页面,完成用户登录功能,然后显示用户登录信息。在用户登录的情况下,如果单击用户登录界面中的“退出”时,就会注销当前用户的信息,返回首界面。

1.创建封装用户信息类

在chapter05项目的src下新建一个名称为pidan.session.example02的包,在包中编写一个名称为User的类,User类中包含username和password两个属性以及其getter和setter方法

package pidan.session.example02;

public class User {
	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

2.创建Servlet

在pidan.session.example02包中编写IndexServlet 类, 该Servlet 用于显示网站的首界面

package pidan.session.example02;

import java.io.IOException;
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("/IndexServlet")
public class IndexServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		HttpSession session= request.getSession();
		User user =(User) session.getAttribute("user");
		if(user==null) {
			response.getWriter().print("您还没登录,请<a href='login.html'>登录</a>");
		}else {
			response.getWriter().print("你已登录,欢迎你,"+user.getUsername()+"!");
			response.getWriter().print("<a href='LogoutServlet'>退出</a>");
			Cookie cookie =new Cookie("JSESSIONID", session.getId());
			cookie.setMaxAge(60*30);
			cookie.setPath("/chapter05");
			response.addCookie(cookie);
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

在pidan.session.example02包中编写LoginServlet,该Servlet用于显
示用户登录成功后的界面

package pidan.session.example02;

import java.io.IOException;
import java.io.PrintWriter;

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("/LoginServlet")
public class LoginServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		PrintWriter pw=response.getWriter();
		if(("pidan").equals(username)&&("666").equals(password)) {
			User user = new User();
			user.setUsername(username);
			user.setPassword(password);
			request.getSession().setAttribute("user", user);
			response.sendRedirect("IndexServlet");
		}else {
			pw.write("用户名或密码错误,登录失败");
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

在pidan.session.example02包中编写LogoutServlet,该Servlet用于完
成用户注销功能,当用户单击【退出】时,该类会将Session对象中的用户信息移除,并跳
转到网站的首界面。

package pidan.session.example02;

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("/LogoutServlet")
public class LogoutServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getSession().removeAttribute("user");
		response.sendRedirect("IndexServlet");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

3.创建登陆页面

在chapter05项目的WebContent目录下创建一个名称为login.html的页面,该页面中包含用户登录表单信息

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form name="reg" action="/chapter05/LoginServlet" method="post">
		用户名:<input name="username" type="text" /><br/>
		密__码:<input name="password" type="password" /><br/>
		<input type="submit" value="提交" id="bt" />
	</form>
</body>
</html>

4.启动项目,查看结果

启动Tomcat服务器,在浏览器访问login.html

 在图中的用户名和密码输入框中输入用户名“pidan”和密码“666”后,单击【提交】按钮

如果用户想退出登录,可以单击“退出”:

 但如果用户输入的用户名或者密码错误,那么,当单击【提交】按钮时,登录会失败,浏览器会显示:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值