jfinal + undertow 如何支持jsp

因为要集成润乾报表,所以需要用到jsp。

因为润乾报表官方文档说用jsp的方式是最简单最安全的,而用undertow开发确实很爽,所以我在波总的帮助下成功完成了第一步:让undertow支持jsp。

************************************************************************************************

解决办法,按下面步骤:
git clone https://gitee.com/jfinal/jfinal-undertow.git
cd jfinal-undertow
mvn clean install

上面三步就将最新版本安装到你本地了
然后,你将你项目中pom.xml文件的 jfinal-undertow 的版本由 1.9 改成  2.0。

************************************************************************************************

然后修改启动类:(红色部分记得修改为你自己的启动类)

UndertowServer.create(JFinalClubConfig.class)
.configWeb(wb -> {
wb.getDeploymentInfo().addServlet(JspServletBuilder.createServlet("Default Jsp Servlet", "*.jsp"));
   HashMap<String, TagLibraryInfo> tagLibraryInfo = new HashMap<String, TagLibraryInfo>();
   JspServletBuilder.setupDeployment(wb.getDeploymentInfo(), new HashMap<String, JspPropertyGroup>(), tagLibraryInfo,
         new HackInstanceManager());
})
.start();

************************************************************************************************

以下是import内容:

import java.io.File;
import java.sql.Connection;
import java.util.HashMap;
import org.apache.jasper.deploy.JspPropertyGroup;
import org.apache.jasper.deploy.TagLibraryInfo;
import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.wall.WallFilter;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.json.MixedJsonFactory;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.plugin.ehcache.EhCachePlugin;
import com.jfinal.plugin.redis.RedisPlugin;
import com.jfinal.server.undertow.UndertowServer;
import com.jfinal.template.Engine;
import io.undertow.jsp.HackInstanceManager;
import io.undertow.jsp.JspServletBuilder;

************************************************************************************************

然后把jsp文件放入\src\main\webapp下,然后就可以访问了。

感谢波总!


pom.xml 依赖如下:

    <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
              <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>jfinal-undertow</artifactId>
            <version>2.0</version>
        </dependency>
        
    <!-- jsp支持 -->
    <dependency>
       <groupId>io.undertow.jastow</groupId>
       <artifactId>jastow</artifactId>
       <version>2.1.0.Final</version>
       <exclusions>
          <!-- 以下两个包跟jfinal-undertow依赖冲突 -->
          <exclusion>
             <groupId>io.undertow</groupId>
             <artifactId>undertow-servlet</artifactId>
          </exclusion>
          <exclusion>
             <groupId>org.jboss.logging</groupId>
             <artifactId>jboss-logging</artifactId>
          </exclusion>
       </exclusions>
    </dependency>
    <dependency>
       <groupId>org.jboss.spec.javax.servlet.jsp</groupId>
       <artifactId>jboss-jsp-api_2.3_spec</artifactId>
       <version>2.0.0.Final</version>
    </dependency>
    
        
        <dependency>
            <groupId>io.undertow</groupId>
            <artifactId>undertow-websockets-jsr</artifactId>
            <version>2.0.25.Final</version>
        </dependency>
        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>jfinal</artifactId>
            <version>4.7</version>
        </dependency>


还有要记得在配置文件里面打开:

//允许访问jsp
        me.setDenyAccessJsp(false);

评论区

JFinal

2019-11-13 16:33

这是最精简的有关 jfinal undertow 集成 JSP 的分享了,已点赞 + 收藏

再补充一下在 pom.xml 中需要添加的 JSP 依赖就完美了,修改此贴可以直接补充

happyboy

2019-11-13 18:04

看来这个需求还挺多的,^_^

JFinal

2019-11-13 18:14

@happyboy 没想到这个需求这么多,谢谢你的贡献

neo1999

2019-11-13 19:00

shanmine

2019-11-25 16:18

deploymentInfo 这个对象是怎么创建和设置呢?

JFinal

2019-11-25 16:23

@shanmine configWeb 方法自动提供给你的,无需你创建,这样用:
UndertowServer.create(JFinalClubConfig.class)
.configWeb(wb -> {
// 这里可以获取到 deploymentInfo
wb.getDeploymentInfo();
})
.start();

以上代码中的 wb.getDeploymentInfo() 即可获取到 deploymentInfo 对象

JFinal

2019-11-25 16:41

@shanmine 不好意思, 忘了这个功能是在 jfinal-undertow 2.0 才有的,这个版本还未正式发布,需要使用源码自己安装到本地:
https://gitee.com/jfinal/jfinal-undertow

shanmine

2019-11-27 09:34

@JFinal 谢谢,波总,已经clone到本地并安装到了本地的maven

shanmine

2019-11-27 11:25

@JFinal 整理一个demo项目:https://github.com/shanmine/undertow-jsp-demo.git

JFinal

2019-11-27 13:41

@shanmine 谢谢分享,赞

JFinal

2019-12-10 17:10

@neo1999 @shanmine @happyboy

jfinal undertow 2.0 已发布到 maven 中心库,以往针对支持 JSP 的代码可以删掉了,用上 jfinal undertow 2.0 ,直接在 configWeb 中添加配置即可

大苹果

2019-12-20 13:09

JSTL 有办法支持么.

王IT

2020-03-13 10:54

我也是jstl 好像加了tld和 jstl.jar /standard.jar 都不好使

JFinal

2020-03-13 11:42

@大苹果 @王IT 用 jetty server 支持 jstl 比较好,否则要看看 undertow 对 jstl 支持的官方文档

jstl 太古老太难用,所以 undertow 自身不支持 jstl,需要使用第三方扩展

jstl 也就学校与教育机构在教这些过时的东西,早该淘汰了

热门分享

扫码入社