使用jetty配置 开发web应用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用jetty配置 开发web应用相关的知识,希望对你有一定的参考价值。
参考技术A 一直以来使用jetty作为我的web开发配置服务器 开始的时候和所有的初学者一样使用tomcat作为开发服务器 可用着用着 感觉tomcat越来越繁琐以及庞大 后来 用了jboss 知道jboss使用jetty作为其web应用服务器 所以就开始试着使用jetty 从那开始后 jetty就成为我的开发配置服务器了 从最初的 到现在的 一直在使用着 喜欢jetty的原因 在于其的方便 简单的配置文件 简单的启动脚本 而且在elipse或者其他ide中 进行调试 运行都很方便 不想多说什么 让事实来说话吧 在开始之前 先下载jetty 目前最新的版本为 : +and+Installing#download 以前的版本文件是比较小的 现在的版本增加了很多东东 主要是很多例子应用 以及源码 经过删减只有 整个应用还是比较小的 大概也就 m多了 如果只是需要运行web应用 并且只是需要jsp 规范的话 只有 m多了 以前 的时候只有 m多 现在也已经增加了那么多了 时代在进步 没有办法 jetty主要的jar为jetty jar servlet api jar jetty util jar 启动的jar 为start jar 还有jsp规范的jar jsp 好像已经减了不少的jar了 只有 个文件core jar ant jar jsp jar jsp api jar core是使用eclipse的jdt 进行jsp编译 jetty的主要配置文件为etc/jetty xml 当然你可以自己指定别的文件 在start jar中有个nfig文件是默认的环境配置 以及指定默认的配置文件 可以手工替换 启动jetty很简单 在命令行下面java jar start jar 如果需要指定nfig 使用java DSTART=nfig jar start jart 配置web 应用也非常的简单 更改jetty xml就行了 增加web应用的方式包括 直接放置应用在webapps下面 或者配置以下的context <!--Code highlighting produced by Actipro CodeHighlighter (freeware)
--> <New id= Mywork class= mortbay jetty webapp WebAppContext > <Arg><Ref id= contexts /></Arg> <! 绝对路径 可以指定相对路径 增加 <SystemProperty name= jetty home default= /> 就行 > <Arg>D:\\\\project\\\\work\\\\m project\\\\esoft\\\\esoft mywork jsf\\\\src\\\\main\\\\webapp</Arg> <Arg>/mywork</Arg> <Set name= defaultsDescriptor ><SystemProperty name= jetty home default= />/etc/webdefault xml</Set> <Set name= virtualHosts > <Array type= java lang String > <Item>localhost</Item> </Array> </Set> </New>要想改变原先的webapps主应用 改变下面的配置 <!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
--> <Call class= mortbay jetty webapp WebAppContext name= addWebApplications > <Arg><Ref id= contexts /></Arg> <Arg><SystemProperty name= jetty home default= />/webapps</Arg> <Arg><SystemProperty name= jetty home default= />/etc/webdefault xml</Arg> <Arg type= boolean >True</Arg> <! extract > <Arg type= boolean >False</Arg> <! parent priority class loading > </Call>默认的web xml配置文件为webdefault xml如果想配置相应的web参数 可以更改其应用 默认的端口为 如果想修改 更改 jetty port属性 <!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
--> <Call name= addConnector > <Arg> <New class= mortbay jetty nio SelectChannelConnector > <Set name= port ><SystemProperty name= jetty port default= /></Set> <Set name= maxIdleTime > </Set> <Set name= Acceptors > </Set> <Set name= confidentialPort > </Set> </New> </Arg> </Call>简单的配置 简单的启动 下一篇 我会介绍 如何在eclipse中使用jetty lishixinzhi/Article/program/Java/ky/201311/28406
在 Jetty 中访问 Web 容器外部的文件
【中文标题】在 Jetty 中访问 Web 容器外部的文件【英文标题】:Accessing a file outside the web container in Jetty 【发布时间】:2011-06-25 10:20:32 【问题描述】:我在 Windows XP SP3 中使用 Eclipse 3.6 来开发 GWT 应用程序。该应用程序需要向客户端显示位于服务器上的带有图形的文件夹的内容。此外,图形文件夹不在 Web 容器内,而是在硬盘的另一个位置。 Eclispe 使用 Jetty HTTP 服务器来运行 Web 应用程序。我在 RemoteServiceServlet 中使用以下 sn-p 来测试文件访问并获取文本文件的内容。
File inputFile = new File("C:\\mytext.txt");
FileReader fin = new FileReader(inputFile);
char c[] = new char[(char)inputFile.length()];
int i;
i = fin.read(c);
s = new String(c);
不幸的是,我收到一个错误,我不知道如何翻译它以更正代码(或任何配置文件)。
Initializing AppEngine server
Unable to access http://appengine.google.com/api/updatecheck?runtime=java&release=1.5.1×tamp=1308100600&api_versions=['1.0']
java.net.UnknownHostException: appengine.google.com
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at com.google.appengine.tools.info.RemoteVersionFactory.getVersion(RemoteVersionFactory.java:76)
at com.google.appengine.tools.info.UpdateCheck.checkForUpdates(UpdateCheck.java:99)
at com.google.appengine.tools.info.UpdateCheck.doNagScreen(UpdateCheck.java:174)
at com.google.appengine.tools.info.UpdateCheck.maybePrintNagScreen(UpdateCheck.java:142)
at com.google.appengine.tools.development.gwt.AppEngineLauncher.maybePerformUpdateCheck(AppEngineLauncher.java:137)
at com.google.appengine.tools.development.gwt.AppEngineLauncher.start(AppEngineLauncher.java:103)
at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:500)
at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1055)
at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:804)
at com.google.gwt.dev.DevMode.main(DevMode.java:309)
Logging to JettyLogger(null) via com.google.apphosting.utils.jetty.JettyLogger
Successfully processed C:\Documents and Settings\Giorgos\workspace\Zserver\war\WEB-INF/appengine-web.xml
Successfully processed C:\Documents and Settings\Giorgos\workspace\Zserver\war\WEB-INF/web.xml
The server is running at http://localhost:8888/
[ERROR] javax.servlet.ServletContext log: Exception while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.lang.String mytest.client.GreetingService.greetServer(java.lang.String) throws java.lang.IllegalArgumentException' threw an unexpected exception: java.security.AccessControlException: access denied (java.io.FilePermission C:\mytext.txt read)
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:351)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission C:\mytext.txt read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:166)
at java.lang.SecurityManager.checkRead(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at mytest.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
... 34 more
【问题讨论】:
【参考方案1】:有很多不相关的问题:
-
鉴于您问题中的堆栈跟踪,您似乎正在为 Google App Engine 开发应用程序。 GAE 不允许访问文件系统,因此会出现 AccessControlException。
文本文件不是图形文件。我不明白你想做什么。
new char[(char)inputFile.length()];
行错误。为什么要将文件的长度转换为字符?
read method 不能保证一次读取所有文件。它返回读取的字符数。您不应忽略返回的值。阅读the tutorial about IO。
【讨论】:
:) 你可以理解我是这方面的初学者。是否可以为 GAE 运行我的 Web 应用程序?文本文件只是一个测试,看看我是否可以访问文件。如果我将文本文件放在 war 文件夹中,那么我可以访问该文件,但是因为我必须创建文件夹并在其中动态添加文件,所以我当然需要访问文件系统。您能否建议我在哪里寻找以实现这一目标? 按照 GWT 教程进行操作,避免使用/部署 AppEngine 的部分:code.google.com/intl/fr/webtoolkit/gettingstarted.html以上是关于使用jetty配置 开发web应用的主要内容,如果未能解决你的问题,请参考以下文章
将域指向端口8080上Jetty上运行的Web应用程序的基本配置