GVKun编程网logo

如何从tomcat提供静态内容(tomcat处理静态资源)

7

针对如何从tomcat提供静态内容和tomcat处理静态资源这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展c#–Nancy:从“/”提供静态内容(例如index.html)?、Eclips

针对如何从tomcat提供静态内容tomcat处理静态资源这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展c# – Nancy:从“/”提供静态内容(例如index.html)?、Eclipse-如何将“项目方面”从Tomcat 6更改为Tomcat 5.5?、embedded式Tomcat不提供静态内容、Golang Goji:如何同时提供静态内容和api等相关知识,希望可以帮助到你。

本文目录一览:

如何从tomcat提供静态内容(tomcat处理静态资源)

如何从tomcat提供静态内容(tomcat处理静态资源)

我有一个包含大量静态文件的目录( .png,。css等)。
我以为(也许是错误地)在我的应用程序的WEB-INF文件中创建一个目录就足够了,并且我可以通过仅按名称引用它们来访问这些文件:
例如:

   <link rel="stylesheet" href="/static/styles.css" type="text/css">

我的目录结构如下:

+WEB-INF   |   +---static       |       +--styles.css       +--header.png

我的web.xml如下

<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4"><display-name>myapp</display-name>    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:com/example/myapp/spring/applicationContext.xml</param-value>    </context-param>    <listener>        <listener-class>            org.springframework.web.context.ContextLoaderListener        </listener-class>    </listener>    <listener>        <listener-class>            com.example.myapp.ContextListener        </listener-class>    </listener>    <!--          There are three means to configure Wickets configuration mode and they are        tested in the order given.         1) A system property: -Dwicket.configuration        2) servlet specific <init-param>        3) context specific <context-param>        The value might be either "development" (reloading when templates change)        or "deployment". If no configuration is found, "development" is the default.    -->    <filter>        <filter-name>wicket.myapp</filter-name>        <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>        <init-param>            <param-name>applicationFactoryClassName</param-name>            <param-value>org.apache.wicket.spring.SpringWebApplicationFactory</param-value>        </init-param>    </filter>    <filter>        <filter-name>wicket.session</filter-name>        <filter-class>org.apache.wicket.protocol.http.servlet.WicketSessionFilter</filter-class>        <init-param>            <param-name>filterName</param-name>            <param-value>wicket.myapp</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>wicket.myapp</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <filter-mapping>        <filter-name>wicket.session</filter-name>        <url-pattern>/servlet/*</url-pattern>    </filter-mapping></web-app>

但是....
这行不通,我只是得到一个404-尝试访问“静态”目录中包含的资源时找不到文件。我在这里想念什么吗?

答案1

小编典典

不要将它们放入WEB-INF,该文件夹用于存放您 希望直接提供的内容。

放到WEB-INF旁边

+- WEB-INF+- static

c# – Nancy:从“/”提供静态内容(例如index.html)?

c# – Nancy:从“/”提供静态内容(例如index.html)?

我试图使用Nancy制作一个单页的Web应用程序.因此,我希望我的根URL提供一个普通的.html文件,没有任何视图逻辑或任何东西.

我试过了

Get["/"] = parameters => Response.AsHtml("content/index.html")

但是没有AsHtml.

我试过一个自定义的引导程序

conventions.StaticContentsConventions.Add(
    StaticContentConventionBuilder.AddFile("/",@"content/index.html")
);

但是显然,它认为“/”不是一个文件 – Nancy在http:// localhost:< port> /上给我一个目录列表.

我该怎么办?这不应该是这么难,对吧?

PS.任何方式将该目录列表关闭?感觉不安全

解决方法

只要把你的视图文件夹,并做:
Get["/"] = _ => View["index"];

目录列表与南希无关,无论您使用的是什么主机都显示.

Eclipse-如何将“项目方面”从Tomcat 6更改为Tomcat 5.5?

Eclipse-如何将“项目方面”从Tomcat 6更改为Tomcat 5.5?

(Eclipse 3.4,Ganymede)

我在Eclipse中有一个现有的Dynamic Web Application项目。创建项目时,我在“配置”下拉列表中指定了“ Apache Tomcat
v6的默认配置”。

现在已经过去了一个月或两月,现在我想将配置更改为Tomcat’v5.5’。(这将是生产服务器上的Tomcat版本。)

