项目场景:
使用jsp+servlet实现简单的注册登录功能,以及文件格式检测功能。
开发过程:
项目创建
-
选择java工程 -
选择javaSDK版本和tomcat版本(根据自己电脑上的版本进行选择) -
web Application版本选择(版本跟我不一样也没事,问题不大) -
目录结构 -
服务器首次启动 下图为浏览器显示效果 通过url地址,我们发现实际访问的是index.jsp页面 这说明,服务器启动的时候,默认访问的就是index.jsp文件 事实证明,确实如此。浏览器显示的,确实是我们index.jsp中写的内容
MVC编程模式
在讲功能实现的时候,先介绍一下什么叫作MVC
MVC是Move,View,Controller的缩写,代表了三种责任
- Move表示模型:用于存储数据,以及处理用户的业务逻辑
- View表示视图:用于向控制器提交数据,然后显示模型中的数据
- Controller表示控制器:用于接收视图发过来的请求,然后从数据交给模型,讲处理完后的视图发给视图
基于 Servlet 的 MVC 模式的具体实现如下。
-
模型:一个或多个 JavaBean 对象,用于存储数据(实体模型,由 JavaBean 类创建)和处理业务逻辑(业务模型,由一般的 Java 类创建)。 -
视图:一个或多个 JSP 页面,向控制器提交数据和为模型提供数据显示,JSP 页面主要使用 HTML 标记和 JavaBean 标记来显示数据。 -
控制器:一个或多个 Servlet 对象,根据视图提交的请求进行控制,即将请求转发给处理业务逻辑的
详细点的话,我们项目的架构就是下图这样
登录注册功能
思考一下,要怎么实现登录功能呢?
-
第一步,要打开登录页面的网页,然后输入账号密码 -
第二步,当我们点击登录以后,html页面要把我们输入的信息发给服务器 -
第三步,服务器将前端页面传来的用户数据,在数据库中查找 -
第四步,如果数据库中刚好有前端传来的用户数据,那就让登录成功实现
那要怎么实现注册呢
- 第一步,打开注册页面,然后输入要注册的用户名和密码
- 第二步,点击注册之后,html将我们的注册信息交给后台服务器处理
- 第三步,将注册的信息存入数据库
下面让我们来实现这些流程
1 首先要创建一个用户表
这里设置id为自增
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`password` varchar(32) NOT NULL,
`email` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`),
)
先给数据库添加条测试数据 2 构造三层架构
根据我们的架构图,创建出三层架构
- dao层:持久层,用来跟数据库进行交互
- service层:调用持久层,用来处理业务逻辑
- web层:视图层,用来调用service层,同时获取请求参数,封装成Bean
把自己的包目录创建出来 然后创建三层架构所属的包 我们首先在dao层中创建一个userDao接口,用来编写登录和注册的方法
现在返回类型User报红,这是因为我们还没有写相应的Bean对象,所以我们需要再创建一个pojo包,存放我们的Pojo对象
我们创建的UserBean如下
package com.pan.project.pojo;
public class User {
private int id;
private String username;
private String password;
private String email;
public User() {
}
public User(String username, String password, String email) {
this.username = username;
this.password = password;
this.email = email;
}
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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
'}';
}
}
User类对应的是我们创建出来的数据表 Pojo类是用来存储数据的载体,User这个类就是user这个表生成的一个实体类
现在回到我们的dao包中,看看我们的UserDao接口
这时候User已经不报红了 登录的方法写好我们再写一个注册的方法
package com.pan.project.dao;
import com.pan.project.pojo.User;
public interface UserDao {
User findUser(String username, String password);
int save(User user);
}
接口写完之后,我们就要写这个接口的实现类 现在只是重写了两个方法,方法里的内容还没有写。
那要写什么内容呢?
在前面说过,我们dao层是负责与数据库交互的。
所以我们需要在dao层的实现类中做到与数据库连接并进行交互。
数据库连接 1.先写数据库连接的配置文件
username=root
password=root
url=jdbc:mysql://localhost:3306/book?serverTimezone=GMT%2B8
driverClassName=com.mysql.cj.jdbc.Driver
initialSize=5
maxActive=10
此外我们还需要两个jar包,也就是上图jar中的包
- druid:数据库连接池
- mysql-connector-java-8.0 :是MySQL提供的JDBC驱动包,用JDBC连接MySQL数据库时必须使用该jar包
我们现在创建的lib并不能让idea知道这是一个lib包,所以我们需要赋给它权限 一旦将它赋于权限之后,它就是真正的lib包了。包下的jar就会自动解压 连接数据库前的准备做好之后,我么现在就开始写代码进行连接了。
创建一个工具类进行数据库的连接。
package com.pan.project.util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
public class JdbcUtil {
private static DataSource ds;
static {
try{
Properties properties = new Properties();
InputStream t = JdbcUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
properties.load(t);
ds = DruidDataSourceFactory.createDataSource(properties);
}catch (Exception e){
e.printStackTrace();
}
}
public static Connection getConnect() throws SQLException {
return ds.getConnection();
}
}
工具类创建好之后,我们来测试一下,这个工具类是否真能获取连接
往lib包中,丢一个junit的jar包,就可以使用注解@Test进行测试了
package com.pan.project.test;
import com.pan.project.util.JdbcUtil;
import org.junit.Test;
import java.sql.Connection;
import java.sql.SQLException;
public class test {
@Test
public void textGetConnect(){
try {
Connection connection = JdbcUtil.getConnect();
System.out.println(connection);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
说明我的连接能成功获取
(未完待续…)
|