User.java

package com.po;

public class User implements java.io.Serializable {
private String username;
private String password; public User() { } 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;
}
}

UserDao.java

package com.dao;

import com.po.User;

// 用户的业务逻辑类
public class UserDao {
public static boolean userLogin(User user) {
if (user.getUsername().equals("admin") && user.getPassword().equals("admin")) {
return true;
} else {
return false;
}
}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>welcome</title>
</head>
<body>
<form action="checking.jsp" method="get">
<input type="text" name="username" value="" placeholder="username">
<input type="password" name="password" value="" placeholder="password">
<%-- JavaBean的属性要与input标签的name保持一致,这样才能通过jsp:setProperty自动设置所创建对象的属性 --%>
<input type="submit"/>
</form>
JSESSIONID=<%=request.getSession().getId()%>
</body>
</html>

checking.jsp

<%@ page import="com.dao.UserDao" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>waiting</title>
</head>
<body>
<jsp:useBean id="user" class="com.po.User" scope="page"/>
<%-- 如果使用其它更大的作用域,会发现只要成功登陆一次,之后即使密码错误也能成功登陆 --%>
<jsp:setProperty name="user" property="*"/>
<%-- 请求重定是客户端行为,不会携带上一次请求的信息 --%>
<%-- 请求分派是服务端行为,请求的信息会一直传递下去 --%>
<%
if (UserDao.userLogin(user)) {
request.getRequestDispatcher("LoginSuccess.jsp").forward(request, response);
} else {
response.sendRedirect("LoginFailure.jsp");
}
%>
</body>
</html>

LoginFailure.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
登陆失败<br>
</body>
</html>

LoginSuccess.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
登陆成功<br>
</body>
</html>

【一些问题】

1、无法避免URL重写。。。---------> 改成 POST 即可

2、通过URL绕开登陆界面直接登陆。。。

【添加的小功能】

package com.status;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import java.util.Stack; public class Online implements HttpSessionListener{
private static Stack<String> online = new Stack<>(); public static Stack<String> getOnline() {
return online;
} @Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
online.push(httpSessionEvent.toString());
} @Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
online.pop();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list> <session-config>
<session-timeout>1</session-timeout>
</session-config> <listener>
<listener-class>
com.status.Online
</listener-class>
</listener>

</web-app>
<%@ page import="com.status.Online" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
登陆成功<br>
<hr>
在线用户:<br>
<%
int i = 0;
for (String user: Online.getOnline()) {
out.print(++i + "、" + user + "<br>");
}
%>
</body>
</html>

事实上并不需要真正登陆,只要访问服务器下面的任何页面就算“在线”了。。。(因为这些行为都会导致JVM创建session)

使用jsp+javabean完成用户登陆功能的更多相关文章

  1. jsp应用-实现用户登陆功能

    项目结构 1.login.jsp 这个没什么好说的,把表单提交到校验页面进行校验 2.首先获取request域中user,password,然后进行校验,校验成功把信息存入session域,然后转发到 ...

  2. 使用Struts框架,实现用户登陆功能

    前言:本篇文章是本人这周学习的一个小结,在自我总结的同时,希望也能够给其他同学带来一点帮助.本文主要知识是参照书本上的知识点以及网上其他博客文章,在上机操练后的所得,具体源码主要来自http://bl ...

  3. JavaBean实现用户登陆

    本文简单讲述使用javabean实现用户登录,包括用户登录,注册和退出等. 系统结构图 2.数据库表 create table P_USER ( id       VARCHAR2(50) not n ...

  4. 用java实现一个简单的单用户登陆功能的思路

    引用 所谓“单用户单账户登录”是指:在同一系统中,一个用户名不能在两个地方同时登录. 我们参照 QQ 实现效果:当某账号在 A 处登录后,在未退出的情况下,如果再到 B 处登录,那么,系统会挤下 A ...

  5. struts2+Hibernate实现用户登陆功能

    实现的功能,在登陆页面输入Username和PassWord后,将username和password通过Hibernate匹对数据库是否含有一样的username和password,若有则登陆进去,若 ...

  6. PHP会话(Session)实现用户登陆功能 转自#落人间#

    对比起 Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 Session 的使用. 由于 Session 是以文本文件形式存储在 ...

  7. 小峰servlet/jsp(3)登陆功能实现

    一.User模型: User.java: package com.java1234.model; public class User { private int id; private String ...

  8. PHP会话(Session)实现用户登陆功能

    对比起 Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 Session 的使用. 由于 Session 是以文本文件形式存储在 ...

  9. jsp的session完成登陆功能

    login.jsp: <%@ page language="java" import="java.util.*" contentType="te ...

随机推荐

  1. python之斐波那契数列

    斐波那契数列(Fibonacci sequence),又称黄金分割数 这样的一个数列:0,1,1,2,3,8,13,21,34…….. 特别指出:0不是第一项,而是第零项. 在数学上被以 递归的方法定 ...

  2. 自动添加需要编译的源文件Android.mk模板

    自动添加需要编译的源文件列表 添加第三方静态库.动态库的依赖   假设我们的项目依赖 libmath.a, libjson.a, libffmpeg.so 这几个第三方库文件,项目包含如下几个模块:a ...

  3. ffmpeg中的x264编码选项,对应关系

    )’ Disabled. ‘variance (1)’ Variance AQ (complexity mask). ‘autovariance (2)’ Auto-variance AQ (expe ...

  4. 第一百六十七节,jQuery,DOM 节点操作,DOM 节点模型操作

    jQuery,DOM 节点操作,DOM 节点模型操作 学习要点: 1.创建节点 2.插入节点 3.包裹节点 4.节点操作 DOM 中有一个非常重要的功能,就是节点模型,也就是 DOM 中的“M”.页面 ...

  5. 推荐个WIN7下小巧的可转录声音的软件-Audio Record Wizard V6.99

    之前是XP上用的是 WaveCN 2.0.0.5,但这个软件好久没更新了,不支持WIN7 最终找到了Audio Record Wizard V6.99,尽管没 WaveCN 2.0.0.5好用,但也全 ...

  6. eclipse 查看源代码

    文地址:http://blog.csdn.net/sushengmiyan/article/details/18798473 本文作者:sushengmiyan 我们在使用Eclipse的时候,经常是 ...

  7. Python简单的线程池

    class ThreadPool(object): def __init__(self, max_num=20): # 创建一个队列,队列里最多只能有10个数据 self.queue = queue. ...

  8. 汇编 DOS的中断调用 INT 21H

    DOS系统功能调用 这个汇编指令是用于提供DOS系统功能调用. 它是由DOS提供的一组实现特殊功能的子程序供程序猿在编写自己的程序时调用,以减轻编程的工作量. 分两种,re=view"> ...

  9. JS复制粘贴解决方案

    var clipboardData = window.clipboardData; //for IE if (!clipboardData) { // for chrome window.prompt ...

  10. Directory和HashTable的区别

    1:单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.2:多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读 ...