黑马day05 session实现登陆&注销小案例

本案例主要使用session实现登录与注销的功能。

1.登录页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <title></title>

	<meta http-equiv=" pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    

  </head>

  <body>
    <form action="${pageContext.request.contextPath }/servlet/LoginServlet" method="post">
    	登陆名:<input type="text" name="username"/><br/>
    	密码:    <input type="password" name="password"/><br/>
    	<input type="submit" value="提交"/><br/>
    </form>
  </body>
</html>

运行界面:

2.使用UserDao模拟数据库提供对外验证密码和密码是否正确的函数

package cn.itheima.loginout;

import java.util.HashMap;
import java.util.Map;

public class UserDao {
	private static Map<String, String> map=new HashMap<String, String>();
	static{
		map.put("李卫康", "123");
	}
	//提供验证用户名和密码的方法
	public static boolean validateUsernamePassword(String username,String password){
		return map.containsKey(username)&&map.get(username).equals(password);

	}
}

3.实现LoginServlet的代码,因为login.jsp是post的提交方式,这里为了方便我使用rrequest.setCharacterEncoding("utf-8");告诉服务器使用utf-8编码,这里向服务器输出了汉字,因此采用response.setContentType("text/html;charset=utf-8");来解决乱码问题....这句话两个作用...这里我就不介绍了、

package cn.itheima.loginout;

import java.io.IOException;

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

public class LoginServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		//1.得到参数
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		//2.从数据库中查询并判断
		if(UserDao.validateUsernamePassword(username, password)){
			request.getSession().setAttribute("user", username);
			//重定向到主页、
			response.sendRedirect(request.getContextPath()+"/loginout/index.jsp");
		}else{
			response.getWriter().write("对不起您没有登陆!三秒后跳转到登陆页面");
			response.setHeader("Refresh", "3;url=/day05/loginout/login.jsp");
		}

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

4.index.jsp如果没有登陆就欢迎光临游客!如果从session中查出用户就欢迎指定的用户

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <title></title>

	<meta http-equiv=" pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    

  </head>

  <body>
    <%
    String user=(String)session.getAttribute("user");
     %>
     <%
     if(user==null||"".equals(user)){
     %>
     	欢迎观临!游客!
     	<a href="${pageContext.request.contextPath }/loginout/login.jsp">登录</a>
     <%
     	}else{
      %>
      	欢迎回来!<%=user %>
      	<a href="${pageContext.request.contextPath }/servlet/LogoutServlet">注销</a>
      <%
      	}
       %>

  </body>
</html>

运行界面:

未登录:

登陆:

5.注销页面:

这里为了防止客户端简介的访问这个servlet因此最好判断session中是否有user,有就杀掉..同时跳转到主页index.jsp

时间: 2024-10-11 13:30:10

黑马day05 session实现登陆&注销小案例的相关文章

数据库查询的一般写法:从登陆验证小案例中得到的一些启示和经验

这几天做了一个登陆验证的案例,主要功能就是:用户输入密码进行登陆,如果输错密码三次则15分钟内不能登陆. 这个案例确实不复杂,但是其中的逻辑第一次理解确实很别扭. 从这个小案例中,我得到了几个启示,并打算以后写类似的程序都执行此标准 1.该项目中,和sql有关的操作统统放到SqlHelper中 ---所有相同的操作都应该单独定义成一个助手类. 2.该项目中,使用了参数化查询有效防止了sql注入漏洞 ---所有关于查询的并且值由用户输入的sql语句,一律不准用字符串拼接 3.该项目中,判断用户是否

session的两个小案例

学完了session,写两个小案例加深一下对session的巩固. 1. 用户登陆案例 登陆html页面提交后,将参数带给处理登陆的servlet,该servlet将获得登陆的用户名和密码,并将这些信息存入session中,另一个servlet在处理的时候,会先从session中拿到用户的信息,判断是否登陆,再执行相应的动作.主要模拟一下我们常见的场景:登陆后,网页上会显示:欢饮您,xxx. 首先我们看一下欢迎页面index.jsp(这里只是简单的模拟下,后面学了jsp的标签后可以弄的更加人性化

黑马day05 session实现防止重复提交&amp;小案例

有时候为了防止用户的重复提交我们只需要写前台的代码,一个javaScript就搞定了,但是也不妨坏人故意修改源代码,这样就防止不了重复提交,因此,我们在后台实现防止重复提交. 1.login.jsp 前台java|Script实现防止重复提交,为了后台也实现所以设置了一个随机数到session域中,然后提交表单的时候就隐藏一个随机数.以实现SubServlet的获取 <%@ page language="java" import="java.util.*" p

监听器应用【统计网站人数、自定义session扫描器、踢人小案例】

从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器.这篇博文主要讲解的是监听器的应用. 统计网站在线人数 分析 我们在网站中一般使用Session来标识某用户是否登陆了,如果登陆了,就在Session域中保存相对应的属性.如果没有登陆,那么Session的属性就应该为空. 现在,我们想要统计的是网站的在线人数.我们应该这样做:我们监听是否有新的Session创建了,如果新创建了Sesssion,那么在线人数就应该+1.这个在线人数是整个站点的,所以应该有Context对象保存.

黑马day14 过滤器之自动登录小案例

自动登录分析: 如果是第一次登陆就把user放到session域中,同时建立一个cookie把用户名和密码保存到cookie中,然后写一个过滤器, 如果是未登录的状态就把cookie中把用户名和密码拿出来和数据库中查询的作比较,如果一致就把user设置到session域中. 1.登陆页面login.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&

黑马day05 session&amp;重新设置JSESSIONID的生命周期

HttpSession:在服务器中,为浏览器创建独一无二的内存空间,在其中保存会话相关的信息. 4.1session作为域使用:他是j2ee中四大域对象之一,作用范围为整个会话. 4.2session的生命周期:在第一次调用reqeust.getSession()方法的时候,服务器会检查是已经有对应的session,如果没有就在内存中创建一个session并返回. 当一段时间内session没有被使用,一般为30分钟(此值可以在web.xml中配置<session-config>来配置,也可以

session应用----登录验证小案例

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

更正之前《登录小案例》密码错3次15分钟内不准登录的代码逻辑

之前写的一篇 数据库查询的一般写法:从登陆验证小案例中得到的一些启示和经验.是有点问题的. 问题在于判断15分钟内密码错误的代码. 原代码如下: //使用using对SqlDataReader进行资源管理 using (SqlDataReader dr = cmd.ExecuteReader()) { if (dr.HasRows) { dr.Read(); if (dr.GetInt32(5) > 15) { //重置uErrTimes SqlHelper.ResetErrTimes(dr.G

Session小案例------完成用户登陆

Session小案例------完成用户登陆 在项目开发中,用户登陆功能再寻常不过啦,当用户完成用户名和密码校验后,进入主界面,需要在主界面中显示用户的信息,此时用session来记住用户是最为合适不过了. 功能实现如下: 1,完成用户登陆功能 2,在主界面记住用户 3,完成用户注销功能 用户类: package cn.itcast.login; public class User{ private String username; private String password; public