SMBMS
数据库:
项目如何搭建?
考虑使用不使用Maven?使用Maven就要添加依赖,不使用就要导jar包。
项目搭建
-
搭建一个maven web项目
-
配置Tomcat
-
测试项目是否能够跑起来
-
导入项目中的jar包
-
创建项目包结构
-
编写实体类;
ORM映射:表-类映射
-
编写基础公共类
- 数据库配置文件
dirver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306?useUnicode=true&characterEncoding=utf-8 user=root password=123456
-
编写数据库的公共类
package com.feng.dao; import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; //操作数据库的公共类 public class BaseDao { private static String dirver; private static String url; private static String user; private static String password; //静态代码块,类加载的时候就初始化 static{ //拿到配置文件 InputStream in = BaseDao.class.getClassLoader().getResourceAsStream("db.properties"); Properties properties = new Properties(); try { properties.load(in); } catch (IOException e) { e.printStackTrace(); } dirver = properties.getProperty("dirver"); url = properties.getProperty("url"); user = properties.getProperty("user"); password = properties.getProperty("password"); //获取连接 try { Class.forName(dirver); } catch (ClassNotFoundException e) { e.printStackTrace(); } } //获取数据库的操作对象 public static Connection getConnection(){ Connection connection =null; try { connection = DriverManager.getConnection(url, user, password); } catch (SQLException throwables) { throwables.printStackTrace(); } return connection; } //编写查询的公共方法 public static ResultSet queryResultSet(Connection connection,String sql,Object[] objects,PreparedStatement statement,ResultSet resultSet ) throws SQLException { statement = connection.prepareStatement(sql); for (int i = 0; i < objects.length; i++) { statement.setObject(i-1,objects[i]); } resultSet = statement.executeQuery(); return resultSet; } //编写增删改的公共方法 public static int updateResultSet(Connection connection,String sql,Object[] objects,PreparedStatement statement ) throws SQLException { statement = connection.prepareStatement(sql); for (int i = 0; i < objects.length; i++) { statement.setObject(i-1,objects[i]); } int i = statement.executeUpdate(); return i; } //关闭资源 public static boolean close(Connection connection,PreparedStatement statement,ResultSet resultSet){ boolean flag = false; if (connection!=null){ try { connection.close(); } catch (SQLException throwables) { throwables.printStackTrace(); flag = false; } } if (statement!=null){ try { statement.close(); } catch (SQLException throwables) { throwables.printStackTrace(); flag = false; } } if (resultSet!=null){ try { resultSet.close(); } catch (SQLException throwables) { throwables.printStackTrace(); flag = false; } } return true; } }
-
编写字符编码过滤器
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) servletResponse; HttpServletRequest request = (HttpServletRequest) servletRequest; request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html"); //过滤之后让它们继续往下走 filterChain.doFilter(request,response); }
-
导入静态资源
登录功能实现
-
编写前端页面
-
设置首页
<!--设置欢迎页面--> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list>
-
编写dao接口
public interface UserDao { //从数据库中拿到一个用户(包含此用户的所有的信息) public User getLoginUser(Connection connection ,String userCode) throws SQLException; }
-
编写dao接口的实现类
package com.feng.dao.user; import com.feng.dao.BaseDao; import com.feng.pojo.User; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class UserDaneImp1 implements UserDao{ public User getLoginUser(Connection connection, String userCode) throws SQLException { PreparedStatement statement = null; ResultSet resultSet = null; User user =null; String sql ="select * from smbms_user where userCode = ?"; Object[] objects = {userCode}; resultSet = BaseDao.queryResultSet(connection, sql, objects, statement, resultSet); //拿出集合中用户的信息 if (resultSet!=null){ //new一个用户 user = new User(); user.setId(resultSet.getInt("id")); user.setUserCode(resultSet.getString("userCode")); user.setUserName(resultSet.getString("userName")); user.setUserPassword(resultSet.getString("userPassword")); user.setGender(resultSet.getInt("gender")); user.setBirthday(resultSet.getDate("birthday")); user.setPhone(resultSet.getString("phone")); user.setAddress(resultSet.getString("address")); user.setUserRole(resultSet.getInt("userRole")); user.setCreateBy(resultSet.getInt("createBy")); user.setCreationDate(resultSet.getDate("creationDate")); user.setModifyBy(resultSet.getInt("modifyBy")); user.setModifyDate(resultSet.getDate("modifyDate")); } return user; } }
-
业务层接口
public interface UserService { //用户登录 public User login(String userCode,String userPassword); }
-
业务层实现类
package com.feng.service.user; import com.feng.dao.BaseDao; import com.feng.dao.user.UserDaoImp1; import com.feng.dao.user.UserDao; import com.feng.pojo.User; import org.junit.Test; import java.sql.Connection; import java.sql.SQLException; public class UserServiceImp1 implements UserService{ //业务层肯定要去调用dao层从而来获取数据库中的数据 //引入 UserDao类 private UserDao userDao; //构造中引入这个类,下面就可以随时使用了 public UserServiceImp1() { userDao = new UserDaoImp1(); } public User login(String userCode, String userPassword) { Connection connection = BaseDao.getConnection(); User user =null; try { //通过dao层的UserDaoImp1类中的getLoginUser方法,获得用户的所有信息。 user = userDao.getLoginUser(connection, userCode); } catch (SQLException throwables) { throwables.printStackTrace(); } BaseDao.close(connection,null,null); return user; } //测试一下 @Test public void test01(){ UserServiceImp1 userServiceImp1 = new UserServiceImp1(); User user = userServiceImp1.login("admin", "1654a"); System.out.println(user.getUserPassword()); } }
-
编写Servlet
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取用户名和密码 String userCode = req.getParameter("userCode"); String userPassword = req.getParameter("userPassword"); //查人 UserServiceImp1 serviceImp1 = new UserServiceImp1(); User user = serviceImp1.login(userCode, userPassword);\ //判断 if(user!=null){ //将用户的信息放到Session中,这地方可以用一个常量 req.getSession().setAttribute(Constants.USER_SESSION,user);//将用户的所有的信息 都放进去 //跳转到主页 resp.sendRedirect("jsp/frame.jsp"); }else {//查无此人 //转发回登录页面,并且提示它,用户名或密码错误 req.setAttribute("error","用户名或密码不正确"); req.getRequestDispatcher("login.jsp").forward(req,resp); } }
-
注册Servlet
<!--Servlet--> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.feng.servlet.user.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login.do</url-pattern> </servlet-mapping>
-
测试访问,确保以上功能都能使用。