JavaWeb项目(书城idea)---注册
Posted wybslj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb项目(书城idea)---注册相关的知识,希望对你有一定的参考价值。
一、创建一个项目
1. 创建之后的文件结构
2. src文件夹下的结构 项目的后端代码
3. web文件夹 放置前端代码
在WEB-INF文件夹下放置我们依赖的jar包。
4. 依赖/导入的jar包
二、使用环境
1. win10
2. Java版本1.8
3. Tomcat9
4. mysql8.0以上版本
三、导入所需要的jar包
1. 创建一个lib文件夹
2. 把所需要的jar包放入到lib文件夹下
3. 把lib移动至web文件夹下的WEB-INF文件夹下
4. 右键点击lib文件夹,as a library
5. 打开File选项下的Project Structure,看是否导入
四、 实现注册功能
1. 建立一个模型(model):在model文件夹下创建User类 里面是用户的私有属性 以及 属性的get、set方法和类的toString方法
参考上文src文件夹结构
在src文件夹下的model文件夹下创建一个User类。 并为每个属性添加get、set方法以及toString()方法
具体内容:
package com.gyf.bookstore.model; import java.util.Date; /** * 用户表 */ public class User private int id; // 编号 private String username; // 姓名 private String password; // 密码 private String gender; // 性别 private String email; // 邮箱 private String telephone; // 联系电话 private String introduce; // 介绍 private String activeCode; // 激活码 private String role; // 用户角色 private int state; // 状态 private Date registTime; // 注册时间
创建每个属性的get、set方法:alt + insert 看见getter和setter点击 之后ctrl + a全选 点击ok
以及toString()方法:alt+insert 看到toString点击创建
2. dao 操作数据库(c3p0)使用c3p0:首先创建一个xml配置连接mysql的信息,然后在utils文件夹下创建C3P0Util的工具类(主要是连接和关闭和mysql的连接),之后在dao文件夹下创建一个UserDao增删改查(目前之后增加,因为注册用户)
1. 在src文件夹下创建一个c3p0-config.xml:表示idea怎么连接mysql数据库
<c3p0-config> <default-config> <!-- 必要参数 --> <property name="driverClass">com.mysql.cj.jdbc.Driver(这是mysql8.0以上版本连接)</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/bookstore(这是数据库的名称)(请务必加上后面的内容不然后报错)?useSSL=false&serverTimezone=UTC</property> <property name="user">mysql(账户)</property> <property name="password">mysql(密码)</property> <!-- 下面不是必要的参数 --> <property name="initialPoolSize">10</property> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> <property name="minPoolSize">10</property> <property name="maxStatements">200</property> </default-config> </c3p0-config>
2. 在utils文件夹下创建一个C3P0Utils的工具类
代码如下:
package com.gyf.bookstore.utils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3P0Utils private static DataSource ds = new ComboPooledDataSource(); /** * 返回数据源(数据池) * @return */ public static DataSource getDataSource() return ds; /** * 返回一个连接 * @return */ public static Connection getConnection() try return ds.getConnection(); catch (SQLException e) // TODO Auto-generated catch block throw new RuntimeException("服务器错误"); public static void closeAll(Connection conn,Statement statement,ResultSet resultSet) if(resultSet != null) try resultSet.close(); catch (SQLException e) // TODO Auto-generated catch block e.printStackTrace(); resultSet = null; if(statement != null) try statement.close(); catch (SQLException e) // TODO Auto-generated catch block e.printStackTrace(); statement = null; if(conn != null) try conn.close(); catch (SQLException e) // TODO Auto-generated catch block e.printStackTrace(); conn = null;
3. 在dao文件夹下,创建一个UserDao类,与数据库进行数据交互。
代码:
package com.gyf.bookstore.dao; import com.gyf.bookstore.model.User; import com.gyf.bookstore.utils.C3P0Utils; import org.apache.commons.dbutils.QueryRunner; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; /** * UserDao类 * 在真正的项目开发中,实现创建一个接口,然后去实现。 * 这里是为了省时间 */ public class UserDao /** * 添加一个用户 * * @param user */ /* public void addUser(User user) throws SQLException // 1. 获取(使用dbutil)QueryRunner QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); // 在utils包下的C3P0Utils类下的方法 返回数据源 // 2. sql语句 String sql = "insert into user"; sql += " username,PASSWORD,gender,email,telephone,introduce,activeCode,state,role,registTime)"; sql += " values(?,?,?,?,?,?,?,?,?,?)"; // 3. 参数 // 第一种方式 // Object[] prams = new Object[10]; // parms[0]* // 第二种 List<Object> list = new ArrayList<Object>(); list.add(user.getUsername()); list.add(user.getPassword()); list.add(user.getGender()); list.add(user.getEmail()); list.add(user.getTelephone()); list.add(user.getIntroduce()); list.add(user.getActiveCode()); list.add(user.getState()); list.add(user.getRole()); list.add(user.getRegistTime()); // 4. 执行sql语句 qr.update(sql,list.toArray()); */ public void addUser(User user) throws SQLException QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); String sql = "INSERT INTO user " + "(username,PASSWORD,gender,email,telephone,introduce,activeCode,state,role,registTime) " + "VALUES (?,?,?,?,?,?,?,?,?,?)"; qr.update(sql, user.getUsername(), user.getPassword(), user.getGender(), user.getEmail(), user.getTelephone(), user.getIntroduce(), user.getActiveCode(), user.getState(), user.getRole(), user.getRegistTime());
3. service 通过这个UserService类 调用userDao的addUser()方法向数据库添加用户
代码如下
package com.gyf.bookstore.service; import com.gyf.bookstore.dao.UserDao; import com.gyf.bookstore.exception.UserException; import com.gyf.bookstore.model.User; import java.sql.SQLException; public class UserService // 创建DAO UserDao userDao = new UserDao(); public void register(User user) throws UserException try userDao.addUser(user); catch (SQLException e) e.printStackTrace(); throw new UserException("用户注册失败!");
4. UserServlet 用户通过表单提交的数据在这里被处理。符合要求,注册信息添加到数据库(UserService类中的register添加[register使用了UserDao类里的addUser()方法,addUser用到了C3P0Util类里的方法]),并跳转到注册成功界面。不符合要求,重新返回到注册界面。
代码如下:
package com.gyf.bookstore.web.servlet; import com.gyf.bookstore.exception.UserException; import com.gyf.bookstore.model.User; import com.gyf.bookstore.service.UserService; import org.apache.commons.beanutils.BeanUtils; 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; import java.util.Date; import java.util.UUID; @WebServlet("/register") public class RegisterServlet extends HttpServlet @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException super.doGet(req, resp); @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException // 解决乱码问题 req.setCharacterEncoding("UTF-8"); // 简化:写一个filter拦截请求 // 1. 把参数转成Bean model User user = new User(); try BeanUtils.populate(user, req.getParameterMap()); System.out.println(user); // 给无数据的属性赋值 user.setActiveCode(UUID.randomUUID().toString()); //激活码 user.setRole("普通用户"); //角色 user.setRegistTime(new Date()); System.out.println(user); // 2. 注册 UserService us = new UserService(); us.register(user); // 3. 返回结果 //3.1 成功-成功页面 req.getRequestDispatcher("/registersuccess.jsp").forward(req,resp); catch (UserException e) e.printStackTrace(); //3.2 失败-注册页面 req.setAttribute("register_error",e.getMessage()+"用户名不存在"); req.getRequestDispatcher("/register.jsp").forward(req,resp); catch (Exception e) System.out.println("参数转模型失败......"); e.printStackTrace(); // catch (IllegalAccessException e) // e.printStackTrace(); // catch (InvocationTargetException e) // e.printStackTrace(); //
目前,就接触到这种程度。此外还在 src文件下 的 exception文件夹 下创建 一个UserException 用来在 UserService类 调用 dao文件夹 下的 UserDao类的addUser()方法时,显示是否插入成功。
还有filter文件夹下的,解决中文乱码问题的MyEncodingFilter类。
代码如下:UserException
package com.gyf.bookstore.exception;
/**
* 自定义异常类
*/
public class UserException extends Exception // Exception 编译异常 RuntimeException 运行异常
/**
* Constructs a new exception with the specified detail message. The
* cause is not initialized, and may subsequently be initialized by
* a call to @link #initCause.
*
* @param message the detail message. The detail message is saved for
* later retrieval by the @link #getMessage() method.
*/
public UserException(String message)
super(message);
MyEncodingFilter.java
package com.gyf.bookstore.web.filter; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Map; import java.util.Map.Entry; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; class MyRequest extends HttpServletRequestWrapper HttpServletRequest request; public MyRequest(HttpServletRequest request) super(request); this.request = request; @Override public String getParameter(String name) // TODO Auto-generated method stub String[] values = getParameterMap().get(name); if(values != null) return values[0]; return null; @Override public String[] getParameterValues(String name) // TODO Auto-generated method stub return getParameterValues(name); @Override public Map<String, String[]> getParameterMap() String method = request.getMethod(); if(method.equalsIgnoreCase("post"))//post请求 try request.setCharacterEncoding("utf-8"); return request.getParameterMap(); catch (UnsupportedEncodingException e) // TODO Auto-generated catch block e.printStackTrace(); else if(method.equalsIgnoreCase("get"))//如果是tomcat8版本以上的就不用写这个了 // TODO Auto-generated method stub Map<String, String[]> map = request.getParameterMap(); //遍历,然后解码回UTF-8 /*for(Entry<String, String[]> entry : map.entrySet()) String[] values = entry.getValue(); for(int i=0;i<values.length;i++) try values[i] = new String(values[i].getBytes("ISO-8859-1"),"utf-8"); System.out.println(values[i]); catch (UnsupportedEncodingException e) // TODO Auto-generated catch block e.printStackTrace(); */ return map; return super.getParameterMap();
以上是关于JavaWeb项目(书城idea)---注册的主要内容,如果未能解决你的问题,请参考以下文章