环境
内容
1、采用JSP技术(MVC)实现一个简单的登录功能。
2、能使用JDBC连接MySQL数据库。
步骤
主要过程:
- 首先是登陆界面,在这里输入用户名和密码,然后通过 action 传递到LoginServlet.java ;
- 在LoginServlet.java中,得到用户名密码,创建一个User类的对象,用来存储这个输入的用户信息,然后创建一个UserService类的业务处理的对象,根据这个对象的返回的结果来判断是否返回成功;
- UserService.java中,创建一个连接数据库的对象,根据返回的结果,判断是否连接成功,如果成功,再进行查询操作,将查询的结果返回到上一层;
- DBConn.java中连接数据库的具体步骤,将连接的结果返回给上一层;
登陆的JSP
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>MVC</title>
</head>
<body bgcolor="#E3E3E3">
<form action="loginpost" method="post">
<table>
<caption>
用户登录
</caption>
<tr>
<td>
登录名:
</td>
<td>
<input type="text" name="username" size=”20” />
</td>
</tr>
<tr>
<td>
密码:
</td>
<td>
<input type="password" name="pwd" size=”21” />
</td>
</tr>
</table>
<input type="submit" value="登录" />
<input type="reset" value="重置" />
</form>
</body>
</html>
LoginServlet.java
package cn.edu.ujn.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.edu.ujn.model.User;
import cn.edu.ujn.service.UserService;
@WebServlet("/loginpost")
public class LoginServlet extends HttpServlet{
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("pwd");
try {
//创建用户对象
User u = new User(username,password);
//创建了一个业务处理的对象
UserService uservice = new UserService();
if (uservice.checklogin(u)) {
resp.sendRedirect("success.jsp");
}
else {
req.setAttribute("error", "用户名或者密码输入错误!");//显示错误提示
req.getRequestDispatcher("login.jsp").forward(req, resp);
}
}catch (Exception e) {
}
}
}
User.java
package cn.edu.ujn.model;
public class User {
int id;
String username;
String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
UserService.java
package cn.edu.ujn.service;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import cn.edu.ujn.db.DBConn;
import cn.edu.ujn.model.User;
public class UserService {
public boolean checklogin(User user) throws SQLException
{
DBConn dbOp=new DBConn();
Connection conn=dbOp.getCon();
Statement stmt = null;//创建语句;
ResultSet rs = null;// 结果集;
String u=user.getUsername();
String p=user.getPassword();
String sql = "select * from user where username='"+u+"' and password='"+p+"'";
try {
stmt = conn.createStatement();//创建查询语句;
rs = stmt.executeQuery(sql);//执行查询语句,返回结果集;
if(rs.next())//用户可以登录;
{
user.setId(rs.getInt(1));//设置用户的id;
return true;
}
else //用户不能登录;
{
return false;
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("执行sql语句出错!");
return false;
}finally {
dbOp.CloseCon(conn, stmt, rs);
}
}
}
DBConn.java
package cn.edu.ujn.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBConn {
String url = "jdbc:mysql://localhost:3306/javaee";// MySQL数据库的的url,javaee为数据库文件名称,
String dbun = "root";// MySQL数据库的用户名;
String dbpw = "";// MySQL数据库的密码;
public DBConn() {
}
// 创建数据库连接;
public Connection getCon() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, dbun, dbpw);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
System.out.println("数据库连接失败1!");
}
return conn;// 返回数据库连接对象;
}
public void CloseCon(Connection conn, Statement stat, ResultSet rset) throws SQLException {
if (rset != null)
rset.close();
if (stat != null)
stat.close();
if (conn != null)
conn.close();
}
}
success.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
登录成功!
</body>
</html>
MVC理解
MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。
V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操纵的方式。
M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。