利用struts2实现从数据库获取登录信息验证的应用

     Struts是Apache软件组织提供的一项开源项目,作为系统整体基础的架构,负责MVC的分离,它的模型部分控制业务跳转,负责在表示层展现数据对象中的数据。Struts为WEB应用提供了一个通用的框架,使开发人员可以把精力集中在如何解决实际业务问题上。struts2相比struts来说是一个全新的框架,它是基于Webwork的一种技术框架。

    此小程序主要是利用struts2进行将用户名和密码存放在数据库中进行登录验证。开发工具为myeclipse10,数据库为mysql,中间件为tomcat。

    首先在myeclipse中新建一个web项目,命名为LoginData。然后右击所创建的项目选址myeclipse–>Add struts capabilities,出现添加struts的对话框,选择struts2.1,然后默认完成。添加mysql-connnection-java-5.0-bin.jar包,以便连接数据库。

    本项目主要构成如下:

                登录页面:loginview.jsp;    登录成功页面:success.jsp;    登录失败页面:failure.jsp;控制类:mycontrol.Control.java;模型类:mymodel.Model.java;乱码处理类:myfilter.EncodingFilter.java  实体类:myentity.User.java;    数据库连接类:mydbutil.DbConnection.java;

项目结构如下所示:

《利用struts2实现从数据库获取登录信息验证的应用》

首先将jsp页面创建出来。

            inputview.jsp主要用作登录界面,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>登录首页</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>
<!-- 本页面为用户登录页面 -->
<body>
	<div align="center">
		<h2>用户登录</h2>
		<form action="Login" method="post">
		<!-- 此处的适合控制器中的值关联的,username,userpassword。 -->
			用户名:<input id="username" name="username" type="text" /> 
			密码:<input	id="userpassword" name="userpassword" type="password" />
			<input type="submit" value="登陆" /><br />
		</form>
	</div>
</body>
</html>

    success.jsp登陆成功页面,代码如下

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>登录成功!</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>
<!-- 该页面为登录成功后的页面 -->
<body>
	<marquee>
		欢迎来到登录成功页面!<br />=*==**==*=
	</marquee>
	<div align="center">
		<h2>您好,欢迎来到本空间</h2>
	</div>
</body>
</html>

failure.jsp登录失败页面,代码如下

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>登录失败!</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>
<!-- 该页面为登录成功后的页面 -->
<body>
	<div align="center">
		<h1>登录失败</h1>
	</div>
	<a href="inputview.jsp">返回上一层</a>
</body>
</html>

   然后创建实体类User.java

package myentity;

public class User {

    // 用来获取登录所用的用户名和密码
	private int id;
	private String name;
	private String password;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}

数据库连接程序DbConnection.java,代码如下

package mydbutil;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DbConnection {
	private Connection conn;

	public Connection getConnection() throws SQLException {

		try {
			// 加载驱动程序
			Class.forName("com.mysql.jdbc.Driver");
			// 获取连接地址和用户名密码
			conn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/myweb", "root", "root");
		} catch (ClassNotFoundException e) {
			System.out.println("找不到服务!!");
			e.printStackTrace();
		}
		return conn;
	}
	// 关闭所有连接操作,保证所有连接都可以关闭
	public void closeAll(Connection conn, PreparedStatement ps, ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {

				e.printStackTrace();
			} finally {
				if (ps != null) {
					try {
						ps.close();
					} catch (SQLException e) {

						e.printStackTrace();
					} finally {
						if (conn != null) {
							try {
								conn.close();
							} catch (SQLException e) {

								e.printStackTrace();
							}
						}
					}
				}
			}
		}
	}
}

业务模型层Model.java,代码如下

package mymodel;
/**
 * 本类为登录应用的模型层
 */
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import mydbutil.DbConnection;
import myentity.User;

public class Model {
	public Model() {
	}

	User user = new User();

	public boolean checkUser(String name, String pwd) {
		user = this.queryByName(name);

		if (user != null) {
			// 控制器ServletControl中的n、p接收到jsp页面传过来的usernamepassword值,然后把它赋值给n=name,p=pwd
			return (name.equals(user.getName()) && pwd.equals(user
					.getPassword()));// 此句是将控制器接收到的值和实体类User中的数据进行比较
		} else {
			return false;
		}
	}

	// 获取连接
	private PreparedStatement ps;
	private ResultSet rs;
	Connection conn = null;
	DbConnection s = new DbConnection();

	public User queryByName(String rname) {
		User user = null;
		// 根据用户名查询密码
		String sql = "select * from user where name = ?";
		try {
			Connection conn = s.getConnection();
			ps = conn.prepareStatement(sql);
			ps.setString(1, rname);
			rs = ps.executeQuery();
			if (rs.next()) {
				user = new User();
				user.setId(rs.getInt("id"));
				user.setName(rs.getString("name"));
				user.setPassword(rs.getString("password"));
			}
			// 关闭所有连接
			s.closeAll(conn, ps, rs);
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 返回到调用处
		return user;
	}

}

控制类Control.java,代码如下

package mycontrol;

import java.io.IOException;

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

import mymodel.Model;

/**
 * 本类为登录页面的控制类
 * 
 * @author Administrator
 * 
 */
public class Control extends HttpServlet {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public Control() {
		super();
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// 设置默认的编码为gbk
		req.setCharacterEncoding("GBK");
		String n = req.getParameter("username");// 此处的name和password是和servletControl关联的
		String p = req.getParameter("userpassword");
		Model model = new Model();
		// 控制跳转的页面
		if (model.checkUser(n, p)) {
			resp.sendRedirect("successview.jsp");
		} else {
			resp.sendRedirect("failure.jsp");
		}
	}
}

所用sql语句:

drop database  if exist myweb;

create database myweb;

user myweb;

create table user(
	id tinyint not null auto_increment primary key,
	username varchar(20) not null,
	userpwd varchar(20) not null
); 

SHOW VARIABLES LIKE 'CHARACTER%';
ALTER TABLE users CHARACTER SET gbk; 

insert into user values(1,'admin','admin');
insert into user values(2,'client','client');

乱码处理过滤器类:EncodingFilter.java,代码如下

package myfilter;
/**
 * 解决乱码问题的类
 */
import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {
	private String charset=null;
	public void destroy() {
		

	}

	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
			req.setCharacterEncoding(this.charset); // 设置默认编码
			chain.doFilter(req, resp);

	}

	public void init(FilterConfig arg0) throws ServletException {
		// 此处如果不加引号”charset“会出现空指向异常
		this.charset=arg0.getInitParameter("charset");

	}

}

web配置如下

<?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">
  <display-name></display-name>	
  <welcome-file-list>
    <welcome-file>inputview.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
  	<servlet-name>Login</servlet-name>
  	<servlet-class>mycontrol.Control</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>Login</servlet-name>
  	<url-pattern>/Control</url-pattern>
  </servlet-mapping>
  <!-- 设置乱码处理 -->
  <filter>
		<filter-name>encoding</filter-name>
		<filter-class>
			myfilter.EncodingFilter
		</filter-class>
		<init-param>
			<param-name>charset</param-name>
			<param-value>GBK</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
  </web-app>

然后将其部署到Tomcat上进行测试,这里我使用的是Tomcat7.0。测试结果如下:

《利用struts2实现从数据库获取登录信息验证的应用》

《利用struts2实现从数据库获取登录信息验证的应用》

《利用struts2实现从数据库获取登录信息验证的应用》

 

    原文作者:数据库基础
    原文地址: https://my.oschina.net/u/2997116/blog/779077
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