MVC(Model View Controller)
1.概念
MVC模式中,M是指业务模型,V是指用户界面,C则是控制器。其中,View的定义比较清晰,就是用户界面。
M:Model模型。完成具体的业务操作,e.g:查询数据库,封装对象
V:view视图。JSP、PHP、.Net、HTML等来进行数据展示
C:Controller控制器。 Servlet 1.获取View的请求 2.调用模型将数据交给视图进行展示
JSP(Java Server Pages)
1.概念
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
JSP是Servlet的扩展,在没有JSP之前,就已经出现了Servlet技术。Servlet是利用输出流动态生成HTML页面,包括每一个HTML标签和每个在HTML页面中出现的内容。
一、数据库与表的创建(启动php和使用navict)
-- 判断存在即删除数据库
drop database if exists mydb;
-- 创建数据库
create database mydb;
-- 使用数据库
use mydb;
-- 删除重复的表
drop table if exists t_user;
-- 创建t_user表
create table t_user(
uid int primary key auto_increment,
username varchar(20),
password varchar(20),
phone varchar(11),
address varchar(50)
);
-- 新增
insert into t_user(username,password,phone,address)values('张三','666','18965423548','南阳');
insert into t_user(username,password,phone,address)values('李四','333','18754263548','许昌');
insert into t_user(username,password,phone,address)values('小美','123','18565234759','信阳');
-- 查询
#select * from t_user where username=? and password=?
select * from t_user;
二、创建web项目,导入jar包
1.创建与表名相似的实体类放在bean包
package com.chen.bean;
public class User {
private Integer uid;
private String username;
private String password;
private String phone;
private String address;
//无参构造函数
public User() {
}
//set和get方法
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
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;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
//toString方法
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", username='" + username + '\'' +
", password='" + password + '\'' +
", phone='" + phone + '\'' +
", address='" + address + '\'' +
'}';
}
}
2.web中的jsp
index.jsp页面
<html>
<head>
<title>第一个Web项目</title>
</head>
<body>
<h2>欢迎学习Java Web!</h2>
<a href="login.jsp">去登录</a>
</body>
</html>
login.jsp(登录页面 )
<html>
<head>
<title>登录页</title>
</head>
<body>
<h2>登录</h2>
<!--action是表单要提交的地址 method表单提交的方式 -->
<form action="login" method="post">
账户:<input type="text" name="username" value=""> <br>
密码:<input type="password" name="password" value=""> <br>
<input type="submit" value="登录">
<a href="register.jsp">没有账号?点击登录</a>
</form>
</body>
</html>
zhuye.jsp页面
<html>
<head>
<title>主页</title>
</head>
<body>
<h2>欢迎来到主页!</h2>
</body>
</html>
error.jsp(错误页面 )
<html>
<head>
<title>错误页</title>
</head>
<body>
<h2>出错啦!</h2>
<a href="login.jsp">返回登录</a>
</body>
</html>
register.jsp页面(注册页面)
<html>
<head>
<title>注册页</title>
</head>
<body>
<h2>进行注册</h2>
<!--action是表单要提交的地址 method表单提交的方式 -->
<form action="register" method="post">
账户:<input type="text" name="username" value=""> <br>
密码:<input type="password" name="password" value=""> <br>
电话:<input type="text" name="phone" value=""> <br>
地址:<input type="text" name="address" value=""> <br>
<input type="submit" value="注册">
<a href="login.jsp">已有账号?点击注册</a>
</form>
</body>
</html>
3.使用JDBC完成登录
util包中的工具类JDBCUtil抽取公共的部分写入静态方法中便于调用
package com.chen.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JDBCUtil {
private static String driver="com.mysql.cj.jdbc.Driver";
private static String url="jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
private static String user="root";
private static String password="root";
private static Connection con = null;
/**
* 获得数据库连接对象
*/
public static Connection getCon(){
try{
//1.加载驱动包
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获得数据库连接对象
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC","root","root");
}catch(Exception e){
//异常打印
e.printStackTrace();
}
return con;
}
//方法重载
public static void close(ResultSet rs, PreparedStatement pstm,Connection con){
try{
if(rs!=null){
rs.close();
}
if(pstm!=null){
pstm.close();
}
if(con!=null){
con.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void close(PreparedStatement pstm,Connection con){
try{
if(pstm!=null){
pstm.close();
}
if(con!=null){
con.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
dao包
UserDao接口
package com.chen.dao;
import com.chen.bean.User;
public interface UserDao {
User login(String username, String password);
int register(User user);
}
impl包中的UserDaoImpl类继承接口进行查询和新增操作并封装到实体类中(登录和注册)
package com.chen.dao.impl;
import com.chen.bean.User;
import com.chen.dao.UserDao;
import com.chen.util.JDBCUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class UserDaoImpl implements UserDao {
private Connection con = null;//数据库连接对象
private PreparedStatement pstm = null;//预处理对象
private ResultSet rs = null;//结果集对象
private int row =0;
User login = null;
@Override
public User login(String username, String password) {
try {
con= JDBCUtil.getCon();
//3.定义sql语句
String sql = "select * from t_user where username=? and password=?";
//4.获取预处理对象
pstm = con.prepareStatement(sql);
//5.传参
pstm.setObject(1, username);
pstm.setObject(2, password);
//6.执行sql
rs = pstm.executeQuery();
//7.结果集处理
if (rs.next()) {
login = new User();
//从结果集中获取数据,然后封装到实体类对象中
int uid = rs.getInt("uid");
login.setUid(uid);
login.setUsername(rs.getString("username"));
login.setPassword(rs.getString("password"));
login.setPhone(rs.getString("phone"));
login.setAddress(rs.getString("address"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
{
//8.关闭资源
JDBCUtil.close(rs,pstm,con);
}
return login;
}
}
@Override
public int register(User user) {
try{
con= JDBCUtil.getCon();
//定义sql语句
String sql = "insert into t_user(username,password,phone,address)values(?,?,?,?)";
//获取预处理对象
pstm = con.prepareStatement(sql);
//传参
pstm.setObject(1,user.getUsername());
pstm.setObject(2,user.getPassword());
pstm.setObject(3,user.getPhone());
pstm.setObject(4,user.getAddress());
//执行sql
row = pstm.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally {
JDBCUtil.close(pstm,con);
}
return row;
}
}
3.注解配置
servlet包
Login页面
package com.chen.servlet;
import com.chen.bean.User;
import com.chen.dao.UserDao;
import com.chen.dao.impl.UserDaoImpl;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/login")
public class Login extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置请求和响应的编码
request.setCharacterEncoding("utf-8");//设置请求的编码格式
response.setCharacterEncoding("utf-8");//设置响应的编码格式
response.setContentType("text/html;charset=UTF-8");//设置响应的格式为:文本/html;中文编码
//2.获取请求参数
String username = request.getParameter("username");//根据表单的name属性获取用户输入的值
String password = request.getParameter("password");
System.out.println(username);
System.out.println(password);
//3.业务处理-JDBC 给予用户名和密码 返回用户对象
UserDao userDao = new UserDaoImpl();//spring框架自动注入
User login = userDao.login(username, password);
//4.判断业务处理结果,给前端做出响应
if(login!=null){
//登录成功
response.sendRedirect("zhuye.jsp");
}else{
//登录失败
response.sendRedirect("error.jsp");
}
}
}
Register页面
package com.chen.servlet;
import com.chen.bean.User;
import com.chen.dao.UserDao;
import com.chen.dao.impl.UserDaoImpl;
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 java.io.IOException;
@WebServlet("/register")
public class Register extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置请求和响应的编码
request.setCharacterEncoding("utf-8");//设置请求的编码格式
response.setCharacterEncoding("utf-8");//设置响应的编码格式
//2.获取请求参数
String username = request.getParameter("username");//根据表单的name属性获取用户输入的值
String password = request.getParameter("password");
String phone = request.getParameter("phone");
String address = request.getParameter("address");
//封装到User对象中
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setPhone(phone);
user.setAddress(address);
//打印输出
System.out.println(user);
//JDBC操作
UserDao userDao = new UserDaoImpl();
int row = userDao.register(user);
//3.做出响应
if(row>0){
//注册成功
response.sendRedirect("login.jsp");
}else{
//注册失败
response.sendRedirect("register.jsp");
}
}
}
运行后控制台打印日志信息
登录后的控制台打印登录信息
注册后控制台日志打印注册信息
查询表格,注册成功