怎么用 Solon 开发基于 undertow jsp tld 的项目?(新)


Solon 开发 jsp 项目是非常简单的,只要改用 jetty 启动器 或者 undertow 启动器,其它也没特别之处了。此文用 undertow + jsp + tld 这个套路搞一把:

一、 开始Meven配置走起

用solon 做 undertow + jsp 的开发;只需要配置一下 meven 即可(不需要其它的额外处理或启用)

    
        org.noear
        solon-parent
        1.7.2
    
    
    
        
        
            org.noear
            solon-web
            pom
            
                
                
                    org.noear
                    solon.boot.jlhttp
                
            
        

        
        
            org.noear
            solon.boot.undertow
        

        
        
            org.noear
            solon.extend.undertow.jsp
        

        
        
            org.noear
            solon.view.jsp
        


        
            org.projectlombok
            lombok
            1.14.4
            provided
        
    

二、 其它代码和平常开发就差不多了

//资源路径说明(不用配置)
resources/application.properties(或 application.yml) 为应用配置文件
resources/static/ 为静态文件根目标
resources/WEB-INF/view/ 为视图文件根目标(支持多视图共存)

//调试模式:
启动参数添加:-deubg=1
  • 添加个控制器 src/main/java/webapp/controller/HelloworldController.java
@Controller
public class HelloworldController {

    //这里注入个配置
    @Inject("${custom.user}")
    protected String user;

    @Mapping("/helloworld")
    public ModelAndView helloworld(Context 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 = Context.current().path();

            //当前视图path
            StringBuffer sb = new StringBuffer();
            sb.append("
"); sb.append("我是自定义标签,FooterTag;当前path=").append(path); sb.append("
"); 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" ?>


    自定义标签库
    1.1
    ct
    /tags

    
        footer
        webapp.widget.FooterTag
        empty
    


  • 视图 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" %>


    ${title}


context path: ${ctx.path()}
properties: custom.user :${user}
${m.name} : ${message} (我想静静

三、 疑问

一路上没有web.xml ? 是的,没有。

四、 源码

源码:demo05.solon_mvc_undertow_jsp