我尝试了以下步骤(没有成功):

  • Targeted Runtimes在“项目Properties
    ”下Tomcat v5.5选择了“已禁用” 选项,并且UI显示了以下消息:
    If the runtime you want to select is not displayed or is disabled you mayneed to uninstall one or more of the currently installed project facets.

  • 然后,我单击了Uninstall Facets...链接。
    Runtimes标签下,仅Tomcat 6显示。
    对于Dynamic Web Module,我选择版本2.4代替2.5
    Runtimes选项卡下,Tomcat 5.5现在显示。
    但是,UI现在显示此消息:
    Cannot change version of project facet Dynamic Web Module to 2.4.
    Finish按钮已禁用-因此我陷入了困境。

我可以使用Tomcat v5.5配置成功创建一个新项目。但是由于某种原因,它不会让我降级现有的项目。

解决方法是,我创建了一个新项目,并从旧项目中复制了源文件。尽管如此,解决方法还是相当痛苦且笨拙的。

谁能解释我如何将Project配置从“ Tomcat 6”“降级”到“ Tomcat 5”?或者也许可以说明为什么会这样?

感谢
皮特

答案1

小编典典

这是一种日食,您可能会遇到麻烦,但这应该可以:

打开导航器视图,发现项目下有一个.settings文件夹。将其展开,然后打开文件:org.eclipse.wst.common.project.facet.core.xml您应该看到一行显示:将其
<installed facet="jst.web" version="2.5"/> 更改为2.4并保存。

只要确保您的项目没有使用2.5专用的东西,就可以了。

还要检查您的web.xml是否具有正确的配置:

<web-app version="2.4"         xmlns="http://java.sun.com/xml/ns/j2ee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

embedded式Tomcat不提供静态内容

embedded式Tomcat不提供静态内容

我正在使用以下(基于此 )创build一个embedded式Tomcat服务器:

File catalinaHome = new File("."); File webAppDir = new File("web"); Embedded server = new Embedded(); server.setCatalinaHome(catalinaHome.getAbsolutePath()); Context rootContext = server.createContext("",webAppDir.getAbsolutePath()); rootContext.setParentClassLoader(Thread.currentThread().getContextClassLoader()); Host localHost = server.createHost("localhost",webAppDir.getAbsolutePath()); localHost.addChild(rootContext); Engine engine = server.createEngine(); engine.setName("localEngine"); engine.addChild(localHost); engine.setDefaultHost(localHost.getName()); server.addEngine(engine); Connector http = server.createConnector((InetAddress) null,8080,false); server.addConnector(http); server.setAwait(true); server.start();

Web目录具有静态内容(index.html等)以及带有servlet描述符(如web.xml)的WEB-INF目录。 这是毫无例外的开始,在web.xml中定义的servlet工作,但像index.html静态内容不工作。

我很困惑:我错过了什么来处理静态内容?

如何在服务器调用它的时候只运行PHP脚本

Apache httpd:根据其他*响应*标头有条件地设置响应标头

从IBM MQ迁移到ActiveMQ的过程

Apache基准HTTPS失败

PHP chmod()在服务器上不起作用

获取在OS X Yosemite上运行的本地主机

如何编辑.htpasswd使用PHP?

从haproxy查找运行节点

将django部署到UserDir

.htacess窗口问题

您需要定义默认的servlet 。 这是负责提供静态内容的人员。 这可以通过在webapp的/WEB-INF/web.xml明确地声明它,就像Tomcat自己的常规/conf/web.xml正在做的一样,或者用下面的声明方式来嵌入Tomcat:

// Define DefaultServlet. Wrapper defaultServlet = rootContext.createWrapper(); defaultServlet.setName("default"); defaultServlet.setServletClass("org.apache.catalina.servlets.DefaultServlet"); defaultServlet.addInitParameter("debug","0"); defaultServlet.addInitParameter("listings","false"); defaultServlet.setLoadOnStartup(1); rootContext.addChild(defaultServlet); rootContext.addServletMapping("/","default");

您可能也想为JSP servlet执行相同的操作,以便您也可以使用JSP:

// Define JspServlet. Wrapper jspServlet = rootContext.createWrapper(); jspServlet.setName("jsp"); jspServlet.setServletClass("org.apache.jasper.servlet.JspServlet"); jspServlet.addInitParameter("fork","false"); jspServlet.addInitParameter("xpoweredBy","false"); jspServlet.setLoadOnStartup(2); rootContext.addChild(jspServlet); rootContext.addServletMapping("*.jsp","jsp");

而不是配置像BalusC所示的包装,你也可以使用这个( 几乎 )完全相同的单线程:

Tomcat.initWebappDefaults(rootContext);

