关于JSP页面 报错Unable to compile class for JSP以及jsp引入大文本的解决办法
这两天在公司做项目时,需要将一个较大的页面展示在JSP页面中的一个标签里,由于文档过大。这里提供几个word转html的方法:
(1)office word 转html:
(2)WPS转html:
(3)在线转html
这里附上转换链接:http://www.docpe.com/excel/excel-to-html.aspx
从大小上来看还是在线转比较好,不过转完的html是这样的:
生成的页面类似于压缩的js文件不方便阅读,可以通过格式化工具在线格式化。
格式化链接:http://tool.oschina.net/codeformat/html
jsp中内嵌其他页面的方法一般使用
<%@include file="xxxx.html" %>
这样引入的页面,服务器在解析jsp时,会将页面内容组装进jsp,但由于组装好的jsp文件过大导致无法编译,所以报错
HTTP Status 500 - Unable to compile class for JSP:
tacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:198)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:495)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:363)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:338)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:325)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:580)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:363)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:209)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:267)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1225)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
于是使用了另一个jsp引入其他页面的方法:
<jsp:include flush="true" page="xxx.html"/>
第二种引入可以在jsp编译之后,将静态html页面写入到当前已经写好的jsp页面中。就不会报编译文件过大的错误。
但引入文件后出现了乱码的问题。
网上找了一些解决方法:
在jsp文件头加入头,此方法可以解决当前jsp页面的乱码但无法解决内嵌html页面的问题。
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="utf-8" language="java" %>
在html中加入说明,此方法试了也不管用。。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
这里选用第三种引入页面的方法:
1.引入jstl依赖
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
2.在jsp页面引入c标签
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
3.引入页面,设置编码格式
<c:import url="xxx.html" charEncoding="UTF-8"></c:import>
第三种方式也是jsp编译后,将html加入当前页面中,并且可以在引入时指定编码格式,同时这里的url也可以通过request进行动态配置。
<c:import url="${showmenu.urlName}.html" charEncoding="UTF-8"></c:import>
总结一下三种方法的特征
使用方法 | 导入方式 | 指定编码 | 动态url |
---|---|---|---|
<%@include file="xx.html" %> | 编译jsp时导入 | 是 | 否 |
<jsp:include page="xx.html"/> | 编译后导入 | 否 | 是 |
<c:import url="xx.html"> | 编译后导入 | 是 | 是 |
以上就是我对jsp引入页面的解决办法,也欢迎大佬补充。