JavaWeb用户登录功能的实现
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.javapackage erlogin.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{@Overrideprotected 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"};//随机生成3-5个验证码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_codesession.setAttribute("validation_code", validationCode.toString());//关闭Graphics对象g.dispose();OutputStream outS = resp.getOutputStream();ImageIO.write(image, "JPEG", outS);}@Overrideprotected 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);//gint green = minColor + random.nextInt(maxColor-minColor);//bint blue = minColor + random.nextInt(maxColor-minColor);return new Color(red,green,blue);}}操作数据库的代码:ManageSQLServer2008.java(本人使用的数据库为SQLServer 2008)package erlogin.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 blocke.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语句不返回结果集,则返回nullreturn pStmt.getResultSet();}private void closeSQLConn(){//关闭数据库链接if(conn != null){try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.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.javapackage erlogin.sample;import erlogin.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{@Overrideprotected 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.jspRequestDispatcher rd = req.getRequestDispatcher("Login.html");rd.forward(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);}}web.xml文件的配置:<servlet><servlet-name>loginServlet</servlet-name><servlet-class>erlogin.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>erlogin.sample.ValidationCode</servlet-class></servlet><servlet-mapping><servlet-name>validationCode</servlet-name><url-pattern>/validationCode</url-pattern></servlet-mapping>最后的style.css代码,太多了,而且有点乱,所以就没有贴出来,至于CSS代码,大家可以去网上下载:/tag_moban/htmlMoBan.html这个上面就有好多,大家根据喜好选择一个,然后稍加即可。
登录系统设计实验报告(3篇)
第1篇一、实验目的1. 熟悉登录系统的基本原理和设计流程。
2. 掌握使用常见开发工具进行登录系统设计的方法。
3. 提高编程能力和系统设计能力。
二、实验环境1. 操作系统:Windows 102. 开发工具:Java Web Development Kit (JDK) 1.83. 数据库:MySQL 5.74. 开发环境:Eclipse三、实验内容1. 需求分析2. 系统设计3. 系统实现4. 系统测试四、实验步骤1. 需求分析(1)用户需求登录系统应具备以下功能:1)用户注册:允许用户创建账户,输入用户名、密码、邮箱等基本信息。
2)用户登录:允许用户输入用户名和密码,验证用户身份。
3)找回密码:当用户忘记密码时,提供找回密码功能。
4)注销登录:允许用户退出登录状态。
(2)系统需求1)安全性:系统需保证用户数据的安全,防止数据泄露。
2)易用性:系统界面简洁,操作方便,易于用户使用。
3)稳定性:系统需具备良好的稳定性,能够应对高并发访问。
2. 系统设计(1)系统架构登录系统采用B/S(Browser/Server)架构,分为前端和后端两部分。
前端:使用HTML、CSS、JavaScript等技术实现用户界面。
后端:使用Java语言进行开发,结合MySQL数据库存储用户信息。
(2)模块设计1)用户注册模块:实现用户注册功能,包括输入用户名、密码、邮箱等基本信息。
2)用户登录模块:实现用户登录功能,验证用户身份。
3)找回密码模块:实现找回密码功能,允许用户通过邮箱或手机号找回密码。
4)注销登录模块:实现用户注销登录状态。
3. 系统实现(1)前端实现使用HTML、CSS、JavaScript等技术实现登录系统界面,包括注册、登录、找回密码等页面。
(2)后端实现1)使用Java语言实现用户注册、登录、找回密码等业务逻辑。
2)使用JDBC连接MySQL数据库,实现用户信息的存储和查询。
4. 系统测试(1)功能测试1)测试用户注册功能,确保用户可以成功注册账户。
webauthn代码
webauthn代码“WebAuthn代码”指的是实现WebAuthn功能的代码。
WebAuthn是一个开放标准,旨在简化网站和服务对用户的身份验证过程,提供基于公钥加密的身份验证方法。
通过使用WebAuthn代码,网站可以利用硬件安全模块(如智能卡、USB密钥或基于FIDO的设备)进行身份验证,为用户提供更安全、可靠和便捷的登录体验。
WebAuthn代码通常包括前端代码和后端代码。
前端代码负责与用户交互并处理用户输入的凭据,调用浏览器提供的WebAuthn API来启动身份验证过程。
后端代码则负责与WebAuthn服务器通信,验证用户的身份。
举例来说,以下是两个常见的WebAuthn代码实现:1.JavaScript代码:在前端开发中,可以使用JavaScript来调用浏览器的WebAuthn API。
例如,当用户尝试登录网站时,JavaScript代码可以调用WebAuthn API,并引导用户使用已连接的硬件安全模块或生物识别技术进行身份验证。
一旦验证成功,JavaScript代码将处理用户的登录请求,并授予他们访问受保护资源的权限。
2.Node.js代码:在后端开发中,可以使用Node.js来与WebAuthn服务器通信。
Node.js提供了与WebAuthn API交互的库和工具,使开发人员能够轻松地验证用户的身份。
当用户通过身份验证后,Node.js代码将处理用户的登录请求,并授予他们访问受保护资源的权限。
总结来说,“WebAuthn代码”指的是用于实现基于WebAuthn标准的身份验证功能的代码。
这包括前端代码和后端代码,分别用于处理用户输入和与浏览器API交互,以及与WebAuthn服务器通信和验证用户身份。
通过使用WebAuthn代码,网站可以提供更安全、可靠和便捷的身份验证机制,保护用户的个人信息并增强网站的安全性。
javaweb课程设计源码参考
javaweb课程设计源码参考JavaWeb课程设计源码参考一、引言JavaWeb课程设计是计算机科学与技术专业的一门重要课程。
在这门课程中,学生需要掌握JavaWeb开发的基本知识和技能,并通过实践来加深对所学知识的理解。
本文将为大家提供一些JavaWeb课程设计的源码参考,帮助学生更好地完成课程设计。
二、登录页面登录页面是JavaWeb课程设计中常见的一个功能模块。
下面是一个简单的登录页面源码参考:```java<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><!DOCTYPE html><html><head><title>登录页面</title></head><body><form action="login" method="post"><label for="username">用户名:</label><input type="text" id="username" name="username"><br><br><label for="password">密码:</label><input type="password" id="password" name="password"><br><br><input type="submit" value="登录"></form></body></html>```三、登录功能实现登录功能是JavaWeb课程设计中的核心功能之一。
JAVA web用户登录完整代码
java action:LoginForm form=(LoginForm)actionForm;ActionMessages errors = new ActionMessages();System.out.println(";form.getAction()=";+form.getAction());if (";login";.equals(form.getAction())) {System.out.println(";----------------login--------------";);AuthCodeCookie authCodeCookie = new AuthCodeCookie(request,response);if (!authCodeCookie.getAuthCode().equals(form.getAuthCode())) {//验证码不正确errors.add(";error.login.authcode";, new ActionMessage(";error.login.authcode";));this.saveErrors(request, errors);return mapping.getInputForward();}User user = this.getUserService().get(form.getUserId());if(user==null){errors.add(";er";, new ActionMessage(";er";));this.saveErrors(request, errors);return mapping.getInputForward();}Util util = new Util();if(!util.hash(form.getPassword()).equals(user.getPassword())){errors.add(";error.login.password";, new ActionMessage(";error.login.password";));this.saveErrors(request, errors);return mapping.getInputForward();}// 一旦登录成功,创建sessionHttpSession session = request.getSession();UserSession userSession = new UserSession();userSession.setUser(user);session.setAttribute(ER_SESSION_KEY, userSession);//把UserSession传递到下个页面// 并且修改用户登录时间,登录次数+1user.setLastLoginDate(Util.getCurrentDate(";yyyyMMdd hhmmss";));user.setLoginTimes(Integer.valueOf(user.getLoginTimes().intValue()+1));this.getUserService().update(user);System.out.println(";----------------------------------------------------";) ;// // 获取用户对应的系统应用菜单List allModuleList = this.getModuleService().getModuleTree(Integer.parseInt(user.getMenuLevel()));//0代表根菜单// List allModuleList = this.getModuleService().getModuleTree(1);//0代表主菜单// System.out.println(";allModuleList.size=";+allModuleList.size()); // for(int i=0;i<;allModuleList.size();i++){//System.out.println(";";+((Module)allModuleList.get(i)).getModuleName());// }Iterator menu = allModuleList.iterator();Vector parentV = new Vector();Vector childV = new Vector();Module m;while (menu.hasNext()) {m = (Module) menu.next();if(user.getPermission().indexOf(";[";+m.getId()+";]";)!=-1){if (m.getParentId().intValue() == 0) {parentV.add(m);} else {childV.add(m);}}}request.getSession().setAttribute(";parentVector";, parentV);request.getSession().setAttribute(";childVector";, childV);System.out.println(";初始化完毕";);return mapping.findForward(";userPanel";);}jsp:<;%@ page contentType=";text/html;charset=UTF-8";%>;<;%@ taglib uri=";/WEB-INF/struts-bean.tld"; prefix=";bean";%>;<;%@ taglib uri=";/WEB-INF/struts-html.tld"; prefix=";html";%>;<;%@ taglib uri=";/WEB-INF/struts-logic.tld"; prefix=";logic";%>;<;jsp:useBean id=";user_session"; scope=";session";type=";erSession"; />;<;%er user = null;if (user_session != null)user = user_session.getUser();//根据权限获得菜单,这里权限用Telephone替代一下先String str = user.getTelephone();%>;<;html>;<;head>;<;meta http-equiv=";Content-Type"; content=";text/html; charset=UTF-8";>;<;title>;LEFT<;/title>;<;link rel=";stylesheet"; href=";css/style.css"; type=";text/css";>;<;script language=";JavaScript";>;<;!--function doExit(){if (confirm(";您确定要退出帐单门户系统吗?";)){window.open(";login.portal?action=logout";,";_parent";,";";);}}//-->;<;/script>;<;script language=";JavaScript";>;var w=200;function closenavi() {w-=200;if (w>;-10) {window.parent.testframeset.cols = ''+w+',*';repeat=setTimeout(";closenavi()";,10);}else {clearTimeout(repeat);w=200;}}function loginOutPage() {document.forms[1].SIGN_OFF.click();}function initIt(){divCount = document.all.tags(";DIV";);for (i=0; i<;divCount.length; i++) {obj = divCount(i);if (obj.className == ";child"; || obj.className == ";child1";) obj.style.display = ";none";;}}function expandIt(el) {obj = eval(";page"; + el);obj2 = eval(";main"; + el);if (obj.style.display == ";none";) {obj.style.display = ";block";;}else {obj.style.display = ";none";;}}onload = initIt;var judge=0;function expandall(o) {if (judge==0) {divCount2 = document.all.tags(";DIV";);for (i=0; i<;divCount2.length; i++) {obj2 = divCount2(i);if (obj2.className == ";child"; || obj.className == ";child1"; || obj2.style.display == ";none";){obj2.style.display = ";block";;}if (obj2.className == ";menu";){//obj2.all.tags('img')[0].src='images/treeimg/tminus.gif';obj2.all.tags('img')[0].src='images/openfolder1.gif';}}judge=1;o.src='images/icon-closeall.gif';o.alt='全部折叠';}else {divCount2 = document.all.tags(";DIV";);for (i=0; i<;divCount2.length; i++) {obj2 = divCount2(i);if (obj2.className == ";child"; || obj.className == ";child1"; || obj2.style.display == ";block";){obj2.style.display = ";none";;}if (obj2.className == ";menu";){obj2.all.tags('img')[0].src='images/folder1.gif';}}judge=0;o.src='images/icon-expandall.gif';o.alt='全部展开';}}function quit(form) {window.close()}function loginOutPage() {document.forms[0].SIGN_OFF.click();}<;/script>;<;/head>;<;body bgcolor=";#D8DADA"; class=";bodyTop";>;<;center>;<;table width=";161"; border=";0"; cellspacing=";0"; cellpadding=";0";>;<;tr>;<;td>;<;table style=";margin-top: 10px; margin-bottom: 10px"; width=";138";border=";0"; align=";center"; cellpadding=";0"; cellspacing=";0";>;<;tr>;<;td>;<;img src=";images/001.jpg"; width=";138"; height=";6";>;<;/td>;<;/tr>;<;tr>;<;td class=";msBack";>;<;table width=";130"; border=";0"; align=";center"; cellpadding=";3";cellspacing=";0";>;<;tr>;<;td width=";19";>;<;img src=";images/em44.gif"; width=";19"; height=";19";>;<;/td>;<;td class=";message";>;您有新的帐单信息<;/td>;<;/tr>;<;tr>;<;td>;<;img src=";images/em44.gif"; width=";19"; height=";19";>;<;/td>;<;td class=";message";>;您有新的支付信息<;/td>;<;/tr>;<;/table>;<;/td>;<;/tr>;<;tr>;<;td>;<;img src=";images/002.jpg"; width=";138"; height=";6";>;<;/td>;<;/tr>;<;/table>;<;/td>;<;/tr>;<;/table>;<;logic:iterate id=";module"; name=";parentVector";type=";com.worthtech.billportal.bean.Module";indexId=";index";>;<;%int i = ((ng.Integer) pageContext.findAttribute(";index";)).intValue();%>;<;div id=<;%=";main"; + i%>; class=";title";onClick=";expandIt(<;%=";"; + i%>;); return false";>;<;%if(str.indexOf(";[";+module.getId()+";]";)!=-1){%>;<;table class=";TableLeftTop"; style=";margin-top: 10px"; width=";138";border=";0"; cellspacing=";0"; cellpadding=";4";>;<;tr>;<;td background=";images/LeftMenuBack.jpg";>;<;div align=";center";>;<;%=module.getModuleName()%>;<;/div>;<;/td>;<;/tr>;<;/table>;<;%}%>;<;/div>;<;div id=<;%=";page"; + i%>; class=";child";>;<;table class=";TableLeftView"; width=";170"; border=";0"; cellspacing=";0";cellpadding=";0";>;<;logic:iterate id=";childModule"; name=";childVector";type=";com.worthtech.billportal.bean.Module";>;<;%if(str.indexOf(";[";+childModule.getId()+";]";)!=-1&;&;childModule.getParent ID().intValue()==module.getId().intValue()){%>;<;tr>;<;td width=";44";>;<;div align=";right";>;<;img src=";images/t.gif"; width=";19"; height=";20";>;<;/div>;<;/td>;<;td width=";161";>;<;a href=<;%=childModule.getActionURL()%>; target=";mainFrame";>;<;%=childModule.getModuleName()%>;<;/a>;<;/td>;<;/tr>;<;%}%>;<;/logic:iterate>;<;/table>;<;/div>;<;/logic:iterate>;<;table style=";margin-top: 10px"; width=";161"; border=";0";cellspacing=";0"; cellpadding=";2";>;<;tr>;<;td>;<;table width=";141"; border=";0"; align=";center"; cellpadding=";2";cellspacing=";0";>;<;tr>;<;td>;<;div align=";center";>;<;a href=";#"; onclick=";doExit();";>;<;imgsrc=";images/ico01.gif";width=";65"; height=";15"; border=";0";class=";MouseOver";>; <;/a>;<;/div>;<;/td>;<;td>;<;div align=";center";>;<;ahref=";user.portal?action=password";target=";mainFrame";>;<;imgclass=";MouseOver";src=";images/ico02.gif";width=";65"; height=";15"; border=";0";>;<;/a>;<;/div>;<;/td>;<;/tr>;<;/table>;<;/td>;<;/tr>;<;/table>;<;/center>;<;/body>;<;/html>;。
《Java Web程序设计》实验指导书SSM
《Java Web程序设计》实验指导河南大学计算机与信息工程学院二〇一七年七月目录说明 (1)实验一HTML应用 (1)一、实验目的 (1)二、实验学时 (1)三、实验环境 (1)四、实验内容 (1)五、实验报告书写要求 (2)实验二JSP应用 (3)一、实验目的 (3)二、实验学时 (3)三、实验环境 (3)四、实验内容 (3)五、实验报告书写要求 (4)实验三JDBC应用 (6)一、实验目的 (6)二、实验学时 (6)三、实验环境 (6)四、实验内容 (6)(一)MySQL数据库管理操作 (6)(二)使用JDBC访问数据库 (10)(三)在实验三实现的功能中增加数据库访问功能 (11)五、实验报告书写要求 (11)实验四Servlet应用 (12)一、实验目的 (12)二、实验学时 (12)三、实验环境 (12)四、实验内容 (12)(一)使用Servlet技术改写用户登录 (12)(二)使用Filter技术解决中文乱码 (12)五、实验报告书写要求 (12)实验五JSP+Servlet+JavaBean综合应用 (13)一、实验目的 (13)二、实验学时 (13)三、实验环境 (13)四、实验内容 (13)五、实验报告书写要求 (13)实验六DAO和MVC模式 (15)一、实验目的 (15)二、实验学时 (15)三、实验环境 (15)四、实验内容 (15)五、实验参考界面 (15)六、实验报告书写要求 (15)实验七 Struts 2应用 (17)一、实验目的 (17)二、实验学时 (17)三、实验环境 (17)四、实验内容 (17)(一)基本Struts 2应用编写 ..................................... 错误!未定义书签。
(二)可选:编写并使用拦截器 (17)(三)可选:使用类型转换器.................................... 错误!未定义书签。
【Java】JavaWeb登录检查及界面跳转
【Java】JavaWeb登录检查及界⾯跳转场景 ⼀般javaweb⽹站都有⽤户登录,⽽有⼀些操作必须⽤户登录才能进⾏,常见流程:⽤户请求--》后台判断是否登录--》没登录跳转到登录界⾯,登录⽤户正常操作解决思路 在⽤过滤器过滤请求,判断是否登录,如果未登录,返回参数跳转的登录界⾯,登录了的请求放⾏具体实现 新建⼀个web⼯,参考: 新建⼀个LoginFilter过滤器类,继承Filter类1package com.test.login;23import java.io.IOException;4import java.io.PrintWriter;5import java.util.ArrayList;6import java.util.List;78import javax.servlet.Filter;9import javax.servlet.FilterChain;10import javax.servlet.FilterConfig;11import javax.servlet.ServletException;12import javax.servlet.ServletRequest;13import javax.servlet.ServletResponse;14import javax.servlet.http.HttpServletRequest;15import javax.servlet.http.HttpServletResponse;16import javax.servlet.http.HttpSession;1718public class LoginFilter implements Filter {1920public static List<String> pattenURL = new ArrayList<String>();2122 @Override23public void destroy() {24// TODO Auto-generated method stub2526 }2728 @Override29public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)30throws IOException, ServletException {3132 HttpServletRequest httpRequest = (HttpServletRequest) request;33 HttpServletResponse httpResponse = (HttpServletResponse) response;34 HttpSession session = httpRequest.getSession();35// 登陆url36 String loginUrl = httpRequest.getContextPath() + "/login.jsp";37 String url = httpRequest.getRequestURI().toString();3839// 注:在pattenURL中的全部不拦截 url.indexOf(urlStr) > -1 表⽰urlStr在url中出现过,出现就不拦截40for (String urlStr : pattenURL) {41if (url.indexOf(urlStr) > -1) {42 chain.doFilter(request, response);43return;44 }45 }4647//超时处理,ajax请求超时设置超时状态,页⾯请求超时则返回提⽰并重定向,session.getAttribute("")是获取到登录⼈的session信息48if (session.getAttribute("") == null) {49// 判断是否为ajax请求50if (httpRequest.getHeader("x-requested-with") != null51 && httpRequest.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {52 httpResponse.addHeader("sessionstatus", "timeOut"); // 返回超时标识53 httpResponse.addHeader("loginPath", loginUrl);// 返回url54 chain.doFilter(request, response);// 不可少,否则请求会出错55 } else {56// alert('会话过期,请重新登录');57 String str = "<script language='javascript'>" + "window.top.location.href='" + loginUrl + "';</script>";58 response.setContentType("text/html;charset=UTF-8");// 解决中⽂乱码59try {60 PrintWriter writer = response.getWriter();61 writer.write(str);62 writer.flush();63 writer.close();64 } catch (Exception e) {65 e.printStackTrace();66 }67 }68 } else {69 chain.doFilter(request, response);70 }71 }7273/**74 * 过滤器初始化调⽤⽅法在pattenURL中的全部不拦截,所以上⾯会使⽤:path.indexOf(urlStr) > -175*/76 @Override77public void init(FilterConfig config) throws ServletException {78 pattenURL.add("login.jsp");// 登录jsp79 pattenURL.add("login.do");// 登录⽅法80 pattenURL.add("css");// css81 pattenURL.add("image");// image82 pattenURL.add("js");// js83 pattenURL.add("fonts");// fonts8485 }8687 } 在web.xml中注册过滤器1<?xml version="1.0" encoding="UTF-8"?>2<web-app version="3.0" xmlns="/xml/ns/javaee"3 xmlns:xsi="/2001/XMLSchema-instance"4 xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_0.xsd">56<display-name>test-login</display-name>78<!-- 登录过滤器 -->9<filter>10<description>登录过滤器</description>11<filter-name>loginFilter</filter-name>12<filter-class>com.test.login.LoginFilter</filter-class>13</filter>14<filter-mapping>15<filter-name>loginFilter</filter-name>16<url-pattern>/*</url-pattern>17</filter-mapping>1819<welcome-file-list>20<welcome-file>index.jsp</welcome-file>21</welcome-file-list>2223</web-app> 引⼊⼀个全局的js。
完成一个IDEAweb项目(二)登录功能实现
完成⼀个IDEAweb项⽬(⼆)登录功能实现(⼆)登录功能实现1. 编写前端页⾯若jsp页⾯中⽂乱码:在jsp中指定页⾯显⽰的编码为GBK添加page命令<%@ page language="java" contentType="text/html; charset=GBK" %>*其他所有出现编码的地⽅也要改掉2. 编写login.jsp,并设置为⾸页login.jsp<%@ page language="java" contentType="text/html; charset=GBK" %><!DOCTYPE html><html lang="en"><head><meta charset="GBK"><title>⽤户登录</title></head><body><form action="${pageContext.request.contextPath}/studentServlet" method="post"><div class="errorInfo">${error}</div><p>学号:<input type="text" size="20" name="stuNo"></p><p>密码:<input type="password" size="20" name="stuPwd"></p><p><input type="submit" value="登录"></p></form></body></html>设置为⾸页:web.xml添加<!-- 设置欢迎页⾯ --><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list>3. 编写dao层⽤户登陆的接⼝StudentDaopublic interface StudentDao {//得到要登录的研究⽣public Student getLoginStudent(Connection conn,String stuNo) throws SQLException;}4. 编写dao接⼝的实现层StudentDaoImplpackage dao.student;import dao.BaseDao;import domain.Student;import org.junit.Test;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class StudentDaoImpl implements StudentDao {@Overridepublic Student getLoginStudent(Connection conn, String stuNo) throws SQLException { PreparedStatement ps = null;ResultSet rs = null;Student stu = null;if (conn != null) {String sql = "select * from student where stu_no=?";Object[] params = {stuNo};rs = BaseDao.executeQuery(conn, sql, params, ps, rs);if (rs.next()) {stu = new Student();stu.setStuNo(rs.getString(1));stu.setPassword(rs.getString(2));stu.setStuName(rs.getString(3));stu.setSpecialty(rs.getString(4));stu.setSex(rs.getBoolean(5));stu.setBirth(rs.getDate(6));stu.setPhone(rs.getString(7));stu.setEmail(rs.getString(8));stu.setGradSchoolCode(rs.getString(9));stu.setGradSchoolName(rs.getString(10));stu.setGradSpecCode(rs.getString(11));stu.setGradSpecName(rs.getString(12));}BaseDao.closeResource(null, ps, rs);}return stu;}}5. 业务层接⼝StudentServicepublic interface StudentService {/*** 验证是否登录成功** @return 登录成功则返回⽤户对象,⽆则null*/public Student isLogin(String stuNo, String pwd) throws SQLException;}6. 业务层实现类StudentServiceImplpublic class StudentServiceImpl implements StudentService {private StudentDao studentDao;public StudentServiceImpl() {studentDao = new StudentDaoImpl();}/*** 验证是否登录成功** @return 有登录成功则返回⽤户对象,⽆则null*/@Overridepublic Student isLogin(String stuNo, String pwd) {Connection conn = null;Student stu = null;try {conn = BaseDao.getConnection();stu = studentDao.getLoginStudent(conn, stuNo);if (stu != null) {if (!pwd.equals(stu.getPassword()))stu = null;}} catch (SQLException e) {e.printStackTrace();} finally {BaseDao.closeResource(conn, null, null);}return stu;}}7. 编写ServletStudentServlet记得添加@WebServlet注解@WebServlet("/studentServlet")public class StudentServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取客户端提交的数据String stuNo = req.getParameter("stuNo");String stuPwd = req.getParameter("stuPwd");try {StudentService studentService = new StudentServiceImpl();Student stu = studentService.isLogin(stuNo, stuPwd);if (stu != null) { //有该⽤户,存进session,跳转到查看导师页⾯HttpSession session = req.getSession();session.setAttribute(Constants.STUDENT_SESSION, stu);resp.sendRedirect("stu_check_tutor.jsp");} else { //⽆该⽤户,跳转⾄登录页⾯,并提⽰错误信息req.setAttribute("error", "⽤户名或密码不正确");req.getRequestDispatcher("login.jsp").forward(req, resp);System.out.println("结束Servlet....");}} catch (SQLException e) {e.printStackTrace();}}}。
上机考试题目.doc
操作题:1、使用jsp完成一个java web项目,实现用户登录功能,三个页面登录页面login.jsp,登录逻辑处理页面loginSubmit.jsp,欢迎页面welcome.jsp。
用户在登录页面输入用户名和密码,如果用户名为”admin”,密码为”123”,则登录成功跳转到欢迎页面,如果失败,停留在登录页面。
(无须连接数据库)2、使用jsp+servlet完成一个java web项目,实现用户登录功能,两个页面,一个servlet。
登录页面login.jsp,欢迎页面welcome.jsp,登录逻辑loginservlet。
用户在登录页面输入用户名和密码,如果用户名为”admin”,密码为”123”,则登录成功跳转到欢迎页面,如果失败,停留在登录页面。
3、使用jsp完成一个java web项目,实现用户登录功能,三个页面登录页面login.jsp,登录逻辑处理页面loginSubmit.jsp,欢迎页面welcome.jsp。
用户在登录页面输入用户名和密码,如果数据库中存在,则登录成功跳转到欢迎页面,如果失败,停留在登录页面。
(须连接数据库,sqlserver和access 均可)4、使用jsp+servlet完成一个java web项目,实现用户登录功能,两个页面,一个servlet。
登录页面login.jsp,欢迎页面welcome.jsp,登录逻辑loginservlet。
用户在登录页面输入用户名和密码,如果数据库中存在,则登录成功跳转到欢迎页面,如果失败,停留在登录页面。
(须连接数据库,sqlserver和access均可)5、使用jsp完成一个java web项目,实现用户登录功能,三个页面登录页面login.jsp,登录逻辑处理页面loginSubmit.jsp,欢迎页面welcome.jsp。
用户在登录页面输入用户名和密码,前台页面使用js进行验证,如果用户名或密码为空,则提示用户输入用户名和密码;如果用户名为”admin”,密码为”123”,则登录成功跳转到欢迎页面,如果失败,停留在登录页面。
《web开发技术(java)》实验四——利用Session完成用户登录功能
《利用Session完成用户登录》实验指导书一、实验目的理解会话对象的功能。
二、实验任务1、利用会话对象完成用户的模拟登录功能(组织界面输入用户名密码,如果用户名等于neusoft,密码等于123则视作合法用户,并完成登录功能)。
登录界面如下:2、验证用户是否成功登录(如果已经登录显示登录用户信息,否则跳转到登录界面)。
成功登录界面如下:验证成功登录界面如下:三、预备知识1.会话就是驻留服务器上的托管对象,位于JSP容器中。
其主要作用是跟踪由一个用户发送的请求。
2.JSP容器与浏览器通过协作使用标准的HTTP协议来实现会话,JSP、Servlet开发人员无需实现会话,也不直接处理会话实现机制。
只要能够使用会话对象即可。
3.获取对象的方法:JSP中直接使用session对象即可,Servlet中需要调用HttpServletRequest实例的getSession()、getSession(flag)方法即可获得。
getSession()以及getSession(true)完成的功能是:如果所需的会话不存在,立即创建;getSession(false)完成的功能是:若请求的会话存在,则获取使用,否则返回空值。
4.向会话中添加信息:调用HttpSession实例的setAttribute(String,Object)方法即可将要加的信息添加到Session,但注意如果要添加的属性名同已有的属性名重名,则当前值会覆盖原有的值。
5.获取属性中的信息:调用HttpSession实例的getAttribute(String)方法即可返回需要的值,注意方法的参数为属性的名称。
6.删除属性中的信息:有时根据需要将Session中已有的属性信息予以删除,此时需要调用HttpSession实例的romoveAttribute(String)删除指定的属性。
7.获取会话中所有的属性信息:有时可能根据需要,列出会列出会话中所有的属性值,此时需要调用HttpSession实例的getAttributeNames()方法获取所有的属性名,然后在根据这些属性名分别调用getAttribute(String)方法返回对应的属性值四、实验步骤1.创建Web项目2.创建login.html首页3.创建完成登录功能的Servlet或JSP4.验证是否已经登录,若功能登录打印欢迎信息,否则跳转到登录页面。
javaweb课后习题答案
javaweb课后习题答案Javaweb课后习题答案Javaweb是一门广泛应用于Web开发的编程语言,它在当今互联网行业中具有重要的地位。
在学习Javaweb的过程中,课后习题是巩固知识、提高编程能力的重要环节。
本文将为大家提供一些Javaweb课后习题的答案,帮助读者更好地理解和应用所学知识。
一、数据库操作1. 编写一个Javaweb程序,实现对数据库的增、删、改、查操作。
答案:以下是一个简单的示例代码,实现了对名为"users"的数据库表进行增、删、改、查操作。
```javaimport java.sql.*;public class UserDAO {private Connection conn;private Statement stmt;private ResultSet rs;public UserDAO() {try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");stmt = conn.createStatement();} catch (Exception e) {e.printStackTrace();}}public void addUser(String username, String password) {try {String sql = "INSERT INTO users (username, password) VALUES ('" + username + "', '" + password + "')";stmt.executeUpdate(sql);} catch (Exception e) {e.printStackTrace();}}public void deleteUser(String username) {try {String sql = "DELETE FROM users WHERE username = '" + username + "'";stmt.executeUpdate(sql);} catch (Exception e) {e.printStackTrace();}}public void updateUser(String username, String newPassword) {try {String sql = "UPDATE users SET password = '" + newPassword + "' WHERE username = '" + username + "'";stmt.executeUpdate(sql);} catch (Exception e) {e.printStackTrace();}}public void getUser(String username) {try {String sql = "SELECT * FROM users WHERE username = '" + username + "'";rs = stmt.executeQuery(sql);while (rs.next()) {String password = rs.getString("password");System.out.println("Username: " + username + ", Password: " + password);}} catch (Exception e) {e.printStackTrace();}}public void close() {try {if (rs != null) rs.close();if (stmt != null) stmt.close();if (conn != null) conn.close();} catch (Exception e) {e.printStackTrace();}}}```2. 如何防止SQL注入攻击?答案:为了防止SQL注入攻击,我们可以采取以下几种措施:- 使用预编译的语句:预编译的语句可以将参数与SQL语句分开,从而避免了直接拼接参数到SQL语句中的情况。
