JavaWeb用户登录功能的实现
大四快毕业了,3年多的时间中,乱七八糟得学了一大堆,想趁找工作之前把所学的东西整理一遍,所以就尝试着做一个完整的JavaWeb系统,这几天试着做了一个用户登录的功能,分享给大家,肯定有很多不完善的地方,希望大家提提宝贵的意见,必将努力完善它。
我贴出此篇博客的目的是,将一些以后有可能用到的重复性的代码保存下来,用于以后需要时直接复制粘贴,所以,此篇博客大部分都是代码,讲解性的语句并不多,如果大家看得头疼,不如不看,以后万一用到的话再拿过来修修改改即可。
有可能用得到的部分:生成验证码的Java类、操作数据库的Java类
用户登录模块采用了多种语言:
Html、css、query:页面
Servlet、java:后台
运行效果图:
Login.html代码:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>登录界面</title>
<script src="js/jquery-1.11.1.js"></script>
<script src="js/login.js"></script>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="loginpanelwrap">
<div class="loginheader">
<div class="logintitle">登录</div>
</div>
<form action = "/UserLogin/Sample1/loginServlet">
<div class="loginform">
<div class="loginform_row">
<label>用户名:</label>
<input type="text" class="loginform_input" name="username" />
</div>
<div class="loginform_row">
<label>密码:</label>
<input type="password" class="loginform_input" name="password" />
</div>
<div class = "loginform_row">
<label>验证码:</label>
<input type = "text" class="loginform_input_validationCode" name = "validationCode"/>
<img class = "validationCode_img" src="/UserLogin/Sample1/validationCode">
</div>
<div class="loginform_row">
<span class = "returnInfo"></span>
<input type="submit" class="loginform_submit" value="登录" />
</div>
<div class="clear"></div>
</div>
</form>
</div>
</body>
</html>
JQuery代码:login.js
$(function(){
$(".loginform_submit").click(function(){
if(checkInput()) {
$("form").action("/loginServlet");
}else{
return false;
}
});
$(".validationCode_img").click(function(){
$(".validationCode_img").attr("src","/UserLogin/Sample1/validationCode?"+Math.random());
});
function checkInput(){
//判断用户名
if($("input[name=username]").val() == null || $("input[name=username]").val() == ""){
alert("用户名不能为空");
$("input[name=username]").focus();
return false;
}
//判断密码
if($("input[name=password]").val() == null || $("input[name=password]").val() == ""){
alert("密码不能为空");
$("input[name=password]").focus();
return false;
}
//判断验证码
if($("input[name=validationCode]").val() == null || $("input[name=validationCode]").val() == ""){
alert("验证码不能为空");
$("input[name=validationCode]").focus();
return false;
}
return true;
}
});
生成验证码的Servlet:ValidationCode.java
package zh.userlogin.sample;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
/**
* Created by zhang on 2014/9/13.
*/
public class ValidationCode extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获得验证码集合的长度
int charsLength = codeChars.length();
//下面3条记录是关闭客户端浏览器的缓冲区
//这3条语句都可以关闭浏览器的缓冲区,但是由于浏览器的版本不同,对这3条语句的支持也不同
//因此,为了保险起见,同时使用这3条语句来关闭浏览器的缓冲区
resp.setHeader("ragma", "No-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
//设置图形验证码的长和宽
int width = 90, height = 30;
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics(); //获得用于输出文字的Graphics对象
Random random = new Random();
g.setColor(getRandomColor(180, 250));
g.fillRect(0, 0, width, height);
g.setFont(new Font("Times New Roman",Font.ITALIC,height));
g.setColor(getRandomColor(120, 180));
//用户保存最后随机生成的验证码
StringBuilder validationCode = new StringBuilder();
//验证码的随机字体
String[] fontNames = {"Times New Roman","Book antiqua","Arial"};
//随机生成4个验证码
for(int i = 0; i < 4; i++){
//随机设置当前验证码的字符的字体
g.setFont(new Font(fontNames[random.nextInt(3)],Font.ITALIC,height));
//随机获得当前验证码的字符
char codeChar = codeChars.charAt(random.nextInt(charsLength));
validationCode.append(codeChar);
//随机设置当前验证码字符的颜色
g.setColor(getRandomColor(10, 100));
//在图形上输出验证码字符,x和y都是随机生成的
g.drawString(String.valueOf(codeChar), 16*i + random.nextInt(7), height-random.nextInt(6));
}
//获得HttpSession对象
HttpSession session = req.getSession();
//设置session对象5分钟失效
session.setMaxInactiveInterval(5*60);
//将验证码保存在session对象中,key为validation_code
session.setAttribute("validation_code", validationCode.toString());
//关闭Graphics对象
g.dispose();
OutputStream outS = resp.getOutputStream();
ImageIO.write(image, "JPEG", outS);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
//图形验证码的字符集,系统将随机从这个字符串中选择一些字符作为验证码
private static String codeChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
//返回一个随机颜色
private static Color getRandomColor(int minColor, int maxColor){
Random random = new Random();
if(minColor > 255){
minColor = 255;
}
if(maxColor > 255){
maxColor = 255;
}
//获得r的随机颜色值
int red = minColor + random.nextInt(maxColor-minColor);
//g
int green = minColor + random.nextInt(maxColor-minColor);
//b
int blue = minColor + random.nextInt(maxColor-minColor);
return new Color(red,green,blue);
}
}
操作数据库的代码:ManageSQLServer2008.java(本人使用的数据库为SQLServer 2008)
package zh.userlogin.sample.dbmanager;
import java.beans.Statement;
import java.sql.*;
public class ManageSQLServer2008 {
//数据库的驱动名
private final String dbDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
//数据库的url地址
private final String url = "jdbc:sqlserver://localhost:1433;databaseName=zhDemo";
private final String userName = "sa";
private final String password = "123";
private Connection conn = null;
public ManageSQLServer2008(){
//加载数据库驱动
try {
Class.forName(dbDriver).newInstance();
//System.out.println("加载驱动成功");
} catch (Exception e) {
e.printStackTrace();
System.err.println("数据库驱动加载失败");
}
//获取数据库链接
try {
conn = DriverManager.getConnection(url,userName,password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.err.println("获取数据库链接失败");
}
}
//执行各种SQL语句的方法
private ResultSet execSQL(String sql,Object... args) throws SQLException{
//建立PreparedStatement对象
PreparedStatement pStmt = conn.prepareStatement(sql);
//为pStmt对象设置SQL参数值
for(int i = 0; i < args.length; i++){
pStmt.setObject(i+1, args[i]);
}
//执行SQL语句
pStmt.execute();
//返回结果集,如果执行的SQL语句不返回结果集,则返回null
return pStmt.getResultSet();
}
private void closeSQLConn(){
//关闭数据库链接
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public String checkUser(String username,String password){
boolean has_username = false;
boolean password_correct = false;
ResultSet rs = null;
try {
rs = execSQL("select * from zh_users");
} catch (SQLException e) {
System.err.println("查询数据库出错");
e.printStackTrace();
return null;
}
try {
while(rs.next()){
String temp_username = rs.getString("user_name").trim();
String temp_password = rs.getString("password_md5").trim();
if(username.equals(temp_username)){
has_username = true;
if(password.equals(temp_password)){
password_correct = true;
return "hasUserNameAndPasswordCorrect";
}
return "hasUserNameButPasswordInCorrect";
}
}
} catch (SQLException e) {
System.err.println("操作ResultSet出错");
e.printStackTrace();
}
return "hasNoUserName";
}
}
用于处理用户登录的Servlet:LoginServlet.java
package zh.userlogin.sample;
import zh.userlogin.sample.dbmanager.ManageSQLServer2008;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.OutputStream;
/**
* Created by zhang on 2014/9/13.
*/
public class LoginServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
OutputStream out = resp.getOutputStream();
String username = req.getParameter("username");
String password = req.getParameter("password");
String validationCode = req.getParameter("validationCode");
HttpSession session = req.getSession();
String validation_code = (String)session.getAttribute("validation_code");
if(validationCode.equalsIgnoreCase(validation_code)){
System.out.println("验证码正确");
}else{
System.out.println("验证码错误");
}
ManageSQLServer2008 mss = new ManageSQLServer2008();
String result = mss.checkUser(username,password);
if (result.equals("hasUserNameAndPasswordCorrect")) {
System.out.println("用户名和密码均正确");
} else if (result.equals("hasUserNameButPasswordInCorrect")) {
System.out.println("用户名正确,密码不正确");
} else if (result.equals("hasNoUserName")) {
System.out.println("没有此用户");
}
//转发到result.jsp
RequestDispatcher rd = req.getRequestDispatcher("Login.html");
rd.forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
web.xml文件的配置:
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>zh.userlogin.sample.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/loginServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>validationCode</servlet-name>
<servlet-class>zh.userlogin.sample.ValidationCode</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>validationCode</servlet-name>
<url-pattern>/validationCode</url-pattern>
</servlet-mapping>
最后的style.css代码,太多了,而且有点乱,所以就没有贴出来,至于CSS代码,大家可以去网上下载:http://sc.chinaz.com/tag_moban/htmlMoBan.html这个上面就有好多,大家根据喜好选择一个,然后稍加即可。
JavaWeb用户登录功能的实现的更多相关文章
- JavaWeb学习记录(六)——用户登录功能
使用JDBC.spring框架.servlet实现一个简单的用户登录功能. 一.mySql数据库 SET FOREIGN_KEY_CHECKS=0; -- ---------------------- ...
- Struts2整合Hibernate3实现用户登录功能
所用技术:struts2 ,hibernate,jsp,mysql 本DEMO仅仅实现用户登录功能,采用MVC思想,自己也觉得相对是比较简单,比较容易理解数据流向的一个例子,通过整合这个过程,能够清晰 ...
- 实现Web上的用户登录功能
关于如何实现web上的自动登录功能 文章来源http://coolshell.cn/articles/5353.html Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能 ...
- 使用Struts1完成用户登录功能
1.Struts框架 框架(framework):就是一系列代码和开发模式的整合,使用框架后,所有开发人员都会按照框架提供的规范进行开发,使代码更容易维护和扩展. 使用框架的优点: 1) 易于维护 ...
- 你会做Web上的用户登录功能吗?
Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关 ...
- 利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版)
利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版) CREATE DEFINER=`root`@`%` FUNCTION `uc_session_login`( `reqjson` JS ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(四)——对 run.py 的调整
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
随机推荐
- shiro权限控制方式
1.基于配置文件(*.ini)[常用jdbcRealm.ini] 2.基于注解的配置 3.基于jsp标签的配置(需要导入对应的标签jar包) 权限包含: 是否为特定用户 是否为特定角色 是否拥有特定操 ...
- ECharts中文显示为Unicode码
后台遍历出的数据,在ECharts的js中引用为Unicode码 解决方案: <s:property>标签的escape属性默认值为true,即不解析html代码,直接将其输出. 若想要输 ...
- CSS 选择器及其优先级
CSS 的选择器有很多类型,我们将常用的这些列表如下: 一.CSS 选择器的类别 1. 基本选择器 基本选择器 解释 备注 * 通用选择器,匹配所有元素 CSS2 E 元素选择器,匹配类型为 E 的所 ...
- 为什么Form.Timer的event handler在Form被Dispose之后还是被调到了?
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:为什么Form.Timer的event handler在Form被Dispose之后还是被调到了?.
- centos中MySQL,VmTools安装,使用及异常
Linux(CentOS)中常用软件安装,使用及异常--MySQL,VmTools 本文主要是为了记录在工作中遇到的常用软件的安装过程,方便以后遇到相同情形时可以快速的查阅.主要讲述了MySQL, V ...
- Hibernate拦截器(Interceptor)与事件监听器(Listener)
拦截器(Intercept):与Struts2的拦截器机制基本一样,都是一个操作穿过一层层拦截器,每穿过一个拦截器就会触发相应拦截器的事件做预处理或善后处理. 监听器(Listener):其实功能与拦 ...
- eclipse mybatis Generator
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- Oracle Linux 6.3下安装Oracle 11g R2(11.2.0.3)
本文主要描写叙述了在Oracle Linux 6.3下安装Oracle 11gR2(11.2.0.3).从Oracle 11g開始,Oracle官方站点不再提供其Patch的下载链接,须要使用Meat ...
- Javascript模板引擎handlebars使用实例及技巧
转:http://rfyiamcool.blog.51cto.com/1030776/1278620 我们在开发的时候针对DOM操作,用简单的JS应用来说不成问题,但如果你对视图的每次更新都需要对我文 ...
- Windows系统下的adb 配置
1.将附件中的adb_tools.rar文件下载到电脑上,并解压.(注意:其路径尽量避免带有中文字符) 2.右键点击“计算机”->“属性”->“高级系统设置”->“高级”->“ ...
