您现在的位置是:主页 > news > 合肥哪个公司做网站好/成都seo推广员
合肥哪个公司做网站好/成都seo推广员
admin2025/6/26 17:50:46【news】
简介合肥哪个公司做网站好,成都seo推广员,前端开发是程序员吗,国外优秀个人网页设计欣赏实现注册登录:TomcatServletJDBCDAO三层架构动态代理设计模式注解log0. 需求图和流程图1. 实体类 Entity2. 封装数据层 Dao2.0 数据库连接池:配置文件 连接工具类2.1 接口 UserinfoDao2.2 实现类 UserifoDaoImpl3. 业务逻辑层 Service3.0 日志管理&…
合肥哪个公司做网站好,成都seo推广员,前端开发是程序员吗,国外优秀个人网页设计欣赏实现注册登录:TomcatServletJDBCDAO三层架构动态代理设计模式注解log0. 需求图和流程图1. 实体类 Entity2. 封装数据层 Dao2.0 数据库连接池:配置文件 连接工具类2.1 接口 UserinfoDao2.2 实现类 UserifoDaoImpl3. 业务逻辑层 Service3.0 日志管理&…
实现注册登录:Tomcat+Servlet+JDBC+DAO三层架构+动态代理设计模式+注解log
- 0. 需求图和流程图
- 1. 实体类 Entity
- 2. 封装数据层 Dao
- 2.0 数据库连接池:配置文件 + 连接工具类
- 2.1 接口 UserinfoDao
- 2.2 实现类 UserifoDaoImpl
- 3. 业务逻辑层 Service
- 3.0 日志管理:注解 + 动态代理 + 日期工具类
- 3.1 接口 UserinfoService
- 3.2 实现类 UserinfoServiceImpl
- 4. 请求和响应处理 Servlet
- 4.1 注册 register
- 4.2 登录 login
- 4.3 用户中心 user
- 5. 表示层页面 WebPage
- 5.1 index.html
- 5.2 register.html
- 5.3 login.html
- 6. 运行结果示例图
- 6.1 日志记录
- 6.2 页面操作
- 6.3 数据库数据
0. 需求图和流程图
功能需求图:
整体框架图:
键来!~
1. 实体类 Entity
package com.demo.entity;
public class Userinfo {private String username;private String password;public Userinfo() {}public Userinfo(String username, String password) {this.username = username;this.password = password;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "Userinfo{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}
2. 封装数据层 Dao
2.0 数据库连接池:配置文件 + 连接工具类
# 数据库配置
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/companydb?useUnicode=true&characterEncoding=utf-8
username=root
password=123456
# 初始化连接数
initialSize=10
# 最大连接数
maxActive=50
# 最小空闲连接数
minIdle=5
# 超时等待时间,单位:毫秒ms
maxWait=5000
package com.demo.utils;
public class DBUtils {private static DruidDataSource druidDataSource = null;private static final ThreadLocal<Connection> THREAD_LOCAL = new ThreadLocal<>();static {Properties ppts = new Properties();InputStream is = DBUtils.class.getClassLoader().getResourceAsStream("database.properties");try {ppts.load(is);druidDataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(ppts);} catch (Exception e) {e.printStackTrace();}}public static DruidDataSource getDruidDataSource() {return druidDataSource;}private static Connection getConnection() {Connection connection = THREAD_LOCAL.get();try {if (null == connection) {connection = getDruidDataSource().getConnection();THREAD_LOCAL.set(connection);}} catch (SQLException e) {e.printStackTrace();}return connection;}public static void begin() {try {getConnection().setAutoCommit(false);} catch (SQLException e) {e.printStackTrace();}}public static void commit() {try {getConnection().commit();} catch (SQLException e) {e.printStackTrace();}}public static void rollback() {try {getConnection().rollback();} catch (SQLException e) {e.printStackTrace();}}public static void release(Connection connection, Statement statement, ResultSet resultSet) {try {if (null != resultSet) {resultSet.close();}if (null != statement) {statement.close();}if (null != connection) {connection.close();}} catch (SQLException e) {e.printStackTrace();}}
}
2.1 接口 UserinfoDao
package com.demo.dao;
public interface UserinfoDao {int insert(Userinfo userinfo);Userinfo delete(int id);int update(Userinfo userinfo);Userinfo search(int id);Userinfo search(String username);
}
2.2 实现类 UserifoDaoImpl
package com.demo.dao.impl;
public class UserinfoDaoImpl implements UserinfoDao {private QueryRunner queryRunner = new QueryRunner(DBUtils.getDruidDataSource());@Overridepublic int insert(Userinfo userinfo) {String sql = "insert into userinfo(username, password) value(?,?)";Object[] params = {userinfo.getUsername(), userinfo.getPassword()};try {return queryRunner.update(sql, params);} catch (SQLException e) {e.printStackTrace();}return 0;}@Overridepublic Userinfo delete(int id) {String sql = "delete from userinfo where id=?";try {return queryRunner.update(sql, id) > 0 ? search(id) : null;} catch (SQLException e) {e.printStackTrace();}return null;}@Overridepublic int update(Userinfo userinfo) {String sql = "update userinfo set username=?,password=? where id=?";Object[] params = {userinfo.getUsername(), userinfo.getPassword()};try {return queryRunner.update(sql, params);} catch (SQLException e) {e.printStackTrace();}return 0;}@Overridepublic Userinfo search(int id) {return doSearch("id", id);}@Overridepublic Userinfo search(String username) {return doSearch("username", username);}private Userinfo doSearch(String param, Object value) {String sql = "select * from userinfo where " + param + "=?";try {return queryRunner.query(sql, new BeanHandler<>(Userinfo.class), value);} catch (SQLException e) {e.printStackTrace();}return null;}
}
3. 业务逻辑层 Service
3.0 日志管理:注解 + 动态代理 + 日期工具类
package com.demo.anno;
@Retention(RetentionPolicy.RUNTIME)
public @interface SysLog {
}
package com.demo.utils;
public class DateUtils {private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");public static String utilToStrDate(java.util.Date date) {return SIMPLE_DATE_FORMAT.format(date);}public static java.util.Date strToUtilDate(String date) {try {return SIMPLE_DATE_FORMAT.parse(date);} catch (ParseException e) {e.printStackTrace();}return null;}public static java.sql.Date utilToSqlDate(java.util.Date date) {return new java.sql.Date(date.getTime());}
}
package com.demo.service.proxy;
public class UserinfoServiceProxy {private UserinfoService userinfoService;public UserinfoServiceProxy(UserinfoService userinfoService) {this.userinfoService = userinfoService;}public UserinfoService getDynamicProxyInstance() {return (UserinfoService) Proxy.newProxyInstance(userinfoService.getClass().getClassLoader(),userinfoService.getClass().getInterfaces(),(proxy, method, args) -> {Object result;boolean present = method.isAnnotationPresent(SysLog.class);if (present) {String strDate = DateUtils.utilToStrDate(new Date());String className = userinfoService.getClass().getName();String methodName = method.getName();System.out.print("[" + strDate + "]|" + className + "|" + methodName + "(");for (Object param : args) {System.out.print(param + ",");}System.out.println(")");result = method.invoke(userinfoService, args);System.out.println("[" + strDate + "]|" + className + "|" + methodName + "() return:" + result);} else {result = method.invoke(userinfoService, args);}return result;});}
}
3.1 接口 UserinfoService
package com.demo.service;
public interface UserinfoService {@SysLogint add(String username, String password);@SysLogUserinfo del(int id);@SysLogint change(Userinfo userinfo);@SysLogUserinfo get(int id);@SysLogboolean login(String username, String password);
}
3.2 实现类 UserinfoServiceImpl
package com.demo.service.impl;
public class UserinfoServiceImpl implements UserinfoService {private UserinfoDao userinfoDao = new UserinfoDaoImpl();@Overridepublic int add(String username, String password) {DBUtils.begin();if (userinfoDao.search(username) != null) {System.out.println("用户名重复,请重试!");return -1;}int result = userinfoDao.insert(new Userinfo(username, password));if (result > 0) {DBUtils.commit();} else {DBUtils.rollback();}return result;}@Overridepublic Userinfo del(int id) {DBUtils.begin();Userinfo userinfo = userinfoDao.delete(id);if (null != userinfo) {DBUtils.commit();} else {DBUtils.rollback();}return userinfo;}@Overridepublic int change(Userinfo userinfo) {DBUtils.begin();int result = userinfoDao.update(userinfo);if (result > 0) {DBUtils.commit();} else {DBUtils.rollback();}return result;}@Overridepublic Userinfo get(int id) {DBUtils.begin();Userinfo userinfo = userinfoDao.search(id);if (null != userinfo) {DBUtils.commit();} else {DBUtils.rollback();}return userinfo;}@Overridepublic boolean login(String username, String password) {DBUtils.begin();Userinfo userSearch = userinfoDao.search(username);if (null != userSearch) {return password.equals(userSearch.getPassword());}return false;}
}
4. 请求和响应处理 Servlet
4.1 注册 register
package com.demo.servlet;
@WebServlet(name = "RegisterServlet", urlPatterns = "/register")
public class RegisterServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");String username = request.getParameter("username");String password = request.getParameter("password");if (username == null || password == null ||username.trim().length() == 0 || password.trim().length() == 0) {regFailed("账号/密码不能为空", response);return;}UserinfoServiceProxy userinfoServiceProxy = new UserinfoServiceProxy(new UserinfoServiceImpl());UserinfoService proxyInstance = userinfoServiceProxy.getDynamicProxyInstance();int addResult = proxyInstance.add(username, password);if (addResult > 0) {response.sendRedirect("/demo55/login/login.html");} else {regFailed("账号已存在", response);}}private void regFailed(String errInfo, HttpServletResponse response) throws IOException {response.getWriter().println(errInfo + ",注册失败!");response.setHeader("refresh", "3;url=/demo55/register/register.html");}
}
4.2 登录 login
package com.demo.servlet;
@WebServlet(name = "LoginServlet", urlPatterns = "/login")
public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");String username = request.getParameter("username");String password = request.getParameter("password");if (username == null || password == null ||username.trim().length() == 0 || password.trim().length() == 0) {loginFailed("账号/密码不能为空", response);return;}UserinfoServiceProxy userinfoServiceProxy = new UserinfoServiceProxy(new UserinfoServiceImpl());UserinfoService proxyInstance = userinfoServiceProxy.getDynamicProxyInstance();if (proxyInstance.login(username, password)) {request.setAttribute("userName", username);request.getRequestDispatcher("/user").forward(request, response);} else {loginFailed("账号/密码有误", response);}}private void loginFailed(String errInfo, HttpServletResponse response) throws IOException {response.getWriter().println(errInfo + ",登陆失败!");response.setHeader("refresh", "3;url=/demo55/login/login.html");}
}
4.3 用户中心 user
package com.demo.servlet;
@WebServlet(name = "UserServlet", urlPatterns = "/user")
public class UserServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");String uName = (String) request.getAttribute("userName");if (null != uName) {PrintWriter writer = response.getWriter();writer.println("<html>");writer.println("<head>");writer.println("<meat charset='utf-8'>");writer.println("</head>");writer.println("<body>");writer.println("<font color=\"red\">" + uName + "</font>,欢迎回来!");writer.println("</body>");writer.println("</html>");}}
}
5. 表示层页面 WebPage
5.1 index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>注册和登陆</title>
</head>
<body>
<h2>请选择需要的功能:</h2>
<a href="register/register.html"><input type="button" value="注册" /></a>
<a href="login/login.html"><input type="button" value="登陆" /></a>
</body>
</html>
5.2 register.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>注册页面</title>
</head>
<body>
<h2>注册:</h2>
<form action="/demo55/register" method="post"><table><tr><td>账号:</td><td><label><input type="text" name="username" placeholder="请输入用户名"/></label></td></tr><tr><td>密码:</td><td><label><input type="password" name="password" placeholder="请输入密码"/></label></td></tr></table><input type="submit" value="注册"/><input type="reset" value="重置"/>
</form>
</body>
</html>
5.3 login.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登陆页面</title>
</head>
<body>
<h2>登陆:</h2>
<form action="/demo55/login" method="post"><table><tr><td>账号:</td><td><label><input type="text" name="username" placeholder="请输入用户名"/></label></td></tr><tr><td>密码:</td><td><label><input type="password" name="password" placeholder="请输入密码"/></label></td></tr></table><input type="submit" value="登陆"/>
</form>
</body>
</html>
6. 运行结果示例图
6.1 日志记录
6.2 页面操作