- 浏览: 22048 次
- 性别:
- 来自: 北京
最新评论
-
向奕昌:
<img id="randImage" ...
用struts实现一个完整的登录框实例 -
nighthawk:
想问下楼主,那个框怎么我点了他也关闭,怎么样操作他就不关闭?
用div模拟alert对话框,N秒不点击自动关闭(适用IE6、IE7、firefox) -
warrior701:
学习学习。。。
用div模拟alert对话框,N秒不点击自动关闭(适用IE6、IE7、firefox) -
xici_magic:
其实吧 我刚开始和你的处境几乎是一模一样的
大四一整年就出来实 ...
工资500,一个应届生的迷茫,期待过来人给指条明路 -
Hooopo:
whaosoft 写道要是能出个 适用于各种浏览器的就好了~! ...
用div模拟alert对话框,N秒不点击自动关闭(适用IE6、IE7、firefox)
这几天一直都犯愁:感觉自己越来越厌学了,也许是学习的方法不对吧。一个月前就给自己说,学习再踏实些,我要一边补习java基础,一边学习struts、spring、ibatis、hibernate框架,一天天过去了,偶尔的会有些小的感悟,只是感觉还是没什么大的进展。
细细的想,觉得或许还是自己的基础不够好,还是需要把最基本的学扎实了。于是,这些天又回到了起点:强化学习jsp、servlet、javabean、jdbc,争取更深入,更扎实些,再此期间,慢慢琢磨些设计模式的东西,也许学习框架时会好点。所以以后决定还是做些实例性的东西,至少这样不会枯燥,也给学习增加点刺激感吧。
经过两个晚上的努力,做了这个登录实例,有点慢,不过为了练手嘛,主要在于体验各个环节及设计思路。
本想采用jsp+javabean+jdbc来做,不过太懒了,看见自己前几天用struts做的一个登录页面(并未实现,只是练习验证码图片的生成),于是顺手就接着这个做吧。
环境配置:开发环境myeclipse、框架struts、数据库采用sqlserver2000及相应的驱动包:mssqlserver.jar、msbase.jar、msutil.jar
步骤:
1、在myeclipse里新建工程strutslogon,并搭建好struts框架
2、在sqlserver中新建数据库mytest,新建表login,其字段:username、password。将三个驱动包导入到WEB-INF/lib/里
3、编辑配置文件
4、编辑以下java文件及jsp文件
web.xml
struts-config.xml
LogonAction.java
LogonBean.java
LogonDao.java
LogonForm.java
Image.java
logon.jsp
index.jsp
细细的想,觉得或许还是自己的基础不够好,还是需要把最基本的学扎实了。于是,这些天又回到了起点:强化学习jsp、servlet、javabean、jdbc,争取更深入,更扎实些,再此期间,慢慢琢磨些设计模式的东西,也许学习框架时会好点。所以以后决定还是做些实例性的东西,至少这样不会枯燥,也给学习增加点刺激感吧。
经过两个晚上的努力,做了这个登录实例,有点慢,不过为了练手嘛,主要在于体验各个环节及设计思路。
本想采用jsp+javabean+jdbc来做,不过太懒了,看见自己前几天用struts做的一个登录页面(并未实现,只是练习验证码图片的生成),于是顺手就接着这个做吧。
环境配置:开发环境myeclipse、框架struts、数据库采用sqlserver2000及相应的驱动包:mssqlserver.jar、msbase.jar、msutil.jar
步骤:
1、在myeclipse里新建工程strutslogon,并搭建好struts框架
2、在sqlserver中新建数据库mytest,新建表login,其字段:username、password。将三个驱动包导入到WEB-INF/lib/里
3、编辑配置文件
4、编辑以下java文件及jsp文件
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>3</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <servlet> <servlet-name>Image</servlet-name> <servlet-class>logon.Image</servlet-class> </servlet> <servlet-mapping> <servlet-name>Image</servlet-name> <url-pattern>/image</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>logon.jsp</welcome-file> </welcome-file-list> </web-app>
struts-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <struts-config> <data-sources /> <form-beans > <form-bean name="logonForm" type="logon.LogonForm"></form-bean> </form-beans> <global-exceptions /> <global-forwards /> <action-mappings> <action path="/logon" name="logonForm" type="logon.LogonAction" input="/logon.jsp"> <forward name="success" path="/index.jsp"></forward> <forward name="failure" path="/logon.jsp"></forward> </action> </action-mappings> <message-resources parameter="com.yourcompany.struts.ApplicationResources" /> </struts-config>
LogonAction.java
package logon; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class LogonAction extends Action{ private LogonBean objLogonBean = new LogonBean(); public LogonBean getObjLogonBean() { return objLogonBean; } public void setObjLogonBean(LogonBean objLogonBean) { this.objLogonBean = objLogonBean; } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String target = "success"; if(!objLogonBean.validate(form, request, response)) target="failure"; return mapping.findForward(target); } }
LogonBean.java
package logon; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts.action.ActionForm; public class LogonBean { String inputrand = null; String realrand = null; String username = null; String password = null; String sqlstr = null; String warning = null; public boolean validate(ActionForm form,HttpServletRequest request, HttpServletResponse response){ HttpSession session = request.getSession(); realrand = (String)session.getAttribute("rand"); System.out.println(realrand); if(form!=null){ LogonForm logonForm = (LogonForm)form; inputrand = logonForm.getRand(); username = logonForm.getUsername(); password = logonForm.getPassword(); System.out.println("input:" + inputrand); } else { inputrand = null; } //验证是否输入了完整的登录信息 if(inputrand.equals("") || username.equals("") || password.equals("")){ request.setAttribute("warning", "请输入完整的登录信息"); return false; } //如果验证码为空,返回false,及警告信息 if(!inputrand.equals(realrand)){ request.setAttribute("warning", "对不起,您输入的验证码有误,请重新输入!"); return false; } //查询用户输入的用户名及密码是否合法 sqlstr = "select * from login where username='" +username+ "' and password='" +password+ "'"; List list = null; list = objLoginDao.ResultToList(objLoginDao.executeQuery(sqlstr)); //如果查询结果为空,返回false,及警告信息 if(list.size()<1){ request.setAttribute("warning", "对不起,您输入的用户名和密码有误,请重新输入!"); return false; } request.setAttribute("username", username); return true; } private LogonDao objLoginDao = new LogonDao(); public LogonDao getObjLoginDao() { return objLoginDao; } public void setObjLoginDao(LogonDao objLoginDao) { this.objLoginDao = objLoginDao; } }
LogonDao.java
package logon; import java.sql.*; import java.util.*; public class LogonDao{ String sDBDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; String url = "jdbc:sqlserver://localhost:1433;DatabaseName=mytest"; String user = "sa"; String password = "1"; Statement stmt = null; Connection conn = null; ResultSet rs = null; List list = null; //自定义,用于转化ResultSet到List类型 public LogonDao(){ try{ Class.forName(sDBDriver).newInstance(); System.out.println("加载数据库驱动成功"); } catch(Exception e) { e.printStackTrace() ; } } //执行查询语句 sql 并返回查询结果 public ResultSet executeQuery(String sql){ System.out.println(sql); try{ conn=DriverManager.getConnection(url,user,password); Statement stmt=conn.createStatement(); System.out.println("连接数据库成功"); rs=stmt.executeQuery(sql); } catch(SQLException ex){ System.err.println(ex.getMessage()); } return rs; } /** * @description:该函数用于将查询结果转化为List,便于使用 * @param rs 待转换的ResultSet类型数据 * @return 转换后的List数据 */ public List ResultToList(ResultSet rs){ try { ResultSetMetaData rsmd = rs.getMetaData(); int numberOfColumns = rsmd.getColumnCount(); // System.out.println("numberOfColumns: " + numberOfColumns); Map rsMap = null; list = new ArrayList(); while(rs.next()){ rsMap = new HashMap(numberOfColumns); for(int r=1;r<numberOfColumns+1;r++){ rsMap.put(rsmd.getColumnName(r), rs.getObject(r)); } list.add(rsMap); } } catch(SQLException ex){ System.err.println(ex.getMessage()); } return list; } //执行一次更新 public void executeUpdate(String sql){ stmt=null; rs=null; try{ conn=DriverManager.getConnection(url,user,password); Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); stmt.executeQuery(sql); stmt.close(); conn.close(); } catch(SQLException ex){ System.err.println(ex.getMessage()); } } //关闭 Statement 对象 public void closeStmt() { try{ stmt.close(); } catch(SQLException e) { e.printStackTrace(); } } //关闭数据库连接 public void closeConn() { try{ conn.close(); } catch(SQLException e) { e.printStackTrace(); } } }
LogonForm.java
package logon; import org.apache.struts.action.ActionForm; public class LogonForm extends ActionForm { private String username; private String password; private String rand; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getRand() { return rand; } public void setRand(String rand) { this.rand = rand; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
Image.java
package logon; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class Image extends HttpServlet { //public static final long serialVersionUID = 1L ; //private static final String CONTENT_TYPE = "text/html; charset=GBK"; public Color getRandColor(int fc, int bc) { //给定范围获得随机颜色 Random random = new Random(); if (fc > 255) { fc = 255; } if (bc > 255) { bc = 255; } int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b); } //Initialize global variables public void init() throws ServletException { } //Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置页面不缓存 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); // 在内存中创建图象 int width = 60, height = 20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = image.getGraphics(); //生成随机类 Random random = new Random(); // 设定背景色 g.setColor(getRandColor(200, 250)); g.fillRect(0, 0, width, height); //设定字体 g.setFont(new Font("Times New Roman", Font.PLAIN, 18)); //画边框 //g.setColor(new Color()); //g.drawRect(0,0,width-1,height-1); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 g.setColor(getRandColor(160, 200)); for (int i = 0; i < 155; i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x, y, x + xl, y + yl); } // 取随机产生的认证码(4位数字) String sRand = ""; for (int i = 0; i < 4; i++) { String rand = String.valueOf(random.nextInt(10)); sRand += rand; // 将认证码显示到图象中 g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110))); //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.drawString(rand, 13 * i + 6, 16); } // 将认证码存入SESSION request.getSession().setAttribute("rand", sRand); // 图象生效 g.dispose(); // 输出图象到页面 //ImageIO.write(image, "JPEG", response.getOutputStream()); JPEGImageEncoder encode = JPEGCodec.createJPEGEncoder(response. getOutputStream()); encode.encode(image); } //Clean up resources public void destroy() { } }
logon.jsp
<%@ page language="java" pageEncoding="gbk"%> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String msg = null; msg = (String)request.getAttribute("warning"); %> <html> <head> <title>logon.jsp</title> </head> <body> <html:form action="/logon.do" method="post"> <table border="0" cellspacing="0" cellpadding="0" style="border:#1A3C79 1px solid;" bgcolor="white" align="center"> <tr height="10"><td colspan="2"></td></tr> <tr height="22"><td colspan="2" align="center">用户登录</td></tr> <tr height="22"> <td width="100" align="right">用户名:</td> <td width="180" align="left"><input name="username" type="text" style="width:120px;height:18px;"></td> </tr> <tr height="22"> <td align="right">密 码:</td> <td align="left"><input name="password" type="password" style="width:120px;height:18px;"></td> </tr> <tr height="22"> <td align="right">验证码:</td> <td align="left"> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td><input name="rand" type="text" style="width:70px;height:18px;" maxLength="4"></td> <td> <img id="randImage" src="image" onclick="loadimage();" alt="点击下一张替换图片" style="margin-top:3px;width:60px;height:20px;cursor:hand;"> </td> </tr> </table> </td> </tr> <tr height="25"><td colspan="2" align="center" valign="bottom"><input type="submit" value="提交"></td></tr> <tr height="10"><td colspan="2"></td></tr> </table> </html:form> </body> <script language="javascript"> function loadimage(){ document.getElementById("randImage").src = "image"; } //验证登录信息如果有误,则给出提示信息 msgWarning(); function msgWarning(){ var msg = "<%=msg %>"; if(msg!="null")alert(msg); } </script> </html>
index.jsp
<html> <head> <title>index.jsp</title> </head> <body> <br> <h3 align="center">${username},welcoming your comming!</h3> </body> </html>
评论
1 楼
向奕昌
2011-03-02
<img id="randImage" src="image" onclick="loadimage();" alt="点击下一张替换图片" style="margin-top:3px;width:60px;height:20px;cursor:hand;">
这里点击不能生成第2张
document.getElementById("randImage").src = "image";
这个没有用到
这里点击不能生成第2张
document.getElementById("randImage").src = "image";
这个没有用到
相关推荐
本实例将详细讲解如何使用Struts2实现一个简单的登录功能。 一、Struts2基础 Struts2是Apache软件基金会的开源项目,它继承了Struts1的优点并改进了其不足,如更灵活的配置、更强的拦截器机制等。Struts2的核心是...
在这个简单的用户登录实例中,我们主要关注Struts2的核心功能和如何构建一个基本的登录流程。 1. **Struts2框架基础**: - **Action类**:是Struts2的核心,用于处理用户的请求。在本例中,会有一个Action类来接收...
在这个实例中,我们将集成 Struts2 和 Hibernate 3.2,创建一个简单的用户注册和登录功能。以下是一个详细的步骤指南: 1. **开发环境配置**: - 开发工具:NetBeans 6.5.1 - Java 运行环境:JDK 1.6 - 应用...
Struts2框架是一个基于Model-View-Controller(MVC)设计模式的Java Web应用程序框架,由Apache软件基金会维护。这个框架极大地简化了开发过程,提高了可维护性和可扩展性。Struts2通过整合多种优秀框架,如Tiles、...
本实例将详细讲解如何使用Struts2实现一个简单的登录功能。 一、Struts2框架简介 Struts2是由Apache软件基金会开发的开源框架,它继承了Struts1的优点并解决了其存在的问题。Struts2的核心是Action类和配置文件,...
在本实例中,我们将深入探讨如何使用Struts1.2实现一个简单的登录功能,这将帮助我们理解Struts1的工作流程和配置细节。 首先,让我们了解Struts1的核心概念: 1. **ActionServlet**:这是Struts1的入口点,它是一...
这个实例将详细介绍如何将这三个框架整合到一起,实现一个完整的MVC(Model-View-Controller)架构。 Struts是Apache组织提供的一个开源MVC框架,主要负责控制层,处理用户请求,协调模型与视图之间的交互。它通过...
Struts是Apache软件基金会 Jakarta项目下的一个开源框架,主要用于构建基于Java EE的Web应用程序。它提供了MVC(Model-View-Controller)设计模式的实现,帮助开发者更好地组织和管理应用程序的业务逻辑、用户界面和...
这个实例“struts开发实例一个”旨在帮助初学者理解和掌握Struts框架的基本应用,包括前端验证和后端Action的实现。 在Struts框架中,前端验证通常指的是在用户提交表单数据之前在客户端进行的验证。这可以防止无效...
在Struts2框架中,验证框架是其一个重要组成部分,用于确保输入数据的准确性和完整性,从而防止因无效数据导致的程序异常或错误。本实例将带你深入理解Struts2验证框架的使用,以及在实际操作中可能遇到的问题和解决...
Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中被广泛应用,尤其在处理复杂的业务逻辑和用户交互时。在这个项目"struts2实现用户登录注册"中,我们将深入探讨如何利用Struts2在Eclipse开发...
Struts框架是Java Web开发中的一个关键组件,它基于MVC(Model-View-Controller)设计模式,旨在简化Web应用程序的构建。这个压缩包包含了三个使用Struts2框架实现的项目实例:租房管理、宠物管理和学生管理。这些...
本实例是一个基于Struts作为控制层、Hibernate作为数据持久化层,结合MsSql2000数据库的用户登录验证系统。下面将详细解释这三个关键组件及其在实际开发中的应用。 **Struts框架** Struts是一个开源的Java Servlet ...
本实例是一个基础的Struts2应用,展示了如何创建一个简单的Action,配置Action映射,以及生成相应的视图。随着你对Struts2的深入学习,你会了解到更多高级特性,如动态方法调用、国际化、主题和模板、拦截器栈等。...
在这个实例中,我们将深入探讨Struts2的核心概念、配置以及如何创建一个简单的应用程序。 首先,理解Struts2的核心理念至关重要。Struts2框架通过提供一系列拦截器(Interceptor)来处理HTTP请求,这些拦截器按照预...
"struts2+spring+ibatis框架实例"是基于这三个框架的一个集成示例,它利用MySQL作为后端数据库。下面我们将详细探讨这三个框架及其在实际项目中的应用。 **Struts2框架** Struts2是MVC(模型-视图-控制器)架构模式...
在这个"一个完整的Struts2应用实例"中,我们将深入探讨如何利用Struts2实现用户注册和登录功能,涉及的关键知识点包括Action的实现与配置、Struts2验证框架的应用、以及国际化资源文件的使用。 首先,**Action的...
本项目以"用Struts实现用户登录"为主题,旨在帮助初学者入门Struts框架,理解其基本工作原理和配置过程。 首先,我们要了解Struts框架的核心概念。MVC模式是软件设计中的一个经典模式,它将应用程序分为三个主要...
以下是一个简单的入门实例,帮助初学者理解如何配置和使用Struts2.0。 首先,我们需要创建一个新的Web项目。在MyEclipse中,你可以新建一个Web项目,例如命名为"Struts2入门实例"。接下来,你需要导入Struts2运行所...