`
hyz301
  • 浏览: 371172 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Servlet和jdbc登录示例

阅读更多

程序源代码及数据库文件:http://download.csdn.net/detail/hyz301/8887175

首先,创建数据库logindemo,创建用户表:userinfo.(数据库文件见附件)如图所示:



 开发工具为myeclipse8.6,数据为mySQL5.0.代码结构如下图所示:


详细代码如下:

login.jsp登录界面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>登录</title>
	</head>
	<body>
		<form method="post" name="frmLogin" action="LoginServlet">
			<h1 align="center">
				用户登录
			</h1>
			<br>
			${error}
			<div align="center">
				用户名:
				<input type="text" name="txtUserName" value="Your name" size="20"
					maxlength="20" onfocus="if(this.value=='Your name')this.value='';">
				<br>
				密码:
				<input type="password" name="txtPassword" value="Your password"
					size="20" maxlength="20"
					onfocus="if(this.value=='Your password')this.value='';">
				<br>
				<input type="submit" name="Submit"  value="登录"
					onClick="validateLogin();">
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
				<input type="reset" name="Reset" value="取消">
				<br>
			</div>
		</form>

		<script language="javaScript">
function validateLogin() {
	var sUserName = document.frmLogin.txtUserName.value;
	var sPassword = document.frmLogin.txtPassword.value;
	if (sUserName == "") {
		alert("请输入用户名!");
		return false;
	}
	if (sPassword == "") {
		alert("请输入密码!");
		return false;
	}
}
</script>
	</body>
</html>

 
login_success.jsp登录成功后显示

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>login_success</title>
	</head>
	<body>
		<div align=center>
			${UserName } 欢迎您,登录成功!
		</div>
	</body>
</html>

 

 login_failure.jsp 登录失败界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>login_failure</title>
	</head>
	<body>
		<div align=center>
			${error } 登录失败!
		</div>
	</body>
</html>

 

 LoginServlet.java 处理登录Servlet

/**
 * 需要一个数据库:logindemo,和其中一个表:userinfo
 * 表中有两个字段分别为:username varchar (20) not null,password varchar (20) not null
 */
package demo.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

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

import demo.conn.DBConn;

public class LoginServlet extends HttpServlet implements Servlet {
	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String result = "";
		// 获取用户名
		String sUserName = request.getParameter("txtUserName");
		if (sUserName == "" || sUserName == null || sUserName.length() > 20) {
			result = "请输入用户名(不超过20字符)!";
			request.getSession().setAttribute("error", result);
			response.sendRedirect("login.jsp");
		}
		// 获取密码
		String sPasswd = request.getParameter("txtPassword");
		if (sPasswd == "" || sPasswd == null || sPasswd.length() > 20) {
			result = "请输入密码(不超过20字符)!";
			request.getSession().setAttribute("error", result);
			response.sendRedirect("login.jsp");
		}

		Statement st = null;
		ResultSet rs = null;
		Connection conn = null;
		try {
			conn = DBConn.getConn();
			st = conn.createStatement();
			// SQL语句
			String sql = "select * from userinfo where username='" + sUserName
					+ "' and password = '" + sPasswd + "'";
			rs = st.executeQuery(sql);// 返回查询结果
			if (rs.next())// 如果记录集非空,表明有匹配的用户名和密码,登陆成功
			{
				// 登录成功后将sUserName设置为session变量的UserName
				// 这样在后面就可以通过 session.getAttribute("UserName") 来获取用户名,
				// 同时这样还可以作为用户登录与否的判断依据
				request.getSession().setAttribute("UserName", sUserName);
				response.sendRedirect("login_success.jsp");
			} else {
				// 否则登录失败
				request.getSession().setAttribute("error", "用户名或密码错误!");
				response.sendRedirect("login_failure.jsp");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 最终关闭连接
			DBConn.close(conn, st, rs);
		}
	}
}

 

DBConn.java 连接数据库

package demo.conn;

import java.sql.*;

public class DBConn {
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("驱动加载成功!");
		} catch (Exception ex) {
			System.out.println("驱动加载失败!");
			ex.printStackTrace();
		}
	}

	public static Connection getConn() {
		try {
			String url = "jdbc:mysql://localhost:3306/logindemo?"
					+ "user=root&password=123&useUnicode=true&characterEncoding=utf8";
			Connection conn = DriverManager.getConnection(url);
			System.out.println("获取数据库连接成功!");
			return conn;
		} catch (Exception ex) {
			System.out.println("获取数据库连接失败!");
			ex.printStackTrace();
			return null;
		}
	}

	public static void close(Connection conn, Statement st, ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException ex) {
			}
		}
		if (st != null) {
			try {
				st.close();
			} catch (Exception ex) {
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (Exception ex) {
			}
		}
	}

}

 

web.xml Servlet配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<servlet>
		<servlet-name>LoginServlet</servlet-name>
		<servlet-class>demo.servlet.LoginServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>LoginServlet</servlet-name>
		<url-pattern>/LoginServlet</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>login.jsp</welcome-file>
	</welcome-file-list>
</web-app>

 

Servlet是Sun公司提供的一门用于开发动态web网页的技术。Sun公司在API中提供了一个servlet接口,我们如果想使用java程序开发一个动态的web网页,只需要实现servelet接口,并把类部署到web服务器上就可以运行了。

到底什么是Servlet呢?

 

       通俗一点,只要是实现了servlet接口的java程序,均称Servlet。Servlet是由sun公司命名的,Servlet = Server + Applet(Applet表示小应用程序),Servlet是在服务器端运行的小程序

      

Servlet基础

 

1、解读API文档,纯手工编写一个Servlet程序,并部署访问(如上所示)。

         

      学习API是程序员学习和进步的最好工具。

     

 

       大家可以在点进去看一看,从上图,可以看出Servlet接口定义三个实现类,分别是FacesServlet, GenericServlet, HttpServlet。下面我们简单的介绍一下。

 

2、Servlet接口实现类

     

     (1)FacesServlet是一个用于管理利用JSF(JavaServer Faces)构建用户界面的web应用程序请求处理生命周期的Servlet。(FacesServletis a servlet that manages the request processing lifecycle for web applications that are utilizing JavaServer Faces to construct the user interface.)。

     (2)GenericServlet是HttpServlet的父类,包含了servlet的常用方法。GenericServlet使得程序员写servlets更加简单,它提供了初始化和销毁生命周期的方法,以及实现了写日志文件的方法。

     (3)HttpServlet指能够处理HTTP请求的servlet。这是开发人员在编写Servlet时,通常应继承这个类即可。

      

        对于这三个实现类,只为大家做一个简单的介绍,如果想深入的研究,直接看API就好。

 

3、Servlet部署

       

       客户端通过URL地址访问web服务器中的资源,所以若想访问Servlet必须要把servlet程序映射到一个URL地址上,在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成,如上面的实例。

        *<servlet>用于注册Servlet,包含了<servlet-name>和<servlet-class>两个子元素,分别用于设置servlet的名称以及servlet的类名。

        *<servlet-mapping>用于映射上面<servlet>中的对外访问路径,同样包含<servlet-name>和<url-pattern>两个元素,分别用于设置servlet的名称以及servlet的对外访问路径。

        在servlet映射到URL有两种格式:

        1.“*.扩展名”

        2.以正斜杠(/)开头并以“/*”结尾。

        servlet对url的匹配规则以及路径问题,大家可以上网查,有很多相关的资料。

             

4、Web服务器调用Servlet过程(Servlet生命周期)

     

      servlet程序是由web服务器调用,web服务器实现了对servlet生命周期的管理。servlet的生命周期分为四步:

          1)实例化以及加载servlet,new的过程。

          2)初始化init(ServletConfig)。

          3)处理请求,调用servlet的service,doget,dopost方法将Request和Response,作为参数传递。

          4)退出服务,调用destory方法释放资源。

 

 注意:

         1、servlet只实例化一次。感觉有点单例模式的意思,大家可以研究一下Tomcat的实现原理。

         2、init方法也只执行一次。servlet实例只创建一次,所以init初始化只调用一次。

 

5、Servlet线程安全问题

 

       当多个客户端并发访问同一个Servlet时,web服务器会为每一个客户端的访问请求创建一个线程,并在这个线程上调用service方法,因此,service方法内如果访问了同一个资源的话,就有可能引发线程安全问题。大家重点理解下面两句即可:
(1) Servlet是单实例多线程的,如果存在可以修改的成员变量将会出现线程安全问题。
(2) 使用Servlet最好保证Servlet是无状态的,也就是没有可以修改的成员变量。

 

 

 

 

 

 

 

 

 

  • 大小: 49.1 KB
  • 大小: 16.1 KB
  • 大小: 37.1 KB
1
1
分享到:
评论
2 楼 hyz301 2015-07-11  
hk_one 写道
很好,如果对密码字段加密,就更有亮点了!

谢谢,密码加密的问题,只需要加一个MD5的包就可以,网上有很多~
1 楼 hk_one 2015-07-10  
很好,如果对密码字段加密,就更有亮点了!

相关推荐

    Servlet和jdbc登录示例源代码(内附数据库脚本)

    Servlet和jdbc登录示例源代码(内附数据库脚本)博客链接:http://hyz301.iteye.com/blog/2226197

    jsp_servlet_jdbc登陆实例

    jsp_servlet_jdbc_oracle登陆示例

    JDBC+Servlet入门示例

    项目名称为Leaf,Servlet(com.leaf.web.LeafKingLaServlet)简单实现跳转示例,用户名密码访问示例。数据库采用Sqlite3,需要在数据库操作对象... ... 本代码仅为入门示例,代码有不严谨、不工整之处,请见谅。谢谢。

    JSP+Servlet+JavaBean+JDBC示例程序

    JSP+Servlet+JavaBean+JDBC示例程序

    Servlet_jdbc_mysql_分页示例系统

    NULL 博文链接:https://colbybobo.iteye.com/blog/1994975

    Servlet+JDBC实现登陆功能的小例子(带验证码)

    主要介绍了Servlet+JDBC实现登陆功能的小例子(带验证码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    使用servlet,jdbc将mysql中数据显示在jsp页面中

    使用servlet,jdbc将mysql中数据显示在jsp页面中

    JDBC,JNDI和servlet小例子

    JDBC,JNDI和servlet小例子

    servlet示例

    一个简单的servlet示例,示例程序使用servlet+JSP+JDBC+mysql实现了用户登录的功能

    CRUD-EXAMPLE:Servlet和JSP CRUD示例

    Servlet和JSP CRUD示例 配置 SQL / ServletDB this sql file import your db src / orm / DBUtils.java static String url = "jdbc:mysql://localhost/YOUR_DATABASE_NAME"; static String username = "USERNAME";...

    用户登录示例

    一个使用DAO介绍用户登录的例子,使用Servlet,JDBC等

    LearningCards:使用Servlet和JDBC的简单项目

    学习卡 这是一个名为“学习卡”的简单网络应用程序的草稿。 你可以: 选择一组卡片,学习条款,然后查看您的改进统计信息。 所有术语都有成功和失败的统计信息。... 并从“ XMLcollectionExample.xml”添加示例数据。

    使用JDBC构建基于Web的应用程序

    请参阅 JSP 页面和 servlet 参考资料), 但是,由于使用了 DataSource 对象, 因此只需对代码做一些细微修改就可使其应用到其它数据库。 本教程假定您十分熟悉 Java 编程语言, 但对 servlet 或 JSP 技术却不...

    LoginApp:Jsp & Servlet 示例

    登录应用#Jsp 和 Servlet 登录示例。 ORM Hibernate。 Jsp 和 Servlet。 mysql 数据库管理系统。 #准备 : 需要Mysql dbms 安装OR 和DBMS 服务器并将其驱动程序放在WEB-INF/lib 下。 com.mysql.jdbc.Driver 更改 ...

    Servlet与JSP核心编程第2版

    17.2 基本jdbc示例 17.3 用jdbc实用工具简化数据库访问 17.4 使用预备语句 17.5 创建可调用语句 17.6 使用数据库事务 17.7 使用orm框架将数据映射到对象 第18章 配置msaccess,mysql和oracle9i 18.1 ...

    jsp servlet 入门学习资料-新手一看就懂

    11.1 JDBC2.0和JDBC数据库连接池 11.1.1 JDBC2.0新功能概述 11.1.2 结果集增强功能 11.1.3 批处理更新 11.1.4 对Java对象的持久性 11.1.5 数据库连接池使用实例 11.2 文件上载 11.2.1 实现机理 11.2.2 文件...

    java-samples:Java中框架使用的一些示例

    :使用spring jdbc的示例 :使用spring web和servlet api 3的示例spring-aop-example :使用spring aop和AspectJ的示例待办事项:Spring Boot,Spring Web MVC 完整的例子complete-example :包含所有这些元素的微型...

    构建基于Hibernate的servlet

    而且在上一篇中,相应的示例servlet使用了原始JDBC存取我们的MySQL数据库。在本篇中,相应的示例servlet则使用Hibernate(不再是原始JDBC)存取MySQL数据库,但是将继续使用相同的Context.xml文件(没有作任何改变)...

    JDBC-SQL-Gateway:使用 JDBC、MySQL、JSP 和 Servlet 的 SQL 网关

    SQL网关是一个允许使用基于 Web 的界面来执行任何类型的 SQL 语句的... ###使用的技术Java EE:JDBC、JSP、Servlet MySQL XML Apache Tomcat CSS 和 HTML ####J 连接器是从 MySQL 网站的mysql-connector-java-5.0.8-

Global site tag (gtag.js) - Google Analytics