在Java Web项目开发中,html和jsp都是常用的页面类型,很多场景下需要两者同时运行,比如静态页面用html编写,动态交互页面用jsp实现。要实现两者同运行,核心是保证Tomcat等Servlet容器能正确识别两种页面的访问请求,不需要额外的复杂框架支持。

项目基础目录结构搭建
首先需要搭建符合Servlet规范的Web项目目录,这是html和jsp同运行的基础,标准目录结构如下:
- 项目根目录(比如webapp)
- WEB-INF目录(存放配置文件和编译后的class文件)
- WEB-INF/web.xml(项目核心配置文件)
- WEB-INF/classes(存放编译后的Java类)
- WEB-INF/lib(存放项目依赖的jar包)
- 直接放在根目录下的html文件(比如index.html)
- 直接放在根目录下的jsp文件(比如test.jsp)
web.xml核心配置说明
web.xml是Servlet容器的核心配置文件,默认情况下Tomcat会处理jsp的请求,但如果没有特殊配置,部分html请求可能会被拦截或者无法正确转发,我们可以通过配置默认Servlet和欢迎页来保证两者都能正常访问。
以下是一个适配html和jsp同运行的web.xml配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- 配置欢迎页,同时支持html和jsp作为默认首页 -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 默认Servlet配置,处理静态html等静态资源请求 -->
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 映射默认Servlet处理html等静态资源 -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<!-- jsp Servlet是Tomcat默认自带的,不需要额外配置,默认映射*.jsp请求 -->
</web-app>
页面编写与访问测试
html页面示例
在webapp根目录下创建index.html,内容如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>静态html页面</title>
</head>
<body>
<h3>这是html静态页面</h3>
<p>点击跳转到jsp页面:<a href="test.jsp">前往test.jsp</a></p>
</body>
</html>
jsp页面示例
在webapp根目录下创建test.jsp,内容如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp动态页面</title>
</head>
<body>
<h3>这是jsp动态页面</h3>
<p>当前时间是:<%= new java.util.Date() %></p>
<p>点击跳转到html页面:<a href="index.html">前往index.html</a></p>
</body>
</html>
访问测试步骤
- 将项目部署到Tomcat的webapps目录下,或者直接在IDE中配置Tomcat运行项目
- 启动Tomcat服务器,访问
http://localhost:8080/项目名/,会优先加载index.html页面 - 访问
http://localhost:8080/项目名/test.jsp,可以正常看到jsp页面的动态内容 - 点击两个页面之间的跳转链接,可以正常在html和jsp之间切换,说明两者已经实现同运行
常见问题排查
如果出现html无法访问的情况,首先检查html文件是否放在webapp根目录下,没有误放到WEB-INF目录中,因为WEB-INF下的资源无法直接通过浏览器访问。如果jsp无法访问,检查jsp文件语法是否正确,是否有编译错误。如果路径跳转失败,检查链接的href属性是否写对了相对路径,避免路径层级错误导致404问题。