Godaddy共享主机JSP/Java支持的体验经历 Godaddy 超市
来源:asp之家 发布时间:2010-04-07 13:17:00
最近体验了一下Godaddy共享主机上的Jsp/Java支持,感觉相当糟糕。竟然不支持struts的应用,至今尚未完全搞明白Godaddy是如何设置,达到不支持某一个框架的。现在说说我的体验经历,希望有志同道合者一起讨论,共同寻找解决办法。
最初的想法是,测试一下Godaddy对Jsp/Java的支持如何,希望能把自己写的一些小的应用放在上面。 鉴于自己对struts比较熟悉,于是用struts写了个Hello World,简简单单的一个action,为了能和Godaddy的环境尽可能的一致,特地下了个5.0.28的tomcat(godaddy是5.0.27,没找到这个版本的)测试了一下,一切ok。
于是把这个helloworld打成war包,上传到主机,等待……(godaddy的共享主机的tomcat每天夜里1点左右重启,是北京时间的下午4点左右)终于蛋孵化出来了,于是输入url测试,出现报错,说是servlet action not found之类的(具体记不清了)。第一次就出现报错我并不惊讶,因为是第一次,可能哪里忽略了(真正令我惊讶的是后来经过不断测试,发现问题依然存在,网上搜索也只见问题,并没有哪里解决了的), 于是我多写了几个页面,有带action的,有不带action的,测试测试,结果发现不带action的jsp是可以显示的,而带action的jsp就报错。难道是web.xml哪里写错了,导致配置没有读入?不对啊,本地测试都可以的,没道理godaddy就不行啊。其间,又把web.xml的相关配置init parameter,load on startup修改了一下,测试还是老样子。(每次修改核心文件都要等下次tomcat重启,佩服自己真有耐心)
我曾经看到有人说godaddy的共享主机不支持struts,但是我想只要是同样的tomcat(虽然我的版本与他有细微差异),哪有不支持struts的。我于是我发邮件给godaddy的support,答复大概说共享的linux主机不支持struts,如果要支持请都买独立主机(我晕)。
godaddy到底是通过什么来限制struts的呢?我们有什么办法可以绕过这个限制呢?
首先,我想到的是tomcat启动时,会从WEB-INF/lib里的jar文件加载class,是不是godaddy在tomat的设置里屏蔽了struts有关的jar包,经过检测(起初是在jsp里通过Class.forName()来检测,后来发现可以通过从application中获取相应attribute可以得知加载了哪些jar),发现并没有屏蔽,jar文件都加载了。既然没有屏蔽jar(后来想想其实jar文件的屏蔽检测是没必要的,如果jar文件没有加载,那应该会有class not found的错误),那么会不会是屏蔽了struts-config.xml呢,于是把struts-config改了个名字,测试还是不行。
现在记不清在哪一步改动之后,servlet action not found之类的错误没了,换成了module “null”之类的错误。 既然也不是struts-config引起的,那就剩下servlet-class org.apache.struts.action.ActionServlet了,是不是屏蔽了这个类呢?于是我写了一个类,继承自ActionServlet,并且覆盖了init(),doGet()方法,加了一些代码来debug。代码如下:
@Override
?
public void init() throws ServletException {
?
initConfig();
?
Trace.add("Servlet init==after init config:" + config);
?
try {
?
super.init();
?
} catch (Exception e) {
?
Trace.add("servlet init exception:" + e.toString()
?
+ "
===cause:" + e.getCause().toString());
?
throw new ServletException(e);
?
}
?
}
?
@Override
?
public void doGet(HttpServletRequest request, HttpServletResponse response)?
throws IOException, ServletException {
?
Trace.add("do get:" + request.getRequestURL());
?
try {
?
super.doGet(request, response);
?
} catch (ServletException e) {
?
Trace.add("do get Exception:" + e.toString());
?
throw e;
?
} catch (IOException ioe) {
?
Trace.add("do get Exception:" + ioe.toString());
?
throw ioe;
?
}
?
}
?
protected void initConfig() {
?
config = "/WEB-INF/struts-config.xml";
?
}
其中Trace是一个单例类,为了记录一些debug信息,以便得知执行到哪一步了。initConfig()是为了测试一下在这里指定struts-config。
搞好之后上传,等待,测试,这次发现module “null”之类的错误不见了,出现一个空白页面,action的执行还是不成功,也就是说struts-config的配置还是没有成功读取。 我又在一个jsp中输出Trace中记录的内容,发现只有一行:Servlet init==after init config:/WEB-INF/struts-config.xml,也就是说在进入struts的ActionServlet的init()方法之后,就如同飞越大西洋的法国飞机一样,销声匿迹了。为什么会这样呢?即使报错了,trace里应该有记录啊,但是现在没有,那就是坠入init()这个大西洋了。我可是catch了Exception的,难道被内部catch了没有抛出来?不应该啊, 通过分析application的attribute,也就是servlet context的attribute,发现里面有org.apache.struts.action.SERVLET_MAPPING=*.do,这个attribute是在init()方法里调用initServlet()方法的最后一段代码执行时set进去的。那就是说initServlet之后的执行出问题了,那是在哪儿呢?还是说,上面的attribute在容器加载web.xml时就设置了,这里的设置是冗余的,那么struts的ActionServlet里的init()方法根本没执行?
目前,我就测试到了上面那一步,那么,可以看出是servlet没有初始化,导致struts-config中定义的配置没有加载。
这就是我到目前为止的经历,不可谓不艰辛。可是问题依然还在,接下来我还会继续研究,欢迎讨论。


猜你喜欢
- Linux下安装zip解压功能Linux服务器上一般默认没是没有有安装zip命令安装zip指令apt-get install zip 或 y
- 以下是提高IIS 5.0网站服务器的执行效率的八种方法:1. 启用HTTP的持续作用可以改善15~20%的执行效率。2. 不启用记录可以改善
- Linux-使用 MyCat 实现 MySQL 主从读写分离一、MySQL 读写分离1、MySQL 读写分离的概述MySQL 作为目前世界上
- 1. 环境说明节点IPredis-node-110.10.239.31redis-node-210.10.239.32redis-node-
- 北京时间1月3日消息,据国外媒体报道,新闻出版总署(以下简称“版署”)日前发出通知称,已终止《魔兽世
- 在SCO的一个网卡上面绑定多个IP地址的方法在SCO Unix系统中多IP地址的设置是通过该网络接口的别名地址来实现的。具体步骤如下:(举例
- 如何判断当前Linux系统是否安装在VMware上面呢? 因为公司大部分服务器位于VMware上,也有小部分系统部署在物理机上面。今天老大要
- 老白站长有感而发:“在采集过程中完成,丝毫不影响采集速度,经过这样修改的文章可以把文章内容20%-30%的部分都变成其他内容,但不会把文章内
- Linux下解压查看JAR包问题在生产环境,有时会有需要在线查看jar中内容的需求.此时, unzip/tar命令都失去了用武之地.解决办法
- 说明:满分50分,时间8分钟。请把答案写在纸上。一、单项选择题(2分×15=30分)1.搜索引擎搜索结果页面,简称什么?
- 搜索引擎优化是很多网站非常关心的,在搜索引擎中表现好,意味着能吸引大量的用户,网站的宣传也就容易了,业务也就好开展了。但在针对搜索引擎优化的
- 按照计划,我应该研究一下Dedecms如何SEO了.说到DedeCMS,相信很多站长都在使用,因为她的简单,易用(这里我不说她的开源,是因为
- 1、创建一个SpringBooot项目并且打成jar包2、在Linux中创建一个文件夹,来做docker测试[root@izwz90lvzs
- 在这篇文章中以VMware14为例,Linux操作系统采用CentOS7进行讲解如何在虚拟机中安装Linux操作系统。一、选择创建新的虚拟机
- 11月12日消息,今天,百度知道文档分享平台正式上线,为百度用户分享文档提供了一个方便而实用的渠道。“百度知道文档分享&
- 互联网走到今天,已经进入了Web 2.0时代,它已经影响到了我们生活的各个方面,人与互联网之间的联系越来越紧密,其中搜索引擎扮演着一个重要的
- 其实无论是组件还是非组件上传,都有这个漏洞,以下代码请需要得朋友仔细阅读,只要读懂代码就能融会贯通。这里以ASPUPLOAD组件上传为例以下
- 1. 结构体在内存中是如何存储的int main() { Student stu; stu.id = 123456; strcpy(st
- 问题描述调用并传参数给其他shell脚本,传的参数带有空格,被调用的shell脚本只取了这个参数的第一个单词。代码如下# 传参脚本 test
- 近日,康盛创想BBS与SNS社区产品双剑合璧,推出了Discuz! 7.0和UCenter Home (简称UCHome)1.5。这两款社区