当前位置:首页>>软件教程>>新闻内容  
Tomcat于Eclipse集成开发问题以及解决方案
作者:jimcheng 发布时间:2003-12-12 10:49:31 | 【字体:

版本:
JDK 1.4.2 c:\jdk1.4
Eclipse 2.1 c:\eclipse
Tomcat 4.1.24 c:\tomcat4.1
Tomcat Plugins: com.sysdeo.eclipse.tomcat_2.1.0
Tomcat Patch: jasperDebugPatchV4.1.24.zip

存在的问题:


  1. Servlet调用问题
  2. JSP实时编译问题
  3. 乱码问题
  4. JSP编译调试问题


如何解决:
1.Servlet调用问题
对于很多程序员开发的Servlet,如继承于HttpServlet的程序,想通过URL调用进行直接调用,
但是发现通过如:http://localhost:8080/mywebapp/servlet/com.aaa.bbb.MyServletTest
会出现错误,Tomcat提示找不到相应的资源,那是因为TOMCAT的缺省配置是禁止通过全类名
进行Servlet的调用的,如何打开此选项,看TOMCAT_HOME/conf/web.xml
代码:
<servlet> <servlet-name>invoker</servlet-name> <servlet-class> org.apache.catalina.servlets.InvokerServlet </servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet>

代码:
<!-- The mapping for the invoker servlet --> <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping>


对于第二段配置是关键,那是告诉TOMCAT所有/servlet/****的请求全部发向invoker的servlet,
TOMCAT缺省是注释掉的,把它打开就行那,所有的WEBAPP都可以通过全路径进行调用servlet啦。
而对于invoker到底是什么,看第一段配置代码,所以当你对Tomcat的invoker实现不满意的话,
可以替换第一段配置代码中invoker的相应实现类。

注:对于tomcat中的Examples是可以通过全路径调用SERVLET那是因为,在Examples的web.xml
中使用了filter继续,截获了TOMCAT的缺省动作,相当于覆盖了TOMCAT的全局设置。对于web
container的行为,请参见SUN规范。
代码:
<filter-mapping> <filter-name>Servlet Mapped Filter</filter-name> <servlet-name>invoker</servlet-name> </filter-mapping> <filter-mapping> <filter-name>Path Mapped Filter</filter-name> <url-pattern>/servlet/*</url-pattern> </filter-mapping>


2.JSP实时编译问题
很多在TOMCAT中会发现,对于刚改过的JSP在IE中刷新不出来,即TOMCAT没有实时编译JSP文件,
如何修改呢?同样参看TOMCAT_HOME/conf/web.xml,找到对于JSP编译程序进行配置,如下
加上init-param参数段,告知TOMCAT每次都需要进行reloading,即进行日期比较,适当时候
进行重编译。对于其他参数可以看在web.xml中的参数解释,非常的具体。

代码:
<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>logVerbosityLevel</param-name> <param-value>WARNING</param-value> </init-param> <init-param> <param-name>reloading</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>javaEncoding</param-name> <param-value>GBK</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet>


注:org.apache.jasper.servlet.JspServlet 的作用,它就是为什么JSP能够自动转换成servlet
的罪魁祸首啦,对于JSP编译上出现的问题都可以从它身上找到答案。注意JSP这个servlet是mapping
到*.jsp的,所以所有的JSP请求才会被编译成servlet后执行,非常类似于Apache中的addType功能。

代码:
<servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> </servlet-mapping>


3.乱码问题
乱码问题比较复杂,但是只要找到为什么出现问题就非常简单啦。
A.JSP页面编译后对于中文变成乱码
B.页面输出有乱码
C.传递的URL参数或是中文Form field值,解释成乱码

对于A子问题,那是由于Tomcat的Jasper不能正确识别JSP文件的编码造成的,所以需要告诉Jasper本地
的JSP文件编码。打开TOMCAT_HOME/conf/web.xml,找到如下的配置段,给<servlet-name>jsp</servlet-name>
加上参数javaEncoding=GBK,其中的GBK换成GB2312也行,大家可以琢磨一下原因。呵呵

代码:
<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>logVerbosityLevel</param-name> <param-value>WARNING</param-value> </init-param> <init-param> <param-name>reloading</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>javaEncoding</param-name> <param-value>GBK</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet>



对于B子问题,很简单,在所有JSP文件的头部加上:
<%@ page contentType="text/html;charset=gb2312" %>

对于C子问题,也很简单,那是因为,TOMCAT对于HTTP的解释全部是按照ISO-8859-1的方式传送的,
把前台的GB2312的内容传到后台,所以需要转码。

对于JSP文件,在所有JSP文件的头部加上:
request.setCharacterEncoding("GB2312");
对于Servlet类同理:
doGet(...)
{
request.setCharacterEncoding("GB2312");
...
)
就可以搞定了。

4.JSP编译调试问题
对于使用TOMCAT plugins进行Eclipse的开发的人,是非常希望能够及时调试的JSP被编译后的SERVLET的,
但是出现了,在tomcat的Jasper编译后,TOMCAT plugins导入到Eclipse的workspace后会出现路径即包名
不匹配的问题,这个TOMCAT plugins提供了补丁,使Tomcat和Eclipse能够更好的协调工作。
方法:
把jasperDebugPatchV4.1.24.zip解压到TOMCAT_HOME\common\classes\下,就OK啦!能够在eclipse中进行
调试编译后的JSP.

先写这么多,抛砖引玉先!
附件为jasperDebugPatchV4.1.24.zip,主要是为了防止大家难找。
还有就是版本一定要注意好,否则无法工作。

jasperDebugPatchV4.1.24.zip 点击此链接下载附件


文章来源:ccf
 放生
 愚爱
 够爱
 触电
 白狐
 葬爱
 光荣
 画心
 火花
 稻香
 小酒窝
 下雨天
 右手边
 安静了
 魔杰座
 你不像她
 边做边爱
 擦肩而过
 我的答铃
 怀念过去
 等一分钟
 放手去爱
 冰河时代
 你的承诺
 自由飞翔
 原谅我一次
 吻的太逼真
 左眼皮跳跳
 做你的爱人
 一定要爱你
 飞向别人的床
 爱上别人的人
 感动天感动地
 心在跳情在烧
 玫瑰花的葬礼
 有没有人告诉你
 即使知道要见面
 爱上你是一个错
 最后一次的温柔
 爱上你是我的错
 怎么会狠心伤害我
 不是因为寂寞才想
 亲爱的那不是爱情
 难道爱一个人有错
 寂寞的时候说爱我