jetty外网访问
⑴ jetty是否可以应用在Android手机上
jetty可以应用在Android手机上。
Jetty 是一个开源的servlet容器,它为基于java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
⑵ eclipse通过jetty服务器访问不到jsp页面:报404错误
404是找不到服务器,原因一般只有几种:
1.路径写错了,少了斜杠或者字母大小写等
2.tomcat没启动或者没配置好即服务器没启动
多试几次看看
⑶ 有用过jetty的么,说下感觉,和tomcat的区别
我刚用上jetty,觉得没什么大的区别。
最明显的区别:jetty启动比tomcat快多了。还有网上说的jetty处理静态资源比tomcat给力
~如果你认可我的回答,请及时点击【采纳为满意回答】按钮
~~手机提问的朋友在客户端右上角评价点【满意】即可。
⑷ jetty:如何配置jetty使外网可以访问服务器
进入路由器的配置界面,找NAT或者端口映射这个选项,将公网上的8080端口映射到192.168.1.100的8080上就可以了。否则外面的访问是无法进入内网的。
⑸ idea maven jetty启动服务了 网页上怎么访问
1:Run->Edit Configurations,打开视图:
2:点击+按钮,选择maven进行配置,如下图:
3:输入自己需要配置的信息,Working directory是mawen工程的路径,Command line为需要设置执行的指令,也就是jetty:run,如下图:
4:配置好之后点击Apply,OK,便可以试着启动web工程了,
⑹ ubuntu jetty部署webapps下部署了多个root.war包怎么分别访问
通过Gradle我们可以很方便的使用内置jetty启动我们的web程序,在本地进行调试。但是在使用的过程中,我发现了几个问题,导致本地调试的效率大受影响。 如果使用 gradle jettyRun 启动jetty服务器后,项目里的静态资源(jsp,html,JavaScript文...
⑺ eclipse jetty6 下JSP可以访问到,servlet访问不到
JSP正常,表明jetty已正常启动。
servlet访问不到,就是servlet配置错了,检查下:
1、servlet的类名称对不对。
2、servlet的名称和servlet的mapping中的名称是否一致。
3、检查servlet mapping中的url pattern是否和你访问的一致。
4、在servlet类的init方法中添加断点或打印语句检查servlet是否被初始化。
5、在servlet类的doGet/doPost方法中添加断点或打印语句检查是否有请求被传入。
⑻ jetty的 continuations 有什么优点
jetty在6.0以后引入了continuations, 那么什么是continuations?他有什么优点?
原始的servlet是一个连接对应一个线程,在短连接情况下都没什么问题,但是现在有越来越多的运用是基于长连接的,这样用户并发量上去的话,后台的线 程数将会以正比数上升。一个java线程一般占用64K内存,包括其他的,资源会占用很多,况且线程调度,线程锁机制等都很耗CPU。
后来出现一个请求对应一个线程。得益于NIO,连接能够在请求被处理时分配一个线程。当连接空闲时,那个线程将会被放到线程池中,而连接再次添加到NIO Select Set中去检测新的请求。这种一个请求对应一个线程的模式能应对更多的用户连接。对于ajax运用来说,轮循请求去取数据不太好,因为要不断建立连接,而 且一般连接都没取到数据,浪费很多连接,所以比较好的办法是服务器保持住那个请求,直到服务器有数据就往客户端转送或超时为止。这是一个好技术,但是它同 时也背离了一个请求一个线程的初衷,因为每个客户端在服务端都有一个请求线程保持着,因此服务端需要为每个客户端生成一个或多个线程。在大量并发用户下仍 然有问题。
jetty的continuations正是解决上面的问题而产生的。它的原理是:使用SelectChannelConnector来处理请求,这个类 是基于NIO API上的。因此使它能够不用消耗每个连接的线程就可以持有开放的连接。使用continuations suspend时,调用的实际是SelectChannelConnector.RetryContinuation.suspend,此时会抛出一个异 常RetryRequest,该异常将传播到 servlet 以外并通过过滤器链传回,并由 SelectChannelConnector 捕获。 但是发生该异常之后并没有将响应发送给客户机,请求被放到处于等待状态的 Continuation 队列中,而 HTTP 连接仍然保持打开状态。此时,为该请求提供服务的线程将返回 ThreadPool,用于为其他请求提供服务。 暂停的请求将一直保持在等待状态的 Continuation 队列,直到超出指定的时限,或者当对 resume() 方法的 Continuation 调用 resume() 时,出现上述任意一种条件时,请求将被重新提交到 servlet(通过过滤器链)。事实上,整个请求被重新进行处理,直到首次调用 suspend()。当执行第二次发生 suspend() 调用时,RetryRequest 异常不会被抛出,执行照常进行.判断的依据是:if (!_pending && !resumed && timeout >= 0) ..throw _retry;其中_pending是指是不是第二次调用了suspend....这样子,jetty中的thread pool就会有空闲线程来处理其他的请求。
continuations的引入能用很少的线程处理大量的请求。。实验见下:
public class App {
public static void main(String[] args) throws Exception {
Server server = new Server();
Connector conn = new SelectChannelConnector();
conn.setPort(8080);
server.setConnectors(new Connector[]{conn});
WebAppContext ctx = new WebAppContext();
ctx.setContextPath("/");
ctx.setWar("./webapp");
server.setHandler(ctx);
QueuedThreadPool threadPool = new QueuedThreadPool();
threadPool.setMaxThreads(100);#设置jetty的thread pool最大为100个线程。
server.setThreadPool(threadPool);
DaemonService.bind(server);
server.start();
}
}
DaemonService是一个ServletContextListener,代码为:
public void contextInitialized(ServletContextEvent sce) {
new Thread(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
#每次打印出当前线程池的线程大小及空闲线程
System.out.println("thread:" + server.getThreadPool().getThreads() + "#idle:" + server.getThreadPool().getIdleThreads());
}
}
}).start();
}
写一个TestServlet,对应的mapping是/test
public class TestServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
resp.getWriter().write("Test");
resp.getWriter().flush();
}
}
使用ab -c 200 -n 1000 http://localhost:8080/test 测试后结果如下:
thread:2#idle:1
thread:2#idle:1
thread:89#idle:0
thread:100#idle:0
大概还有10多个的thread:100#idle:0
thread:100#idle:0
thread:100#idle:0
thread:99#idle:19
thread:99#idle:88
thread:99#idle:98
thread:99#idle:98
thread:99#idle:98
说明了在并发200个时,jetty线程池里几乎没有空闲线程来处理其他的请求。
ab测试结果为:
Requests per second: 44.54 [#/sec] (mean)
Time per request: 4490.625 [ms] (mean)
当把TestServlet代码改为Continuation时,同样是停顿2秒
public class TestServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Continuation continuation = ContinuationSupport.getContinuation(req, null);
continuation.suspend(2000);
resp.getWriter().write("Test");
resp.getWriter().flush();
}
}
使用ab -c 200 -n 1000 http://localhost:8080/test 测试后结果如下:
thread:2#idle:1
thread:7#idle:6
thread:7#idle:6
thread:39#idle:26
thread:42#idle:41
thread:42#idle:36
thread:65#idle:64
thread:65#idle:46
thread:91#idle:90
thread:91#idle:90
thread:91#idle:89
thread:91#idle:90
thread:91#idle:83
说明在并发200个时,jetty线程池中一直都有很多空闲线程
ab测试结果为:
Requests per second: 79.21 [#/sec] (mean)
Time per request: 2525.000 [ms] (mean)
结论:jetty的continuations在短连接上不见得有很大的优势,但是在长连接或者在后台访问IO资源(数据库,网络等)造成的 servlet响应慢问题上,会有很大的优势,他不会让一个线程傻傻地在等待数据库访问完成,而是会放入线程池去处理其他请求。等数据库访问完后,再过来 处理。
servlet 3.0规范已经引入了异步servlet功能,写法为:
请求/url/A
AsyncContext ac = request.startAsync();
//...这边处理具体的资源操作,如db.getConnection()或其他的操作
ac.dispatch();
⑼ 如何在android手机中安装一个web服务器啊。。。急求
正式开始
下载并安装Androphp、Feel ftp和File Zilla
安装完成后打开AndroPHP,界面如下:
备注:此处为手机内网IP,意味着你只能用内网设备访问,在以后的博文中会告诉大家如何进行端口映射,从而实现外网也可访问
看到上图两个地址后,其实可以直接点击,使用手机浏览器访问的界面如下:
备注:
图片1中大家可能看不到wordpress文件夹,别急下一步教你上传。
phpMyAdmin的默认用户名是root或者是你当前手机的ip地址,密码为空(这信息可以在phpinfo.php中查看)
接下来,就是教大家如何上传文件到手机,当然前提是你已经在Wordpress上下载好了wordpress安装包(下载很简单的,自己去看看吧)或者你自己已经写好了.PHP网页,也可以
两种方法:
1
1
在手机文件管理里,找到根目录下的WWW文件夹,然后用数据线是上传文件到这个文件夹就行了,相当于服务器的根目录
利用Feel FTP(手机端)和File Zilla(电脑端)进行文件传输。这种方法更像是将手机当成服务器啊(本人拙见,其实只要效果一样就行,嘿嘿)
步骤一、打开Feel FTP,点击下方中间按钮,绿色变成红色即为打开,上方也显示出你是否打开了(ps:你可以在设置中关闭无连接是自动退出,不然等会就要打开一次,太麻烦)
步骤二、电脑上打开File Zilla
在主机名处输入Feel FTP上显示的地址。例如我的是:
ftp://192.168.1.121
在端口处填写 :2121,剩下可以都不填写(因为Feel FTPmore不开启用户名和密码),点击快速连接
将你的wordpress文件夹从本地上传到手机根目录/www(从窗口1拖动到窗口2,即可)
至此两种文件上传方法均讲述完毕。
5.利用phpMyAdmin创建数据库,修改wordpress中的wp-config-sample.php文件,之后的步骤和正常安装wordpress相同,可参考我之后要写的wordpress安装教程,此处介绍到此为止
成果演示
接下来,放几张演示图
手机上的wordpress展示:
或者自己编写的.php文件(此处使用的是官方文档演示)
⑽ jetty启动了 前台访问不了
run configurations看看该项目是否加了前缀?如果加了访问的时候要加前缀,当然你也可以去掉run configurations里面配置的前缀进行访问.