程序源代码及数据库文件: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();"> <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是无状态的,也就是没有可以修改的成员变量。
相关推荐
在这个登录示例源代码中,我们将探讨如何使用Servlet作为控制器,JDBC作为数据访问层来实现用户登录功能。同时,提供的数据库脚本用于创建存储用户信息的数据表。 Servlet是Java平台上的一个标准接口,它允许我们...
【Servlet+JDBC+JSP项目实战源代码】是一个典型的Web开发教程,涵盖了Web应用程序的基础构建块,包括Servlet、JDBC(Java Database Connectivity)和JSP(JavaServer Pages)。这个项目实战提供了完整的源代码,旨在...
综上所述,Servlet_jdbc_mysql_分页示例系统涵盖了Java Web开发的核心知识点,包括服务器端编程、数据库操作、分页技术等,是学习和实践这些技能的好起点。通过深入研究这个项目,开发者可以更好地理解Web应用的开发...
这个"Servlet实例和JDBC的连接.rar"文件包含了关于如何在Servlet中实现用户登录和注册功能,并且使用JDBC(Java Database Connectivity)进行数据库交互的示例。 首先,让我们深入了解Servlet的工作原理。Servlet...
5. 如果登录成功,可能重定向到主页面,用户可以进行查询、修改等操作,这些操作同样通过Servlet和JDBC完成,并可能利用AJAX提供无刷新体验。 该项目作为一个学习示例,涵盖了Web开发中的关键概念和技术,对于初学...
在本项目中,“基于JSP+JavaBean+Mysql+JDBC+Servlet实现javaWeb登录注册”是一个典型的Java Web应用程序,它使用了多种核心技术来构建一个完整的用户管理系统,包括用户登录和注册。以下是对这些技术及其在项目中的...
【标题】"jsp+servlet+jdbc案例"涉及的是在Web开发中使用Java技术栈构建一个基于Browser/Server(B/S)架构的应用。JSP(JavaServer Pages)是用于创建动态网页的Java技术,它允许开发者将Java代码嵌入HTML或XML文...
**JSP、Servlet和JDBC简介** JSP(JavaServer Pages)是Java平台上的动态网页技术,它允许开发者将HTML代码与Java代码结合在一起,从而在服务器端处理数据并生成响应的网页。JSP的核心优势在于它能方便地将表现层...
4. **JDBC示例**:将涉及到如何加载和注册JDBC驱动,创建数据库连接,编写SQL语句,执行查询和更新操作,以及处理结果集。 文件"ClassSample1"可能是一个具体的应用示例,它综合运用了以上技术,展示了如何在实际...
总结来说,`jsp_servlet_jdbc`结合Oracle数据库可以创建功能丰富的Web应用,而这个登陆实例只是其中的一个基本示例。在实际项目中,还需要考虑到更多复杂的业务逻辑、异常处理、安全性策略以及用户体验等因素。通过...
【标题】"jsp+servlet+javabean jdbc连接数据库 用户登录"所涉及的知识点主要集中在Web开发中的几个关键组件和技术上。JSP(JavaServer Pages)是Java平台上的动态网页技术,Servlet是Java用于处理HTTP请求的服务端...
`AddressBook1`可能是指一个示例项目,模拟联系人地址簿的功能,包括添加、删除、修改和查询联系人信息。在这样的项目中,你可以看到如何使用Servlet处理HTTP请求,通过JDBC连接MySQL数据库,以及如何在JSP页面上...
本示例将深入探讨如何使用Tomcat服务器、Servlet、Oracle数据库和JDBC(Java Database Connectivity)来实现一个简单的用户登录功能。下面,我们将详细讲解这个过程中的关键知识点。 1. **Tomcat服务器**: Tomcat...
总的来说,这个项目示例涉及了Web开发的基础知识,包括Servlet、JDBC和JSP的协同工作,以及如何通过它们与MySQL数据库交互。通过实践,你可以更深入地理解这些技术,为构建更复杂的Web应用打下坚实基础。
综合以上信息,这个项目旨在提供一个实践性的学习平台,让学生或开发者能够了解和掌握如何使用jsp、servlet和jdbc构建一个简单的电子商务系统。它涵盖了用户认证、购物功能、数据库操作和后台管理等关键模块,对于...
【标题】"简单的注册登录页面(jsp+servlet+jdbc+mysql)"是一个基础的Web应用程序示例,它展示了如何在Java Web开发中实现用户注册和登录功能。这个项目结合了几个关键的技术,包括: 1. **JSP (JavaServer Pages)...
具体到这个名为"huaxin"的压缩包文件,虽然没有提供详细内容,但可以推测其中可能包含了使用ExtJs、Servlet和JDBC实现的一个简单的CRUD示例项目。可能包括了ExtJs的源代码文件(如JS、CSS和HTML),Servlet的Java...
项目名称为Leaf,Servlet(com.leaf.web.LeafKingLaServlet)简单实现跳转示例,用户名密码访问示例。数据库采用Sqlite3,需要在数据库操作对象... ... 本代码仅为入门示例,代码有不严谨、不工整之处,请见谅。谢谢。
【描述】提供的博客链接(https://tjlvan.iteye.com/blog/226550)虽然没有给出详细的内容,但通常博主会在这个链接中分享实现过程、关键代码示例和可能遇到的问题及解决方案。我们可以从中预期,这个项目可能涵盖了...