在启动服务器之前,将此行添加到某处。 测试了JDK1.7Tomcat 7.0.50

注意 :它另外添加欢迎文件和一些MIME类型映射 。 该方法如下所示:

public static void initWebappDefaults(Context ctx) { // Default servlet Wrapper servlet = addServlet( ctx,"default","org.apache.catalina.servlets.DefaultServlet"); servlet.setLoadOnStartup(1); servlet.setoverridable(true); // JSP servlet (by class name - to avoid loading all deps) servlet = addServlet( ctx,"jsp","org.apache.jasper.servlet.JspServlet"); servlet.addInitParameter("fork","false"); servlet.setLoadOnStartup(3); servlet.setoverridable(true); // Servlet mappings ctx.addServletMapping("/","default"); ctx.addServletMapping("*.jsp","jsp"); ctx.addServletMapping("*.jspx","jsp"); // Sessions ctx.setSessionTimeout(30); // MIME mappings for (int i = 0; i < DEFAULT_MIME_MAPPINGS.length;) { ctx.addMimeMapping(DEFAULT_MIME_MAPPINGS[i++],DEFAULT_MIME_MAPPINGS[i++]); } // Welcome files ctx.addWelcomeFile("index.html"); ctx.addWelcomeFile("index.htm"); ctx.addWelcomeFile("index.jsp"); }

总结

以上是小编为你收集整理的embedded式Tomcat不提供静态内容全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

Golang Goji:如何同时提供静态内容和api

Golang Goji:如何同时提供静态内容和api

过去两周我一直在玩Golang,最后可以开始真正的应用程序.它使用Nginx提供的静态 HTML文件,API使用Goji Web Framework作为后端.我不使用任何Golang模板,因为一切都是Angular.Js,所以静态可以满足我的需求.

我想选择是否在生产中使用Nginx,或者让Go使用应用程序使用的相同端口在root上提供静态内容(8000).这样开发环境就不需要安装Nginx.

所以,尝试像这样添加一个默认多路复用器的句柄

goji.DefaultMux.Handle("/*",serveStatic)

func serveStatic(w http.ResponseWriter,r *http.Request) {
//http.ServeFile(w,r,r.URL.Path[1:])
//http.FileServer(http.Dir("static"))
http.StripPrefix("/static/",http.FileServer(http.Dir("static")))

}

在所有API路径都已注册之后执行此句柄(否则API将无效).

我已经尝试过任何类型的组合,它可以将我重定向到HTTP 404,或者将HTML内容显示为文本.两者都不好.我想知道是否有人来过这里,可以让我了解我做错了什么.

谢谢.

虽然这与我的问题无关,但这里是我正在使用的Nginx配置:

server {
listen 80;

# enable gzip compression
    gzip on;
    gzip_min_length  1100;
    gzip_buffers  4 32k;
    gzip_types    text/plain application/x-javascript text/xml text/css;
    gzip_vary on;
# end gzip configuration

location / {
    root /home/mleyzaola/go/src/bitbucket.org/mauleyzaola/goerp/static;
    try_files $uri $uri/ /index.html = 404;
}

location /api {
    proxy_pass http://localhost:8000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection ''upgrade'';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

}

解决方法

我遇到过类似的问题,所以以下几点可能会有所帮助.

>请记住将服务静态内容的处理程序注册为最终路由.否则,它可能匹配一切.
>也许尝试使用绝对路径而不是相对路径.

这是我用Goji设置路线的简化版本.

func apiExampleHandler(context web.C,resp http.ResponseWriter,req *http.Request) {
    fmt.Fprint(resp,"You''ve hit the API!")
}

func main() {
    goji.Handle("/api",apiExampleHandler)

    // Static file handler should generally be the last handler registered. Otherwise,it''ll match every path.
    // Be sure to use an absolute path.
    staticFilesLocation := "Some absolute to the directory with your static content."
    goji.Handle("/*",http.FileServer(http.Dir(staticFilesLocation)))

    goji.Serve()
}

我用一个示例项目创建了以下GitHub存储库.我可以访问静态内容和API.

https://github.com/Retired/26320144

今天关于如何从tomcat提供静态内容tomcat处理静态资源的分享就到这里,希望大家有所收获,若想了解更多关于c# – Nancy:从“/”提供静态内容(例如index.html)?、Eclipse-如何将“项目方面”从Tomcat 6更改为Tomcat 5.5?、embedded式Tomcat不提供静态内容、Golang Goji:如何同时提供静态内容和api等相关知识,可以在本站进行查询。

本文标签: