首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

SSH (Struts2+Spring+Hibernate) 實戰三大痛點:JSP 腳本、富文本換行、圖片存儲最佳實踐

     編輯:程式設計疑難解答

初學 SSH 搭建項目時,常遇到三個實戰問題:JSP 混寫 Java 代碼、數據庫文本前端換行失效、圖片存數據庫還是磁盤。本文給出生產級解決方案。

問題一:JSP 裡寫 Java 代碼怎麼辦?

錯誤做法:在 `index.jsp` 直接 `new Dao()` 查詢並 `session.setAttribute`

正確分層:

// 1. Controller (Struts2 Action)
public class IndexAction extends ActionSupport {
    @Autowired private NewsService newsService;
    private List newsList;
    public String execute() {
        newsList = newsService.getLatest(10);
        return SUCCESS;
    }
    // getter/setter
}

// 2. struts.xml

    /WEB-INF/jsp/index.jsp


// 3. JSP (純展示)

    ${news.title}

核心原則:JSP 僅做展示,業務邏輯在 Service,數據訪問在 DAO,控制器調度。首頁訪問走 `index.action` 而非直接 `index.jsp`。

問題二:富文本內容前端不換行

原因:HTML 忽略換行符,需轉為 `
` 或 CSS `white-space: pre-wrap`

方案對比:

方案優點缺點
存儲時替換 `\n`→`
`
前端直接輸出污染原始數據,編輯困難
前端 CSS `white-space: pre-wrap`保持原始數據,零處理需防 XSS,配合 `escapeXml="false"`
前端 JS 替換渲染可控性強需額外渲染邏輯

推薦:存儲原始文本,前端 `

${news.content}
`,並用 JSTL `fn:escapeXml` 防 XSS。

問題三:圖片存數據庫還是磁盤?

結論:文件存磁盤/對象存儲 (OSS),數據庫存路徑 URL

  • 數據庫存 Blob:備份慢、連接池壓力大、無法 CDN 加速、遷移痛苦
  • 磁盤存儲:`/upload/images/{uuid}.jpg`,DB 存相對路徑
  • 生產環境:直接上傳阿里云 OSS/騰訊云 COS,DB 存完整 URL,享受 CDN、多地域、防盜鏈

上傳代碼片段 (Spring MVC)

@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) {
    String ext = FilenameUtils.getExtension(file.getOriginalFilename());
    String filename = UUID.randomUUID() + "." + ext;
    Path path = Paths.get(uploadDir, filename);
    Files.copy(file.getInputStream(), path);
    return "https://cdn.example.com/" + filename;  // 返回 URL 存 DB
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved