c语言sscanf函数的用法是什么
226
2022-12-01
JavaWeb中Filter增强使用
Filter 和 ThreadLocal 组合管理事务:
事物:
public class TransactionFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChainfilterChain) throws IOException, ServletException { try { // Filter中主要的事物处理机制 filterChain.doFilter(servletRequest,servletResponse); JdbcUtils.commitAndClose();// 提交事务 } catch (Exception e) { JdbcUtils.rollbackAndClose();//回滚事务 e.printStackTrace(); } }}
public abstract class BaseDao { //使用 DbUtils 操作数据库 private QueryRunner queryRunner = new QueryRunner(); /** * update() 方法用来执行:Insert\Update\Delete 语句 * @return 如果返回-1,说明执行失败
返回其他表示影响的行数 */ public int update(String sql, Object... args) { Connection connection = JdbcUtils.getConnection(); try { return queryRunner.update(connection, sql, args); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e);// 在所有的Dao中必须将异常抛给Filter }}
public abstract class BaseServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {// 解决 post 请求中文乱码问题// 一定要在获取请求参数之前调用才有效 req.setCharacterEncoding("UTF-8"); String action = req.getParameter("action"); try { // 获取 action 业务鉴别字符串,获取相应的业务 方法反射对象 Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class); // 调用目标业务 方法 method.invoke(this, req, resp); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e);// 把异常抛给 Filter 过滤器 }}}
public class JdbcUtils { private static DruidDataSource dataSource; private static ThreadLocal
有值就是获取连接成功*/public static Connection getConnection(){ Connection conn = conns.get(); if (conn == null) { try { conn = dataSource.getConnection();//从数据库连接池中获取连接 conns.set(conn); // 保存到 ThreadLocal 对象中,供后面的 jdbc 操作使用 conn.setAutoCommit(false); // 设置为手动管理事务 } catch (SQLException e) { e.printStackTrace(); }}return conn;}/*** 提交事务,并关闭释放连接*/public static void commitAndClose(){ Connection connection = conns.get(); if (connection != null) { // 如果不等于 null,说明 之前使用过连接,操作过数据库 try { connection.commit(); // 提交 事务 } catch (SQLException e) { e.printStackTrace(); } finally { try { connection.close(); // 关闭连接,资源资源 } catch (SQLException e) { e.printStackTrace(); } }} // 一定要执行 remove 操作,否则就会出错。(因为 Tomcat 服务器底层使用了线程池技术) conns.remove();}/*** 回滚事务,并关闭释放连接*/public static void rollbackAndClose(){ Connection connection = conns.get(); if (connection != null) { // 如果不等于 null,说明 之前使用过连接,操作过数据库 try { connection.rollback();//回滚事务 } catch (SQLException e) { e.printStackTrace();} finally { try { connection.close(); // 关闭连接,资源资源 } catch (SQLException e) { e.printStackTrace();} }} // 一定要执行 remove 操作,否则就会出错。(因为 Tomcat 服务器底层使用了线程池技术) conns.remove();}}
FIlter中的日志处理:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~