针对如何从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处理静态资源)
- c# – Nancy:从“/”提供静态内容(例如index.html)?
- Eclipse-如何将“项目方面”从Tomcat 6更改为Tomcat 5.5?
- embedded式Tomcat不提供静态内容
- Golang Goji:如何同时提供静态内容和api
如何从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)?
我试过了
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 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不提供静态内容
我正在使用以下(基于此 )创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.7和Tomcat 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
我想选择是否在生产中使用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等相关知识,可以在本站进行查询。
本文标签: