要求如下
1. 创建一个名为Exam的多模块maven项目, 其中有三个子模块分别为
1) 基础模块pojo
2) 基础模块dao
3) web模块web
2. 设置其依赖关系: web 依赖 dao
dao 依赖 pojo
3. 子模块功能实现说明
1) 基础模块pojo
在该模块内定义一个bean,名称为User;
其相应的属性: id(整型) name(字符串) age(整型) gender(字符)
birthday(日期) hobbies(字符串数组)
2) 基础模块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模块web
该模块用于前台展示信息
1. 在index.jsp页面中定义一个form表单,该表单需要向后台传递
用户信息
要求: 1)使用post方式
2)action: "insert"
2. 创建一个InsertServlet类,继承HttpServlet类
在该类相关方法中实现从前台获取数据,传递给Dao层进行插入
备注: a. 请求路径: http://localhost:8088/insert
b. 需要处理中文问题
c. 插入成功,向前台返回"数据已成功录入!"
3. 创建一个home.jsp页面
该页面定义一个form表单,用于输入用户id查询相应用户信息
要求: 1)使用get方式
2)action: "update"
4. 创建一个UpdateServlet类,继承HttpServlet类
该类用于返回用户信息
要求: 1) 如果查询到了用户,就将信息返回至前台
2) 如果查询不到用户,就向前台返回"该用户不存在"
4. 1) 在码云创建名为"Exam"的仓库,仓库设置为公开仓库而非私有;
2) 并使用remote方式将本地仓库与远程仓库进行连接;
3) 在本地创建.gitignore文件并对其进行配置;
.gitignore配置要求:
只允许上传 ".java" ".xml" ".jsp" ".html"
4) 将本地项目上传至远程仓库
第一步
新建一个maven项目 名字为Exam 创建成功后 然后再Exam中新建三个子模块,分别为dao,pojo,web(其中web为javaweb模块)
结构如下图所示
建立好结构后就完成了第一步
第二步
在模块之间添加依赖,打开dao模块的pom.xml文件,然后添加如下代码
com.sclw Pojo1.0-SNAPSHOT
这样就完成了dao模块依赖pojo模块
然后打开web模块下的pom.xml文件 添加如下代码
com.sclw
Dao
1.0-SNAPSHOT
把依赖添加完毕后就完成了第二步,
第三步
一 :建立User用户对象的javaBean模型
在pojo模块下的java文件夹中新建一个User类 属性为 id(整型) name(字符串) age(整型) gender(字符) birthday(日期) hobbies(字符串数组)
属性如下
public class User {
private int id;//id
private String name;//名字
private int age;//年龄
private char gender;//性别
private Date birthday;//生日 这里的Date类为java.sql.Date
//因为要与数据库交互,推荐使用个
private String[] hobbies;
//使用代码编辑器生成其属性的get和set方法 以及toString方法
}
二:在mysql数据库中建立一个User表,并编写一个DBUtil连接数据库的工具类以及Userdao类 ,在Dao模块下
建表语句如下:
create table User ( id int primary key,`name` varchar(30),age int ,gender varchar(30), birthday date,hobbies varchar(30),createtime date, updatetime date )
注意.数据表要和User类进行对应
编写DBUtil类 主要用于获取数据库连接对象, 代码如下
public class DBUtil {
//加载驱动 mysql8要使用com.mysql.cj.jdbc.Driver
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConn() {
try {
return DriverManager.getConnection("jdbc:mysql://localhost:3306/employee", "root", "root");
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
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();
}
}
}
}
编写UserDao类,用于对数据库插入数据的方法insert(),和根据id查询数据的方法findUserById() 代码如下
public class UserDao {
public int insert(User user) {
int n = 0;
//sql语句 使用预编译的方式防止sql注入
String sql = "insert into user(name,age,gender,birthday,hobbies,createtime) values(?,?,?,?,?,now())";
//在编写mysql语句时使用now()函数使其值为当前时间
Connection conn = DBUtil.getConn();
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, user.getBirthday());
pst.setString(5, Tools.arrayToString(user.getHobbies()));//新建一个Tools工具类用来吧数组转为字符串
n = pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//调用关闭连接方法
DBUtil.close(null, pst, conn);
}
return n;
}
public User findUserById(int id) {
User user = null;
String sql = "select * from user where id=?";
Connection conn = DBUtil.getConn();
PreparedStatement pst = null;
ResultSet rs = null;
try {
pst = conn.prepareStatement(sql);
pst.setInt(1, id);
rs = pst.executeQuery();
//如果存在数据,则创建User对象 并对其赋值
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));//获取首字母的char值并赋值
user.setBirthday(rs.getDate("birthday"));//因为对应bean模型为sql的
//date,所有不需要进行强转
user.setHobbies(rs.getString("hobbies").split(","));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(rs, pst, conn);
}
return user;
}
}
在这里用到了一个工具类Tools 有一个把数组转为字符串的方法arrayToString() 代码如下
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;
}
}
三:web模块的编写
index.jsp页面的编写
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
用户注册
用户注册
InsertServlet类的编写,用于处理index.jsp页面提交过来的请求,根据插入数据的条数是否大于或等于1判断是否成功插入数据,来进行不同的处理
@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("数据录入失败");
}
}
}
工具类DateTools的编写,用于把字符串转为时间对象
public class DateTools {
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;
}
}
home.jsp类的编写,用于提供查询id是否存在的可视化查询界面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
查询
UpdateServlet类的编写,用于查询是否存在该id的User;
@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");
String idStr=req.getParameter("id");
int id=0;
if (idStr!=null&&!idStr.equals("")){
id=Integer.parseInt(idStr);
}
UserDao userDao=new UserDao();
User user=userDao.findUserById(id);
if (user!=null){
req.setAttribute("User",user);
req.getRequestDispatcher("/show.jsp").forward(req,resp);
}else{//如果不存在则先页面输出用户不存在
resp.getWriter().println("该用户不存在!!");
}
}
}
第四步:在gitee创建仓库并使用git上传,创建仓库后复制该仓库的ssh链接
在idea中点击vcs 在点击第蓝色选项,然后点击ok
编辑.gitignore
添加其过滤规则 用来实现只提交给.jsp .html .xml ..iml 代码如下
现在项目就被git管理 现在文件都为红色标识 这时候需要吧文件添加到暂存区,按照下面的图片依次点击选项
然后点击吧鼠标移到dit 点击Mangage Remotes 会弹出以下页面,点击+号 然后把gitee的shh链接粘贴到URL中,点击ok
然后点击git 再点击使用commit提交文件 填写提交信息,然后再次点击commit提交
提交完成后再次点击push 会弹出一下界面,选择第一次commit的信息 然后点击push
这样就提交完成了



