Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JSP生成具有非JSP扩展的内容页?_Java_Jsp_Glassfish - Fatal编程技术网

Java 如何使用JSP生成具有非JSP扩展的内容页?

Java 如何使用JSP生成具有非JSP扩展的内容页?,java,jsp,glassfish,Java,Jsp,Glassfish,我正在开发一个web应用程序,部署在最新的Glassfish服务器上 为了使应用程序与不同的上下文根(如“/apps/myapp/”)兼容,我需要动态生成其中的CSS文件 问题是这些页面没有像JSP文件那样处理,所以我不能使用。我知道我可以使用带有内容类型头的JSP文件来模拟CSS文件,但我更喜欢在其上使用CSS扩展名 有没有可能让Glassfish将非JSP文件视为JSP文件?如果您没有太多CSS文件可处理,您可以为每个CSS文件添加一个servlet映射,该映射将重定向到servlet并呈现

我正在开发一个web应用程序,部署在最新的Glassfish服务器上

为了使应用程序与不同的上下文根(如“/apps/myapp/”)兼容,我需要动态生成其中的CSS文件

问题是这些页面没有像JSP文件那样处理,所以我不能使用
。我知道我可以使用带有内容类型头的JSP文件来模拟CSS文件,但我更喜欢在其上使用CSS扩展名


有没有可能让Glassfish将非JSP文件视为JSP文件?

如果您没有太多CSS文件可处理,您可以为每个CSS文件添加一个servlet映射,该映射将重定向到servlet并呈现JSP。

这很简单,我以前做过,效果很好

只需将要映射的扩展映射到jspservlet即可

JSP和其他任何东西一样,由servlet处理。他们没有什么特别之处

因此,对于Glassfish,这个servlet恰好被命名为“jsp”。我不知道它是否是可移植的(即名称),但它可能在Glassfish和Tomcat中运行,也可能在任何使用Jasper JSP编译器的地方运行

在Glassfish中,它是在$Glassfish\u domain\u dir/config/default-web.xml中定义的

因此,将其添加到web.xml中

<web-app version="2.5" 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_2_5.xsd">    
  <servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.css</url-pattern>
  </servlet-mapping>
</web-app>

jsp
*.css

很好的一点是,如果直接的CSS文件中没有标记,或者您也添加了标记的自定义CSS文件,那么这将非常适用于这些文件。

我不知道您真正需要完成的是什么。当链接到CSS、JS、图像等时,您可以使用Scriptlet或jstl动态地附加上下文根

您可以在此处看到关于此的讨论:


您可以使用jsp include指令

<%@ include file="something.css" %>

<%@ include file="something.xyz" %>


可能-问题是,为什么?静态文件上的文件扩展名的唯一用途是让web服务器知道在发送该文件时在内容类型头中放置什么。如果要显式设置内容类型,为什么要关心文件扩展名?可以在WAR包中设置吗?我在NetBeans中仅有的文件是
sunweb.xml
,在那里添加这些文件不起作用。问题是我无法访问正在部署的机器,因为我只是将WAR文件传递给将要部署它的人。web.xml是WAR包的一部分(可以说,正是它使任意JAR文件成为“WAR”)。您的WAR有一个web.xml:/web-INF/web.xml。打开它,将servlet映射填充到其中。我已经将WAR文件重命名为.zip,但是在WEB-INF文件夹中有“lib”(文件夹)、“classes”(文件夹)和sun-WEB.xml。没有web.xml,sun-web.xml似乎有不同的格式。您是从头开始制作的web应用程序吗?您只是在使用JSP吗?如果您没有web.xml,那么您可以制作一个。我编辑了我的文章以包含正确的标题。如果您想支持.jsp之外的.css扩展,您还必须定义*.jsp映射:
jsp*.tag*.jsp