怎麼用 Solon 開發基於 undertow jsp tld 的專案?
阿新 • • 發佈:2020-08-07
Solon
開發 jsp
還是簡單的,可以有 jetty
啟動器 或者 undertow
啟動器。此文用 undertow + jsp + tld
這個套路搞一把:
一、 開始Meven配置走起
用solon 做 undertow + jsp 的開發;只需要配置一下 meven 即可(不需要其它的額外處理或啟用)
<parent> <groupId>org.noear</groupId> <artifactId>solon-parent</artifactId> <version>1.0.9</version> <relativePath /> </parent> <dependencies> <!-- 新增 solon web 開發包 --> <dependency> <groupId>org.noear</groupId> <artifactId>solon-web</artifactId> <type>pom</type> <exclusions> <!-- 排除預設的 jlhttp 啟動器 --> <exclusion> <groupId>org.noear</groupId> <artifactId>solon.boot.jlhttp</artifactId> </exclusion> </exclusions> </dependency> <!-- 新增 undertow 啟動器 --> <dependency> <groupId>org.noear</groupId> <artifactId>solon.boot.undertow</artifactId> </dependency> <!-- 新增 undertow jsp 擴充套件支援包 --> <dependency> <groupId>org.noear</groupId> <artifactId>solon.extend.undertow.jsp</artifactId> <type>pom</type> </dependency> <!-- 新增 jsp 檢視渲染器 --> <dependency> <groupId>org.noear</groupId> <artifactId>solon.view.jsp</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.14.4</version> <scope>provided</scope> </dependency> </dependencies>
二、 其它程式碼和平常開發就差不多了
//資源路徑說明(不用配置)
resources/application.properties(或 application.yml) 為應用配置檔案
resources/static/ 為靜態檔案根目標
resources/WEB-INF/view/ 為檢視檔案根目標(支援多檢視共存)
//除錯模式:
啟動引數新增:-deubg=1
- 添加個控制器
src/main/java/webapp/controller/HelloworldController.java
@XController public class HelloworldController { //這裡注入個配置 @XInject("${custom.user}") protected String user; @XMapping("/helloworld") public ModelAndView helloworld(XContext ctx){ UserModel m = new UserModel(); m.setId(10); m.setName("劉之西東"); m.setSex(1); ModelAndView vm = new ModelAndView("helloworld.jsp"); //如果是ftl模板,把字尾改為:.ftl 即可 vm.put("title","demo"); vm.put("message","hello world!"); vm.put("m",m); vm.put("user", user); vm.put("ctx",ctx); return vm; } }
- 再搞個自定義標籤
src/main/java/webapp/widget/FooterTag.java
(對jsp來說,這個演示很重要)
public class FooterTag extends TagSupport { @Override public int doStartTag() throws JspException { try { String path = XContext.current().path(); //當前檢視path StringBuffer sb = new StringBuffer(); sb.append("<footer>"); sb.append("我是自定義標籤,FooterTag;當前path=").append(path); sb.append("</footer>"); pageContext.getOut().write(sb.toString()); } catch (Exception e){ e.printStackTrace(); } return super.doStartTag(); } @Override public int doEndTag() throws JspException { return super.doEndTag(); } }
- 加tld描述檔案
src/main/resources/WEB-INF/tags.tld
(位置別亂改,就放這兒...)
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
<description>自定義標籤庫</description>
<tlib-version>1.1</tlib-version>
<short-name>ct</short-name>
<uri>/tags</uri>
<tag>
<name>footer</name>
<tag-class>webapp.widget.FooterTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
- 檢視
src/main/resources/WEB-INF/view/helloworld.jsp
<%@ page import="java.util.Random" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="ct" uri="/tags" %>
<html>
<head>
<title>${title}</title>
</head>
<body>
<div>
context path: ${ctx.path()}
</div>
<div>
properties: custom.user :${user}
</div>
<main>
${m.name} : ${message} (我想<a href="/jinjin.htm">靜靜</a>)
</main>
<ct:footer/>
</body>
</html>