1.6 jetty-server 下开发

1、创建标准的 maven 项目

与 jfinal undertow 相关小节完全一样

2、添加 jetty server 与 jfinal 依赖

  1. <dependency>
  2.     <groupId>com.jfinal</groupId>
  3.     <artifactId>jfinal</artifactId>
  4.     <version>4.9</version>
  5. </dependency>
  6.  
  7. <dependency>
  8.     <groupId>com.jfinal</groupId>
  9.     <artifactId>jetty-server</artifactId>
  10.     <version>2019.3</version>
  11.     <scope>provided</scope>
  12. </dependency>
  13.  
  14. <!-- 下面的依赖仅在使用 JSP 时才需要 -->
  15. <dependency>
  16.     <groupId>org.eclipse.jetty</groupId>
  17.     <artifactId>jetty-jsp</artifactId>
  18.     <version>9.2.26.v20180806</version>
  19.     <scope>provided</scope>
  20. </dependency>

jetty-server 依赖的 scope 为 provided,仅用于开发阶段,部署时不需要,打包时也会自动跳过。

这里特别注意一下:如果是使用 IDEA 开发,scope 仍然得设置成为 compile,否则提示缺少 jar 包,在打包的时候记得要改回 provided,避免打进一些不需要的 jar 包

3、添加 java 文件

与 jfinal undertow 相关小节几乎一样,仅仅是 main 方法中的内容有所不同,如下:

  1. public static void main(String[] args) {
  2.     JFinal.start("src/main/webapp", 80, "/", 5);
  3. }

4、 web.xml 中添加 JFinalFilter

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  3.   <display-name>jfinal offical website</display-name>
  4.   
  5.   <filter>
  6.     <filter-name>jfinal</filter-name>
  7.     <filter-class>com.jfinal.core.JFinalFilter</filter-class>
  8.     <init-param>
  9.        <param-name>configClass</param-name>
  10.        <param-value>demo.DemoConfig</param-value>
  11.     </init-param>
  12.   </filter>
  13.   
  14.   <filter-mapping>
  15.     <filter-name>jfinal</filter-name>
  16.     <url-pattern>/*</url-pattern>
  17.   </filter-mapping>
  18.  
  19. </web-app>

jetty-server、tomcat 下开发需要配置上述 xml 文件。

5、启动项目

与 jfinal undertow 相关小节完全一样

6、开启浏览器看效果

与 jfinal undertow 相关小节完全一样

7、常见问题解决:

1:出现 NoClassDefFoundError 异常

原因之一是 maven 本地库下载的 jar 文件数据有错误。看一下异常中是哪个类文件抛出的 NoClassDefFoundError,在本地 maven 库中删掉其目录,让 maven 从中心库中重新下载一次即可,例如使用的 jfinal-3.6 版本,就删掉 maven repository 中的 /com/jfinal/jfinal 目录下面的 3.6 子目录。

原因之二是对同一个 jar 包,引入了多个不同版本,删掉其中多余的即可

以上问题本质上与 jfinal 无关,纯属 Java 开发时碰到的基础性异常