多模块maven项目—前端录入显示信息
一.要求
1.创建一个名为servlet_Exam的多模块maven项目, 其中有三个子模块分别为
1) 基础模块servlet_pojo
2) 基础模块servlet_dao
3) web模块servlet_web
2.设置其依赖关系:
servlet_web 依赖 servlet_dao
servlet_dao 依赖 servlet_pojo
3.子模块功能实现说明
1) 基础模块servlet_pojo
在该模块内定义一个bean,名称为User;
其相应的属性: id(整型) name(字符串) age(整型) gender(字符) birthday(日期) hobbies(字符串数组)
2) 基础模块servlet_dao
说明: 1. 数据库使用mysql数据库
2.创建一张User表, 表中的字段分别为:
1.id 序号
2.name 姓名
3.age 年龄
4.gender 性别
5.birthday 生日
6.hobbies 兴趣爱好
7.createtime 创建时间(日期类型)
8.updatetime 修改时间(日期类型)
该模块主要用于定义数据库相关操作类与方法
该模块分别创建两个类: a. DBUtil b. UserDao
a. DBUtil
在该类中封装jdbc连接mysql数据库方法(1. 数据库驱动获取方法 2.数据库关闭方法)
b. UserDao
在该类中封装:
1) 一个插入User对象到数据表的方法
实现要求:
1.createtime与updatetime两个字段值为当前时间,使用字符串固定值
2.插入的数据字符串类型使用中文
3.id为自动生成(对顺序无要求)
2) 一个通过id来得到相应User对象的方法
3) web模块servlet_web
该模块用于前台展示信息
1.在index.jsp页面中定义一个form表单,该表单需要向后台传递
用户信息
要求: 1)使用post方式
2)action: “insert.do”
2.创建一个InsertServlet类,继承HttpServlet类
在该类相关方法中实现从前台获取数据,传递给Dao层进行插入
备注: a. 请求路径: http://localhost:8088/insert.do
b. 需要处理中文问题
c. 插入成功,向前台返回"数据已成功录入!"
3.创建一个home.jsp页面
该页面定义一个form表单,用于输入用户id查询相应用户信息
要求: 1)使用get方式
2)action: “update.do”
4.创建一个UpdateServlet类,继承HttpServlet类
该类用于返回用户信息
要求: 1) 如果查询到了用户,就将信息返回至前台
2) 如果查询不到用户,就向前台返回"该用户不存在"
4.git提交
1) 在码云创建名为"Servlet_Exam"的仓库,仓库设置为公开仓库而非私有;
2) 并使用remote方式将本地仓库与远程仓库进行连接;
3) 在本地创建.gitignore文件并对其进行配置;
.gitignore配置要求:
只允许上传 “.java” “.xml” “.jsp” “.html”
4) 将本地项目上传至远程仓库
二.创建项目
首先创建servlet_Exam的maven项目(我的项目名字是Exam)
接着创建子模块项目
servlet_pojo 和 servlet_dao 模块和创建servlet_Exam一样
servlet_web创建时有所区别
创建完成后的项目
注意: 要把主项目也就是Exam项目里的src文件删除
三.设置其依赖关系
包括所需的jar包地址
包含的jar包有
Exam的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.huawei</groupId>
<artifactId>Exam</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>servlet_pojo</module>
<module>servlet_dao</module>
<module>servlet_web</module>
</modules>
<!-- 所有的父级项目都是pom的打包方式 -->
<packaging>pom</packaging>
<name>Exam</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--jar包地址-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--要和自己的mysql数据库版本一致-->
<version>8.0.26</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
servlet_pojo的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Exam</artifactId>
<groupId>com.huawei</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>servlet_pojo</artifactId>
<name>servlet_pojo</name>
</project>
servlet_dao的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.huawei</groupId>
<artifactId>servlet_dao</artifactId>
<version>1.0-SNAPSHOT</version>
<name>servlet_dao</name>
<dependencies>
<dependency>
<groupId>com.huawei</groupId>
<artifactId>servlet_pojo</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
servlet_web的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>Exam</artifactId>
<groupId>com.huawei</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>servlet_web</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.huawei</groupId>
<artifactId>servlet_dao</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
四.编写servlet_pojo模块
bea层
User
package com.huawei.bean;
import com.huawei.util.Tools;
import java.util.Arrays;
import java.util.Date;
/**
* model 或bean 模型类 一般和数据库表一致
* @date 2022/5/7 14:05
*/
public class User {
private int id;
private String name;
private int age;
private char gender;
private Date birthday;
private String[] hobbies;
public User() {
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String[] getHobbies() {
return hobbies;
}
public String getHobbie(){
String str= Tools.arrayToString(this.hobbies);
return str;
}
public void setHobbies(String[] hobbies) {
this.hobbies = hobbies;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
", birthday=" + birthday +
", hobbies=" + Arrays.toString(hobbies) +
'}';
}
}
util层
Tools
package com.huawei.util;
/**
* 工具类
* 数组转为字符串
* @date 2022/5/9 11:37
*/
public class Tools {
public static String arrayToString(String[] strs){
String str="";
for (String s:strs) {
str+=s+",";
}
str=str.substring(0,str.length()-1);
return str;
}
}
五.编写servlet_dao模块
建表
首先在mysql数据库选择一个库,然后创建一个user表
create table user (
id int primary key not null auto_increment,
name varchar(10) not null,
age int(3) ,
gender char(2),
birthday date,
hobbies varchar(50),
createtime datetime,
updatetime datetime
);
util层
DBUtil
package com.huawei.util;
import java.sql.*;
/**
* jdbc连接数据库工具类
* @date 2022/5/9 9:48
*/
public class DBUtil {
//注意:test_0507为数据库名
public static String url = "jdbc:mysql://localhost:3306/test_0507";
//注意:高版本的JDBC驱动, mysql-connector-java 8以上版本
//JDBC driver 由"com.mysql.jdbc.Driver"改为"com.mysql.cj.jdbc.Driver"
public static String drive = "com.mysql.cj.jdbc.Driver";
/**
* 初始化
*/
static {
try {
Class.forName(drive);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 建立数据库连接
* @return
*/
public static Connection getConnection() {
try {
return DriverManager.getConnection(url, "root", "123456");
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 关闭资源方法
* @param rs
* @param st
* @param conn
*/
public static void close(ResultSet rs,Statement st,Connection conn){
if (rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (st!=null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 测试是否能够成功连接
* @param args
*/
public static void main(String[] args) {
Connection connection=getConnection();
System.out.println(connection);
}
}
Tools
package com.huawei.util;
/**
* 工具类
* 数组转为字符串
* @date 2022/5/9 11:37
*/
public class Tools {
public static String arrayToString(String[] strs){
String str="";
for (String s:strs) {
str+=s+",";
}
str=str.substring(0,str.length()-1);
return str;
}
}
dao层
UserDao
package com.huawei.dao;
import com.huawei.bean.User;
import com.huawei.util.DBUtil;
import com.huawei.util.Tools;
import java.sql.*;
/**
* 对User类进行插入和查询操作
* @date 2022/5/9 10:23
*/
public class UserDao {
/**
* 插入方法
* @param user
* @return
*/
public int insert(User user) {
int n = 0;
//sql语句
String sql = "insert into user(name,age,gender,birthday,hobbies,createtime) values(?,?,?,?,?,now())";
//初始化连接
Connection conn = DBUtil.getConnection();
PreparedStatement pst = null;
try {
pst = conn.prepareStatement(sql);
pst.setString(1, user.getName());
pst.setInt(2, user.getAge());
pst.setString(3, user.getGender() + "");
pst.setDate(4, new Date(user.getBirthday().getTime()));
pst.setString(5, Tools.arrayToString(user.getHobbies()));
n = pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(null, pst, conn);
}
return n;
}
/**
* 查询方法
* @param id
* @return
*/
public User findUserById(int id) {
User user = null;
String sql = "select * from user where id=?";
Connection conn = DBUtil.getConnection();
PreparedStatement pst = null;
ResultSet rs = null;
try {
pst = conn.prepareStatement(sql);
pst.setInt(1, id);
rs = pst.executeQuery();
while (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
user.setGender(rs.getString("gender").charAt(0));
user.setBirthday(rs.getDate("birthday"));
user.setHobbies(rs.getString("hobbies").split(","));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(rs, pst, conn);
}
return user;
}
}
六.编写servlet_web模块
servlet层
InsertServlet
package com.huawei.servlet;
import com.huawei.bean.User;
import com.huawei.dao.UserDao;
import com.huawei.util.DateTools;
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;
/**
* 从前台获取数据,传递给Dao层进行插入
* @date 2022/5/9 13:59
*/
//insert.do必须和index.jsp的action值一致
@WebServlet("/insert.do")
public class InsertServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=UTF-8");
User user = new User();
//获取姓名并设置User对象姓名
String name = req.getParameter("name");
user.setName(name);
//获取年龄并设置年龄
String age = req.getParameter("age");
if (age != null && !age.equals("")) {
//如果有值就设置获取的值
int age1 = Integer.parseInt(age);
user.setAge(age1);
} else {
//如果没有则设置为18
user.setAge(18);
}
//获取性别并设置User对象性别
char gender = req.getParameter("gender").charAt(0);
user.setGender(gender);
//获取生日并判断处理
String birthday =req.getParameter("birthday");
user.setBirthday(DateTools.dateStrToDate(birthday));
//获取爱好并设置User对象爱好
String[] hobbies = req.getParameterValues("hobbies");
user.setHobbies(hobbies);
UserDao userDao=new UserDao();
if (userDao.insert(user)>=1) {
resp.getWriter().println("数据已成功录入");
} else {
resp.getWriter().println("数据录入失败");
}
}
}
UpdateServlet
package com.huawei.servlet;
import com.huawei.bean.User;
import com.huawei.dao.UserDao;
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;
/**
* 查询返回用户信息
* @avthor HuangJun
* @date 2022/5/9 14:46
*/
//update.do必须和home.jsp的action值一致
@WebServlet("/update.do")
public class UpdateServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=UTF-8");
//获取id值
String idStr=req.getParameter("id");
int id=0;
//如果不为空,就转为int类型
if (idStr!=null&&!idStr.equals("")){
id=Integer.parseInt(idStr);
}
UserDao userDao=new UserDao();
User user=userDao.findUserById(id);
//如果不为空值, 就将数据返回给show.jsp
if (user!=null){
req.setAttribute("User",user);
req.getRequestDispatcher("/show.jsp").forward(req,resp);
}else{
resp.getWriter().println("该用户不存在!!");
}
}
}
util层
DateTools
package com.huawei.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 时间处理工具类
* @date 2022/5/9 14:20
*/
public class DateTools {
/**
* 将时间字符串转为时间对象
* @param dt
* @return
*/
public static Date dateStrToDate(String dt){
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
date =sdf.parse(dt);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
webapp
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
<meta charset="UTF-8">
<title>用户注册</title>
</head>
<body>
<h2>用户注册</h2>
<form action="insert.do" method="post">
请输入姓名:<input name="name"><br>
请输入年龄:<input name="age"><br>
请输入性别:<input name="gender" type="radio" value="男">男<input name="gender" type="radio" value="女">女<br>
请输入生日:<input type="date" name="birthday"><br>
请输入爱好:<input type="checkbox" name="hobbies" value="看书">看书
<input type="checkbox" name="hobbies" value="踢足球">踢足球
<input type="checkbox" name="hobbies" value="玩游戏">玩游戏<br>
<input type="submit"><br>
</form>
</body>
</html>
home.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
<meta charset="UTF-8">
<title>查询</title>
</head>
<body>
<form action="update.do" method="get">
请输入编号:<input name="id"><br>
<input type="submit">
</form>
</body>
</html>
show.jsp
<%@ page import="com.huawei.bean.User" %>
<%@ page import="java.util.Arrays" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%-- 注意: isELIgnored="false"表示页面不忽略EL表达式--%>
<%-- isELIgnored是默认为true的, EL表达式会被忽略--%>
<html>
<head>
<meta charset="UTF-8">
<title>用户信息</title>
</head>
<body>
<h3>
<%--普通获取值的写法--%>
<%
User user = (User) request.getAttribute("User");
%>
用户名:<%=user.getName()%><br>
年龄:<%=user.getAge()%><br>
性别:<%=user.getGender()%><br>
生日:<%=user.getBirthday()%><br>
爱好:<%=Arrays.toString(user.getHobbies())%><br>
<hr>
<%--EL表达式写法--%>
用户名:${User.name}<br>
年龄:${User.age}<br>
性别:${User.gender}<br>
生日:${User.birthday}<br>
爱好:${User.hobbie}<br>
</h3>
</body>
</html>
配置tomcat服务器
七.git提交项目
创建远程仓库
在gitee上创建一个远程仓库
配置过虑文件
项目关联git
项目与远程仓库建立连接
提交项目
add文件
commit文件
push文件