-
读取 EJB Web 工程中的
web.xml文件 -
解析其中的
<servlet>与<servlet-mapping>对应关系 -
进一步解析 Controller 类与请求路径的对应关系
-
最终导出为 Excel 表格(.xlsx)
⚠️ 注意:
EJB Web 项目的 Controller 通常不是 Spring MVC 的
@Controller,而是 Java EE Servlet,因此解析基于web.xml的 servlet-name 对应 servlet-class。若你的 EJB 中使用 Spring MVC 或其他框架,请告诉我,我可调整解析逻辑。
✅ 最终实现包含以下模块
-
parseWebXml()—— 解析 web.xml -
exportToExcel()—— 使用 Apache POI 导出 Excel -
ControllerMapping—— 映射对象
✅ Maven 依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.4</version>
</dependency>
✅ 映射对象
@Data
@AllArgsConstructor
public class ControllerMapping {
private String servletName;
private String servletClass;
private String urlPattern;
}
✅ 解析 web.xml + 导出 Excel 的完整 Spring Service 示例
@Service
public class WebXmlService {
/**
* 解析 EJB 项目的 web.xml,返回 Controller 与 URL 映射列表
*/
public List<ControllerMapping> parseWebXml(String webXmlPath) {
List<ControllerMapping> mappings = new ArrayList<>();
try {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(new File(webXmlPath));
doc.getDocumentElement().normalize();
NodeList servletNodes = doc.getElementsByTagName("servlet");
NodeList mappingNodes = doc.getElementsByTagName("servlet-mapping");
Map<String, String> servletMap = new HashMap<>(); // servlet-name -> servlet-class
Map<String, String> urlMap = new HashMap<>(); // servlet-name -> url-pattern
// 解析 <servlet>
for (int i = 0; i < servletNodes.getLength(); i++) {
Element element = (Element) servletNodes.item(i);
String name = element.getElementsByTagName("servlet-name").item(0).getTextContent();
String clazz = element.getElementsByTagName("servlet-class").item(0).getTextContent();
servletMap.put(name, clazz);
}
// 解析 <servlet-mapping>
for (int i = 0; i < mappingNodes.getLength(); i++) {
Element element = (Element) mappingNodes.item(i);
String name = element.getElementsByTagName("servlet-name").item(0).getTextContent();
String url = element.getElementsByTagName("url-pattern").item(0).getTextContent();
urlMap.put(name, url);
}
// 整理映射
for (String name : servletMap.keySet()) {
mappings.add(new ControllerMapping(
name,
servletMap.get(name),
urlMap.getOrDefault(name, "N/A")
));
}
} catch (Exception e) {
throw new RuntimeException("解析 web.xml 失败: " + e.getMessage(), e);
}
return mappings;
}
/**
* 导出 Excel
*/
public void exportToExcel(List<ControllerMapping> mappings, String outPath) {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Controller Mapping");
// Header
Row header = sheet.createRow(0);
header.createCell(0).setCellValue("Servlet Name");
header.createCell(1).setCellValue("Servlet Class");
header.createCell(2).setCellValue("URL Pattern");
// Body
int rowNum = 1;
for (ControllerMapping m : mappings) {
Row row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue(m.getServletName());
row.createCell(1).setCellValue(m.getServletClass());
row.createCell(2).setCellValue(m.getUrlPattern());
}
try (FileOutputStream out = new FileOutputStream(outPath)) {
workbook.write(out);
} catch (Exception e) {
throw new RuntimeException("导出 Excel 失败: " + e.getMessage());
}
}
}
✅ Spring Controller 示例(供前端调用)
@RestController
@RequestMapping("/webxml")
public class WebXmlController {
@Autowired
private WebXmlService webXmlService;
@GetMapping("/export")
public String export(@RequestParam String path) {
List<ControllerMapping> list = webXmlService.parseWebXml(path);
webXmlService.exportToExcel(list, "controller-mapping.xlsx");
return "导出成功: controller-mapping.xlsx";
}
}
✅ 输出 Excel 示例
| Servlet Name | Servlet Class | URL Pattern |
|---|---|---|
| userCtrl | com.company.web.UserController | /user/* |
| loginCtrl | com.company.web.LoginServlet | /login |
如你需要,我可以进一步帮助:
✅ 把解析功能扩展为扫描 Spring MVC 的 @Controller
✅ 自动读取 EJB WAR 包内部的 web.xml(无需手动路径)
✅ 输出 CSV、JSON 或直接插入数据库
✅ 生成可视化报表(HTML 页面)
需要吗?
90

被折叠的 条评论
为什么被折叠?



