使用mac的split view还是比较爽,可以一边编写代码,一边写blog,遇到问题就可以记录下来。要是10年前开始有笔记的习惯就好了,当年年少不懂事,现在正当年,亡羊补牢,希望不晚。
以前习惯使用eclipse,win10下面使用idea,跑我的程序,也可以跑起来,但mac下面不知道为啥就出现下面的错误。
这个错误咋看一下,挺熟悉,无非告诉你jstl的标签他不认识,也就是说没有加载进去,可以在网上找的很多的办法,都没有解决方案。苦恼中。
org.apache.jasper.JasperException: /WEB-INF/views/include/taglib.jsp(2,61) PWC6188: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:92)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:378)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:172)
at org.apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:431)
at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:240)
at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:502)
at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:582)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1652)
at org.apache.jasper.compiler.Parser.parse(Parser.java:185)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:161)
at org.apache.jasper.compiler.Parser.processIncludeDirective(Parser.java:394)
at org.apache.jasper.compiler.Parser.parseIncludeDirective(Parser.java:431)
at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:574)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1652)
at org.apache.jasper.compiler.Parser.parse(Parser.java:185)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:145)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:212)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:625)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:492)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.JspPropertyGroupServlet.service(JspPropertyGroupServlet.java:132)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:276)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:103)
对比mac和win10下面的差别
但是mac下面却是这样的
有上面可以看出,既没有spring,也没有facets可以配置。如果有,还可以参考Intellij Idea识别Java Web项目
没有spring的问题很好解决,按照下面的操作,勾选spring support
就可以了。
没有web选项,研究了一下,是没有Java EE:Java Server Faces
,选上重启就可以了
这些配置完毕后,可以,注意下面两个目录要配置正确
即使按照上面的配置,启动仍然出现错误,真是纠结。。
接着我尝试直接使用maven中jetty:run启动,正常解决
配置
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.5.v20170502</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<httpConnector>
<port>8097</port>
</httpConnector>
<webApp>
<contextPath>/fay</contextPath>
</webApp>
</configuration>
</plugin>
按照上面的配置,感觉还是不爽,因为速度太慢了,这样的速度估计没几个人原因等。
[INFO] Started @69605ms
[INFO] Started Jetty Server
[INFO] Using Non-Native Java sun.nio.fs.PollingWatchService
[WARNING] Quiet Time is too low for non-native WatchService [sun.nio.fs.PollingWatchService]: 1000 < 5000 ms (defaulting to 5000 ms)
查了一下,mvn jetty:run 启动很慢解决办法,虽然文章里面时jetty8,但是在jetty9也一样适用,作者并没有写明确metadata-complete="true"
如下所示
<web-app id="WebApp_ID" version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true">
jetty-contexts.xml所在的位置并没有强制要求
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Call name="setAttribute">
<Arg>org.eclipse.jetty.server.webapp.WebInfIncludeJarPattern</Arg>
<Arg>.*/.*jsp-api-[^/]\.jar$|./.*jsp-[^/]\.jar$|./.*taglibs[^/]*\.jar$
</Arg>
</Call>
</Configure>
pom中defaultsDescriptor并不需要写,只是描述而已
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.5.v20170502</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<httpConnector>
<port>8097</port>
</httpConnector>
<contextXml>src/test/resources/jetty/jetty-contexts.xml</contextXml>
<webApp>
<contextPath>/fay</contextPath>
</webApp>
</configuration>
</plugin>
配置完毕后,jetty启动超级快。不过这个时候,如果用了<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
,会提示找不到,应该是web.xml增加了metadata-complete="true"
导致,还好现在很少有项目这么使用,我就懒得去探究了。