功能描述:用户输入登录信息提交给Servlet进行接收,Servlet接收到请求内容后进行验证然后根据验证结果跳转到相应页面。
MVC是一个框架模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet + javabean的模式。
建立数据库为后面登录做数据准备:
create table tbl_user(
id int(11) unsigned not null auto_increment,
name varchar(50) not null default '',
password varchar(50) not null default '',
primary key (id));
insert into tbl_user(id,name,password)
values
(1,'huge','jingxiongdi'),
(2,'huojianhua','baidoufu');
整体架构图:
各部分代码实现:
模型层: (javabean)
定义VO类即User.java,类中属性与数据表中一一对应
package com.vo;
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;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + "]";
}
}
定义DAO接口即UserDao.java
这里定义了一个需要参数类型为Connection 和User,返回类型为ResultSet的方法。
package com.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.vo.User;
public interface UserDao {
public ResultSet find(Connection conn,User user)throws SQLException;
}
定义DAO实现类即UserDaoImpl.java
方法功能:根据传入的数据进行查询,并返回查询结果。
package com.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.dao.UserDao;
import com.vo.User;
public class UserDaoImpl implements UserDao{
@Override
public ResultSet find(Connection conn, User user) throws SQLException {
PreparedStatement ps=conn.
prepareStatement("select * from tbl_user where name=?and password=?");
ps.setString(1, user.getName());
ps.setString(2, user.getPassword());
return ps.executeQuery();
}
}
定义CheckUserService.java
连接数据库,并且定义判断方法。如果查询结果有值就说明原本数据库中的存在该对应的账号与密码,验证通过,否则验证失败。
package com.service;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.dao.UserDao;
import com.dao.impl.UserDaoImpl;
import com.vo.User;
public class CheckUserService {
private UserDao oneuser=new UserDaoImpl();
public boolean check(User user){
Connection conn=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql:"
+ "//localhost:3306/mvc_db","root","");
ResultSet rs=oneuser.find(conn, user);//得到查询结果
while(rs.next()){
return true;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return false;
}
}
控制层(Servlet):CheckServlet.java
接收数据,查询,判断。根据判断结果跳转至相应页面。
package com.servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.service.CheckUserService;
import com.vo.User;
public class CheckServlet extends HttpServlet {
private CheckUserService cus=new CheckUserService();
public CheckServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String usn=request.getParameter("userName");
String psw=request.getParameter("passWord");
RequestDispatcher rd=null;
String forward=null;
if(usn==null||psw==null){
rd=request.getRequestDispatcher("/01/error.jsp");
rd.forward(request, response);
}else{
User user=new User();
user.setName(usn);
user.setPassword(psw);
boolean bl=cus.check(user);
if(bl){
forward="/01/success.jsp";
}else{
forward="/01/error.jsp";
}
rd=request.getRequestDispatcher(forward);
rd.forward(request, response);
}
}
}
web.xml配置
<servlet>
<servlet-name>CheckServlet</servlet-name>
<servlet-class>com.servlet.CheckServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CheckServlet</servlet-name>
<url-pattern>/check</url-pattern>
</servlet-mapping>
显示层(JSP):
login.jsp
<body>
<form action="<%=request.getContextPath()%>/check" method="post">
用户名:<input type="text" name="userName"><br>
密 码:<input type="password" name="passWord"><br>
<input type="submit" value="登录">
<input type="reset" value="重置">
</form>
</body>
success.jsp
<body>
登陆成功!<br>
用户名:<%=request.getParameter("userName")%><br>
<a href="01/login.jsp">返回登录页面</a>
</body>
error.jsp
<body>
登陆失败!<br>
用户名或密码错误<br>
<a href="01/login.jsp">重新登录</a>
</body>