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

来源:互联网 发布:php环境文件管理器 编辑:程序博客网 时间:2024/05/22 07:49

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 0