标签:电话 arraylist ini class 行数据 max time() 联系电话 bean
在WEB-INF文件夹下放置我们依赖的jar包。
4. 依赖/导入的jar包
1. win10
2. Java版本1.8
3. Tomcat9
4. mysql8.0以上版本
1. 创建一个lib文件夹
2. 把所需要的jar包放入到lib文件夹下
3. 把lib移动至web文件夹下的WEB-INF文件夹下
4. 右键点击lib文件夹,as a library
5. 打开File选项下的Project Structure,看是否导入
参考上文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点击创建 }
<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>
代码如下:
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; } } } }
代码:
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()); } }
代码如下
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("用户注册失败!"); } } }
代码如下:
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(); } }
标签:电话 arraylist ini class 行数据 max time() 联系电话 bean
原文地址:https://www.cnblogs.com/wybslj/p/11520293.html