问题的描述
初次接触JSP的同学可能会遇到在JSP中使用外部CSS时无效的问题,出现这种问题的本质是因为被访问的CSS文件URL无效。
环境介绍
1. 项目结构如图:
2. result.jsp内容如下:
<%@page import="java.io.IOException"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8 />
<title>Insert title here</title>
<link rel="stylesheet" href="../css/result.css" />
</head>
<body>
<h1> Beer Recommendations JSP</h1>
<p>
<%
List<String> styles = (List<String>)request.getAttribute("styles");
for(String s : styles){
out.print("<br/>try: " + s);
}
%>
<%= basePath %>
</p>
</body>
</html>
问题解答
1. 我们在result.jsp中使用了传统的方式用相对寻址的方式定位CSS文件:<link rel="stylesheet" href="../css/result.css"/>
,这种寻址方式对属于动态页面的JSP来说是行不通的,可行的方式是使用完整的URL来访问CSS文件。
2. 得到服务器基地址的方式: 在result.jsp的<!DOCTYPE thml>
之上输入:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
此时即可生成服务器的基地址,对于本机来说,basePath的值为:http://localhost:8888/html5/
,由这个基地址结合服务器上CSS的存放位置即可得到目标CSS文件的完整URL:http://localhost:8888/html5/css/result.css
。实际填写时应该改为如下形式:
<link rel="stylesheet" href="<%= basePath+"css/result.css" %>"/>
3. 完整的result.jsp内容如下:
<%@page import="java.io.IOException"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8 />
<title>Insert title here</title>
<link rel="stylesheet" href="<%= basePath+"css/result.css" %>" />
</head>
<body>
<h1> Beer Recommendations JSP</h1>
<p>
<%
List<String> styles = (List<String>)request.getAttribute("styles");
for(String s : styles){
out.print("<br/>try: " + s);
}
%>
<%= basePath %>
</p>
</body>
</html>