如何在遗留JSP项目中实现分散凭证的模块化管理
方案1:JSP层面模拟条件编译,解决重复导入报错
直接修改你统一提取的createConnection.jsp,加个请求级的初始化标记,即可完全模拟C语言#ifndef的效果,代码如下:
<% // 只有未初始化过才执行核心逻辑 if (request.getAttribute("commonConnInitialized") == null) { // 这里放统一的凭证、连接逻辑 String user = "the user"; String password = "the password"; Connection conn = openJdbcConnection(user, password, etc); // 把连接存到请求属性里,所有导入的页面都能直接获取 request.setAttribute("sharedConn", conn); // 标记已初始化,后续重复导入不会再执行核心代码 request.setAttribute("commonConnInitialized", Boolean.TRUE); } // 所有导入该文件的页面统一从请求属性取连接,不会出现重复定义报错 Connection conn = (Connection) request.getAttribute("sharedConn"); %>
这种方式不需要修改任何现有导入逻辑,直接替换所有零散的createConnection.jsp内容即可,完全兼容老代码,导入多少次都不会出现重复定义错误。
方案2:提取逻辑到Java静态工具类(更推荐,长期维护成本更低)
只需在项目中新增一个普通Java类,放在WEB-INF/classes对应目录下即可,不需要做任何架构调整:
// DBUtil.java package com.yourproject.util; import java.sql.Connection; public class DBUtil { // 凭证统一存在这里,后续可随时扩展为读取WEB-INF下的properties配置文件 private static final String DB_USER = "the user"; private static final String DB_PWD = "the password"; public static Connection getConnection() { // 这里放统一的openJdbcConnection实现逻辑 return openJdbcConnection(DB_USER, DB_PWD); } }
所有JSP需要拿连接的时候,直接导入类调用方法即可:
<%@ page import="com.yourproject.util.DBUtil" %> <% Connection conn = DBUtil.getConnection(); %>
这种方式彻底避免了JSP层面的重复导入问题,后续修改凭证、连接参数只需要改这一个类,零散的旧createConnection.jsp可以逐步替换,不需要一次性全改,完全适配你当前无法整体迁移的情况。
凭证统一优化补充
后续可以把凭证从代码里剥离,放到WEB-INF/db.properties配置文件里,在工具类或者JSP里读取该文件,修改凭证不需要动任何业务代码,进一步降低出错概率。
内容的提问来源于stack exchange,提问作者ejuan
相关产品推荐
相关产品推荐

