大四快毕业了,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用户登录功能的实现的更多相关文章

  1. JavaWeb学习记录(六)——用户登录功能

    使用JDBC.spring框架.servlet实现一个简单的用户登录功能. 一.mySql数据库 SET FOREIGN_KEY_CHECKS=0; -- ---------------------- ...

  2. Struts2整合Hibernate3实现用户登录功能

    所用技术:struts2 ,hibernate,jsp,mysql 本DEMO仅仅实现用户登录功能,采用MVC思想,自己也觉得相对是比较简单,比较容易理解数据流向的一个例子,通过整合这个过程,能够清晰 ...

  3. 实现Web上的用户登录功能

    关于如何实现web上的自动登录功能 文章来源http://coolshell.cn/articles/5353.html Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能 ...

  4. 使用Struts1完成用户登录功能

    1.Struts框架 框架(framework):就是一系列代码和开发模式的整合,使用框架后,所有开发人员都会按照框架提供的规范进行开发,使代码更容易维护和扩展. 使用框架的优点: 1)   易于维护 ...

  5. 你会做Web上的用户登录功能吗?

    Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关 ...

  6. 利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版)

    利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版) CREATE DEFINER=`root`@`%` FUNCTION `uc_session_login`( `reqjson` JS ...

  7. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  8. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(四)——对 run.py 的调整

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  9. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

随机推荐

  1. 问题-Delphi编译到最后Linking时总是出现与ntdll.dll有关的错误还有Fatal Error Out of memory错误

    1.跳出错误法  ===================================================在主界面的implementation  {$R *.dfm} 下放入以下代码: ...

  2. Maintainable JavaScript(编写可维护的JavaScript) PART I Style Guidelines

    “Programs are meant to be read by humans and only incidentally( 顺便:偶然地:附带地) for computers to execute ...

  3. light oj 1294 - Positive Negative Sign

    1294 - Positive Negative Sign   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: ...

  4. android游戏物理引擎开发——粒子系统(三)

    生病了,医院躺了几天,动了个小手术,动手术之后的几天在医院看了几本<大众软件>,又想到自己必须得买台台式机了,这破笔记本实在用不下去了,然后开始喜欢看些硬件的东西,等我熟悉了以后,写几个硬 ...

  5. 在Visual Studio中使用Pseudovariables来帮助调试

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在Visual Studio中使用Pseudovariables来帮助调试.

  6. jQuery EasyUI, datagrid, treegrid formatter 参数比较 row index

    如题: datagrid中,见官方文档: formatter function The cell formatter function, take three parameter:value: the ...

  7. IOS 获取屏幕尺寸

    CGRect frame = [[UIScreen mainScreen] bounds];    NSLog(@"frame :%@",frame); 这样输入是null NSL ...

  8. PHP获取客户端和服务器IP地址

    /** * 获取客户端IP地址 * @return string */ function get_client_ip() { if(getenv('HTTP_CLIENT_IP')){ $client ...

  9. direct3D directX

    direct3D只是directX其中一个增强功能 DirectX是由很多API组成的,按照性质分类,可以分为四大部分,显示部分.声音部分.输入部分和网络部分. 显示部分担任图形处理的关键,分为Dir ...

  10. 分享功能使用的UIPopoverController在iOS9 过期,替换为popoverPresentationController

    记录一下 以备以后用到的时候拿出来看看.以前使用的: 1 if (UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom ...