【MVC】使用Servlet 作为控制器实现一个简单的登陆验证

login.jsp 

<body>
<!-- 输出出错提示 -->
<span style="color:red;font-weight:bold">
	<%
	if (request.getAttribute("err") != null)
	{
		out.println(request.getAttribute("err") + "<br/>");
	}
	%>
</span>
请输入用户名和密码:
<!-- 登录表单,该表单提交到一个Servlet -->
<form id="login" method="post" action="login">
	用户名:<input type="text" name="name" /><br/>
	密  码:<input type="password" name="pass"/><br/>
	<input type="submit" value="登录"/><br/>
</form>
</body>

welcome.jsp

<body>
<h3>欢迎登录</h3>
<%=session.getAttribute("name")%>,欢迎登录!
</body>

LoginServlet.java

package servletDemo;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

import java.sql.*;

 
@WebServlet(name="login", urlPatterns={"/login"})
public class LoginServlet extends HttpServlet
{
 
	private static final long serialVersionUID = 1L;

	//响应客户端请求的方法
	public void service(HttpServletRequest request,
		HttpServletResponse response)
		throws ServletException,java.io.IOException
	{
		String errMsg = "";
		//Servlet本身并不输出响应到客户端,因此必须将请求转发
		RequestDispatcher rd;
		//获取请求参数
		String name = request.getParameter("name");
		String pass = request.getParameter("pass");
		try
		{
			//Servlet本身,并不执行任何的业务逻辑处理,它调用JavaBean处理用户请求
			DbDao dd = new DbDao("com.microsoft.sqlserver.jdbc.SQLServerDriver",
				"jdbc:sqlserver://localhost:1433;database = test","sa","1234");
			//查询结果集
			ResultSet rs = dd.query("select pass from user_table "
				+ "where name = ?",name);
			if (rs.next())
			{
				//用户名和密码匹配
				if (rs.getString("pass").equals(pass))
				{
					//获取session对象
					HttpSession session = request.getSession(true);
					//设置session属性,跟踪用户会话状态
					session.setAttribute("name" , name);
					//获取转发对象
					rd = request.getRequestDispatcher("/welcome.jsp");
					//转发请求
					rd.forward(request,response);
				}
				else
				{
					//用户名和密码不匹配时
					errMsg += "您的用户名密码不符合,请重新输入";
				}
			}
			else
			{
				//用户名不存在时
				errMsg += "您的用户名不存在,请先注册";
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();			
		}
		//如果出错,转发到重新登录
		if (errMsg != null && !errMsg.equals(""))
		{
			rd = request.getRequestDispatcher("/login.jsp");		
			request.setAttribute("err" , errMsg);
			rd.forward(request,response);
		}
	}
}

DbDao.java

package servletDemo;

import java.sql.*;

 
public class DbDao 
{
	private Connection conn;
	private String driver;
	private String url;
	private String name;
	private String pass;
	public DbDao()
	{
	}
	public DbDao(String driver , String url 
		, String name , String pass)
	{
		this.driver = driver;
		this.url = url;
		this.name = name;
		this.pass = pass; 
	}
	//下面是各个成员属性的setter和getter方法
	public void setDriver(String driver) {
		this.driver = driver; 
	}
	public void setUrl(String url) {
		this.url = url; 
	}
	public void setName(String name) {
		this.name = name; 
	}
	public void setPass(String pass) {
		this.pass = pass; 
	}
	public String getDriver() {
		return (this.driver); 
	}
	public String getUrl() {
		return (this.url); 
	}
	public String getName() {
		return (this.name); 
	}
	public String getPass() {
		return (this.pass); 
	}
	//获取数据库连接
	public Connection getConnection() throws Exception
	{
		if (conn == null)
		{
			Class.forName(this.driver);
			conn = DriverManager.getConnection(url,name,
				this. pass);
		}
		return conn;
	}
	//插入记录
	public boolean insert(String sql , Object... args)
		throws Exception
	{
		PreparedStatement pstmt = getConnection().prepareStatement(sql);
		for (int i = 0; i < args.length ; i++ )
		{
			pstmt.setObject( i + 1 , args[i]);
		}
		if (pstmt.executeUpdate() != 1)
		{
			return false;
		}
		pstmt.close();
		return true;
	}
	//执行查询
	public ResultSet query(String sql , Object...args) //Object... args 可变参数  JDK1.5特性
		throws Exception
	{
		PreparedStatement pstmt = getConnection().prepareStatement(sql);
		for (int i = 0; i < args.length ; i++ )
		{
			pstmt.setObject( i + 1 , args[i]);
		}
		return pstmt.executeQuery();
	}
	//执行修改
	public void modify(String sql , Object...args)
		throws Exception
	{
		PreparedStatement pstmt = getConnection().prepareStatement(sql);
		for (int i = 0; i < args.length ; i++ )
		{
			pstmt.setObject( i + 1 , args[i]);
		}
		pstmt.executeUpdate();
		pstmt.close();
	}
	//关闭数据库连接的方法
	public void closeConn()
		throws Exception
	{
		if (conn != null && !conn.isClosed())
		{
			conn.close();
		}
	}
}

sql server 2008  

test 数据库下   user_table 表中   两个字段  user  pass 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值