Servlet项目index.html文件出现Stray 'html'起始标签错误求助
解决Servlet项目中index.html的Stray 'html'起始标签错误
问题根源分析
你遇到的这个错误,核心原因有两个:
- 你在index.html文件里写了JSP的
page指令(<%@ page ... %>),但.html文件默认不会被服务器当作JSP文件解析,这个指令会被直接当作普通文本输出到页面里。浏览器解析HTML时,会发现<html>标签前面有不属于HTML结构的内容,因此判定<html>是多余的(stray)标签。 - 你的JSP指令语法也有问题:属性之间应该用空格分隔,而不是分号。你写的
contentType = "text/html"; charset = "UTF-8" language = "java"里,把contentType内部参数的分隔(这个是对的,用分号)和属性之间的分隔搞混了,属性之间用分号是错误写法。
具体解决方案
方案1:修改文件扩展名(推荐)
直接把index.html改名为index.jsp,这样服务器会先解析JSP指令,不会把它输出到页面中,同时修正JSP指令的语法:<%@ page contentType="text/html; charset=UTF-8" language="java" %> <html> <head> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <!-- Optional theme --> <link rel="stylesheet" ...>这样浏览器拿到的就是标准的HTML结构,不会再报stray标签错误。
方案2:配置服务器让.html文件支持JSP解析(不推荐)
如果一定要保留.html扩展名,可以在项目的web.xml里添加映射,让服务器把.html文件交给JSP Servlet处理。比如Tomcat的配置:<servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping>但这种方法会让所有.html文件都被当作JSP处理,可能引发不必要的问题,所以优先推荐方案1。
额外注意点
- 确保你的JSP指令没有语法错误,属性之间用空格分隔,
contentType的内部参数(比如charset)才用分号分隔。 - 检查页面其他部分有没有未闭合的标签或者不符合HTML规范的写法,这些也可能导致类似的解析错误。
内容的提问来源于stack exchange,提问作者Mikita Kazlouski
相关产品推荐
相关产品推荐

