`

用户登录系统的演变之MV模式

 
阅读更多

界面view(jsp):处理前台界面

模型model (java) :处理后台业务

login.jsp (登录界面) ---> 提交到 loginCl.jsp 处理---->调用UserCl.java 来判断用户是否合法 ---->如果合法,跳转到login_success.jsp---->

---->login_success.jsp 页面显示用户列表(调用UserCl.java 来获取页面数和要显示的用户信息)------>如果用户不合法------->跳转到login_failure.jsp页面

 

1.login.jsp

	</head>

	<body>
		<center><h1>登陆界面</h1>
		<hr>
		<form action="/jsp1/loginCl.jsp" method="post">
			用户名:
			<input type="text" name="id" />
			<br>
			密&nbsp;&nbsp;码:
			<input type="password" name="passw" />
			<br>
			<input type="submit" value="提交" />
			<input type="reset" value="重置" />
			<hr>
		</form>
		</center>
	</body>
</html>

 

2.loginCl.jsp

 </head>
  
  <body>
    <%
    	String id = request.getParameter("id");
    	String passw = request.getParameter("passw");
    	
    	UserCl  userCl = new UserCl();
    	if (userCl.checkUser(id,passw)) {
    			response.sendRedirect("login_success.jsp?user=" + id);
    		} else {
    			
    			response.sendRedirect("login_failure.jsp?errNo=1");
    		}
    %>
  </body>
</html>

 

3.login_success.jsp

	</head>

	<body>
		<center>
			<h1> 
				登陆成功 
			</h1>
			<h2>
				欢迎
				<font color="red"><%=request.getParameter("user")%></font>光临
			</h2>
			<a href="/jsp1/index1.jsp">返回重新登录</a>
			<hr>
			<%
				//定义四个变量
				int pageSize = 3; // 页面大小
				int pageNow = 1;//默认显示第一页
				int rowCount = 0;//总记录数,从数据库中查询
				int pageCount = 0; //页数,(rowCount/pageSize)+1
				
				//接受用户想要显示的页面
				String s_pageNow = request.getParameter("pageNow");
				if(s_pageNow!=null){
					pageNow = Integer.parseInt(s_pageNow);
				}
				

				//调用方法获取要显示的数据和页数
				UserCl userCl = new UserCl();
				pageCount = userCl.getPageCount();
				ArrayList<User> al = userCl.getUserByPage(pageNow);
				
				//用表格显示
				%>
					<center>
						<table border="1">
							<tr><td>userId</td><td>ID</td><td>PASSWORD</td><td>AGE</td><td>SEX</td></tr>
							<%
								for(int i=0;i<al.size();i++){
									User user = (User)al.get(i);
									%>
										<tr><td><%=user.getUserId() %></td><td><%=user.getId() %></td>
										<td><%=user.getPassword() %></td>
										<td><%=user.getAge() %></td><td><%=user.getSex() %></td></tr>
									<%
								}
							 %>
						</table>
					</center>
				<%
				//显示超链接
				if(pageNow != 1){
						out.print("<a href=login_success.jsp?pageNow="+(pageNow-1)+" >上一页</a>");
					}
				
				if(pageNow > 6 && pageNow <= (pageCount-4)){
					for(int i=pageNow-5;i<=pageNow+4;i++){
						out.println("<a href=login_success.jsp?pageNow="+i+">["+i+"]</a>");
					}
				}else if(pageNow >(pageCount-4) ){
					for(int i=pageCount-9;i<=pageCount;i++){
						out.println("<a href=login_success.jsp?pageNow="+i+">["+i+"]</a>");
					}
				}else{
					for(int i=1;i<=10;i++){
				//要是pageCount > 10  则不显示全部,只显示前10页的超链接
				//for(int i=1;i<=pageCount;i++)
					out.println("<a href=login_success.jsp?pageNow="+i+">["+i+"]</a>");
					}
				}
				
				if(pageNow != pageCount){
					out.print("<a href=login_success.jsp?pageNow="+(pageNow+1)+">下一页</a>");
				}
				
			%>
		</center>

	</body>
</html>

 

 

4. UserCl.java

package com.dtg.model;
 
import java.sql.*;
import java.util.ArrayList;
public class UserCl {
	
	Connection conn = null;
	Statement sm = null;
	ResultSet rs = null;
	boolean flag = false;
	
	int pageSize = 3; // 页面大小
	int pageNow = 1;//默认显示第一页
	int rowCount = 0;//总记录数,从数据库中查询
	int pageCount = 0; //页数,(rowCount/pageSize)+1
	
	//关闭连接
	public void closeConn() throws SQLException{
		try {
			if(rs != null){
				rs.close();
				rs = null;
			}
			if(sm!=null){
				sm.close();
				sm = null;
			}
			if(conn!=null){
				conn.close();
				conn = null;
			}
		} catch (Exception e) {
			
			e.printStackTrace();
			// TODO: handle exception
		}
		
	}
	public boolean checkUser(String id, String passw){
		
		try {
			
			ConnDB conndb =new ConnDB();
			conn = conndb.getConn();
			sm = conn.createStatement();
	    	rs = sm
	    			.executeQuery("select password from user2 where id ='" + id
	    					+ "'");
	    	if (rs.next()) {
	    		//确保用户名id是存在的
	    		if (rs.getString(1).equals(passw)) {
	    			//密码正确,用户合法
	    			flag = true;
	    		} else {
	    			//密码不正确,用户不合法
	    			flag = false;
	    		}
	    	} else {
	    		//用户不存在
	    		flag = false;
	    	}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
			try {
				this.closeConn();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		return flag;
	}
	
	/**
	 * 得到分页的页数
	 * @return
	 */
	public int getPageCount(){
		try {
			conn = new ConnDB().getConn();
			sm = conn.createStatement();
			rs = sm.executeQuery("select count(*) from user2");
			if (rs.next()) {
				rowCount = rs.getInt(1);
			}

			// 计算pageCount
			if (rowCount % pageSize == 0) {
				pageCount = rowCount / pageSize;
			} else {
				pageCount = rowCount / pageSize + 1;
			}
		} catch (Exception e) {
			// TODO: handle exception
		}finally{
			try {
				this.closeConn();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		return pageCount;
	}
	
	/**
	 * 取要分页显示的数据
	 */
	public ArrayList<User> getUserByPage(int pageNow){
		ArrayList<User> al =  new ArrayList<User>();
		try {
			conn = new ConnDB().getConn();
			sm = conn.createStatement();
			rs = sm.executeQuery("select top "+ pageSize+ " * from user2 where userId not in (select top "+ pageSize*(pageNow-1)+" userId from user2 order by userId) order by userId");
			while(rs.next()){
				User user = new User();
				user.setUserId(rs.getInt(1));
				user.setId(rs.getString(2));
				user.setPassword(rs.getString(3));
				user.setAge(rs.getInt(4));
				user.setSex(rs.getString(5));
				
				//添加user到动态数组中
				al.add(user);
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
			try {
				this.closeConn();
			} catch (Exception e2) {
				e2.printStackTrace();
				// TODO: handle exception
			}
		}
		return al;
	}
}

 

5.ConnDB.java

package com.dtg.model;

import java.sql.*;

public class ConnDB {
	
	Connection conn = null;
	
	public Connection getConn(){
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
	    	conn = DriverManager.getConnection(
	    			"jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Demo", "sa",
	    			"Founder123");
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		return conn;
		
		
	}
}

 

分享到:
评论

相关推荐

    AIX初级培训资料 小机

    它分为命令模式和插入模式,用户可以通过键入特定命令进行文本编辑。学习vi编辑器的基本操作是进行文本编辑和脚本编写的基础。 #### 五、进程概念及命令 - **进程管理** 进程是操作系统中的一个执行单位,每个...

    Linux基本资料

    - 文件权限与所有权:理解Linux的rwx权限模式和用户组概念,如何修改文件权限和所有权。 - 文件管理:学习使用命令行进行文件和目录的创建、删除、复制、移动等操作。 4. **Linux shell与命令行** - Bash Shell...

    UNIX使用基础_V1.0.pdf

    进程的创建和管理是UNIX系统中关键的多任务处理机制之一。 综上所述,“UNIX使用基础_V1.0.pdf”不仅是一份学习资源,更是了解UNIX操作系统核心概念和技术细节的窗口,涵盖了从操作系统的历史背景到具体操作命令的...

    Solaris指令集

    `init`或`telinit`命令用于切换不同的运行等级,如从多用户模式(run level 3)到单用户模式(run level 1)。 10. **网络应用配置**:Solaris的网络配置包括IP地址设置、路由配置、DNS解析等,常用命令有`ifconfig...

    基于HTTP会话过程跟踪的网页挂马攻击检测方法.pptx

    这种攻击模式与传统病毒蠕虫的推送模式不同,它依赖于用户主动访问挂马网页。\n\n针对当前挂马攻击的普遍性和危害性,现有的检测方法主要包括基于高交互虚拟蜜罐系统的监测和基于网页代码特征匹配。虚拟蜜罐系统虽然...

    ARM嵌入式Linux系统开发

    - **Shell介绍**:Shell是Linux系统中的用户界面,用户可以通过Shell输入命令来控制操作系统。Shell命令包括cp(复制文件)、mv(移动文件)、ls(列出目录内容)、mkdir(创建目录)等。 - **Shell编程**:Shell...

    LINUX学习资料

    1. **/bin** - 存储基本的用户命令,如ls、cp、mv等,是日常操作中最常访问的目录之一。 2. **/boot** - 包含系统启动所需的所有文件,例如内核映像和引导加载程序配置。 3. **/dev** - 设备文件的家园,允许用户像...

    IBM AIX基础 IBM官方

    - **发展**: 1969 年贝尔实验室退出 Multics 计划后,Ken Thompson 和 Dennis Ritchie 开发了基本的文件系统,逐渐演变为 UNIX 文件系统。 - **IBM AIX**: 1986 年 IBM 发布 AIX 操作系统,并逐渐扩展到不同的硬件...

    信息时代图书馆提供有效信息资源服务新方式的初探.pdf

    同时,Mv Library系统是个性化信息服务的一大创新,它能为读者定制链接、更新通知、内容推送、个性化书目检索和文献互递,极大地提升了服务质量和用户体验。 然而,一般信息用户的需求和期望也在不断演变。他们期望...

    linux基础培训.ppt

    Linux是由芬兰赫尔辛基大学的Linus Torvalds于1991年创建的一个开源操作系统,它的出现源于Unix系统的演变和发展。Linux操作系统的核心是kernel,它提供了对硬件的控制和资源管理,具有高度稳定性和强大的功能。 ...

    跟我学linux-入门级教程

    根目录(/)下包含了系统的所有部分,如/bin存放基本命令,/etc存储系统配置,/usr包含应用程序,/home是用户的主目录,而/proc和/sys则是虚拟文件系统,反映了系统的运行状态。 为了深入学习,你需要动手实践。...

    Linux常用命令-适合java开发者

    2. **Linux历史**:Linux最初是Linus Torvalds不满MINIX操作系统而创建的个人项目,随着社区的发展,逐渐演变成一个成熟且功能强大的操作系统,广泛应用在服务器、嵌入式设备和桌面环境中。 3. **Linux应用领域**:...

    Unix初學者使用手冊_Unix学习_

    Unix是一种强大的多用户、多任务操作系统,广泛应用于服务器、科研、软件开发等领域。这份手册将带你深入了解Unix的世界。 在Unix学习的过程中,首先需要了解的是Unix的基本概念,包括它的起源、发展以及与Linux和...

    linux入门相关介绍及学习

    Linux 下有许多常用命令,可以帮助用户进行各种操作,例如文件管理、系统监控等。这部分将介绍一些基础的命令以及如何进行简单的系统配置。 ##### 2.1 基础命令 - **ls**:列出当前目录下的文件和目录。 - **cd**...

    奚金鑫-React风格的企业前端技术

    组件化遵循了MV*(Model-View-*)的模式,其中*可以是ViewModel、Controller等,以进一步增强开发效率、可维护性和可扩展性。 在前端框架选择上,文中提到了Angular的MVVM模式,其中包括View、ViewModel、和...

    嵌入式Linux应用程序开发详解

    这些程序后来演变成了Linux的第一个版本——0.0.1版。从那时起,Linus决定将Linux的源代码公开在网络上,这一举动吸引了全球范围内的开发者参与Linux内核的开发工作。 Linux的开放性与FSF(Free Software ...

    linux资源复习

    ### Linux资源复习知识点详解 #### 一、Linux系统概述与安装 **1. 内核版本发布机制:** - **内核版本号规则:** 内核版本由Linux内核社区统一发布,版本号...掌握这些知识点能够帮助用户更好地管理和操作Linux系统。

    嵌入式linux应用程序开发详解

    - **Linux发展概述**:从Linux的起源开始讲起,追溯到1991年Linus Torvalds发布的第一个版本,以及之后它如何逐渐演变成一个全球广泛使用的开源操作系统。 - **Linux作为嵌入式操作系统的优势**: - 开源性:这意味...

Global site tag (gtag.js) - Google Analytics