tomcat servlet与web.xml的配置说明

tomcat servlet与web.xml的配置说明

先总结使用方法:

1、Tomcat5的web.xml下,找到invoker相关的,去掉注释,有两个地方
2、自己项目的web.xml中
    <servlet>
       <servlet-name>AdminMsgServlet</servlet-name>
       <servlet-class>com.you9.servlet.AdminMsgServlet</servlet-class>
    </servlet>

   <servlet-mapping>
      <servlet-name>invoker</servlet-name>
      <url-pattern>/servlet/*</url-pattern>
   </servlet-mapping>
3、访问
   http://localhost:8080/项目名称/servlet/servlet名称[AdminMsgServlet]
  


详细说明:
我一直以为最新版是功能最完美的,所以我使用了tomcat5.0.19,但按书上定的我编每个servlet,调试时都要在项目目录下的web-inf/web.xml加入类似以下的代码:

<servlet>
<servlet-name>CounterServlet </servlet-name>
<servlet-class>mypack.CounterServlet </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CounterServlet </servlet-name>
<url-pattern>/counter</url-pattern>
</servlet-mapping>

后来通过多方打听,才知道tomcat有个调用器(invoker servlet),只要在web.xml中加入以下代码: 

<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>

便直接用http://localhost:8080/项目目录名/servlet/servlet名 的方式直接调试,如果项目是root话,其中的项目目录可省即 http://localhost:8080/servelt/servlet名。可我按上述方法在tomcat5中使用总不成功(其它配置均正确),且启动tomcat的dos窗口出现多行”严重”字样,提示错在web.xml上,连基本的tomcat默认页都出错,把以上servlet-mapping去掉,就没出现以上问题了。后来仔细查看了网上的帖子,发现网上谈调用器的人大都用的是tomcat4,而且也听说tomcat5相对于tomcat4是有些改变,于是从官方网上下了tomcat4.1.30版,再按上面方法试,居然成了。自然我的上机也就完全改用tomcat4了。由于我装有win2K+winXP双系统,为了了解tomcat5的新功能,在另一系统上也装有tomcat5,但调试还是用的tomcat4,这个疑问也放下了。

昨才得知tomcat4.1.12之前的版本,默认情况下调用器是启用的,由于一个安全缺陷的揭示,因此,此以后的版本,调用器默认情况下是禁用的。如果要启用的话,需要将conf/web.xml文件中下面的servlet-mapping无素取消注释。打开相应的web.xml,发现其中真的有

<!-- The mapping for the invoker servlet -->
<!—
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
-->
只不过加了注释符,禁用了。要解禁,根本不用再加,只用把注释符去掉就行了(当时咋没注意呢,呵呵。想当然了,我又查看了一下tomcat5的相应的web.xml,它也有这几项,被加注释,相必有这个功能呀!于是切换系统,运行,还是上面的错误。哦,对了,在web.xml配置时,讲究、对应关系,于时分别查看tomcat4与tomcat5中的项,真的发现了

<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>

不同之处在于在tomcat5中,以上代码加了注释符被禁用了,而tomcat4却没有,这就解释为什么tomcat5总出错的原因。于是马上去掉注释符,再试tomcat5,初始化没出现“严重”字样,运行也没问题,又一个疑问解决了。

综上,在tomcat4中,启用servlet调用器,只用去掉名为invoker的的注释符即可;而在tomcat5中,除此之外,你还要去掉同名的的注释符。

另附:tomcat4最高版4.1.30 , tomcat5最新版5.0.27 均可在tomcat官方地址下载
http:// http://jakarta.apache.org/site/binindex.cgi下载

==================================================

查看tomcat 的release-note( 我用的版本: 5.0.25), 会发现如下一段:

------------------------
Enabling invoker servlet:
------------------------

Starting with Tomcat 4.1.12, the invoker servlet is no longer available by
default in all webapps. Enabling it for all webapps is possible by editing
$CATALINA_HOME/conf/web.xml to uncomment the "/servlet/*" servlet-mapping
definition.

Using the invoker servlet in a production environment is not recommended and
is unsupported.

另外,我在阅读<core servlet and java server pages: 2nd editon> 时,书中只是在轻描淡写的说了一句与 /servlet 映射相关的话。这点,不知难倒过多少英雄!

正常的情况下是:不管你把JSP放到哪里,都可以指向servlet
作为一个程序员 ,我给你一个建议,
你提交的目录,最好使用相对于项目根目录的绝对路径。这样肯定没有问题。

项目名为ABC,根URL为/ABC
那么提交的时候,form的action里就写/ABC/servlet
不要写成servlet或者/servlet
同样,servlet跳转会jsp的时候,也要写/ABC/jsp/Login.jsp
(假设你的jsp放在根目录的jsp文件夹下。)

这样不管你的jsp放到哪里都是可以的。
还要注意一个问题,就是dispatcher的forward和response.sendRirect。他们都用来跳转jsp和servlet。但他们是不同的。
不同点在于
1:sendRirect是重定向,这时候 ,上一个request带过来的参数会全部丢失。如要在请求里加新的参数,请在url后面跟上参数。例如response.sendRirect("/ABC/jsp/login.jsp?name="+name);
forward是跳转,参数还保留在request里。

2:sendRirect的根路径是相对于服务器而言,假设你的服务器根路径是http://localhost:8080/
那么response.sendRirect("/ABC/jsp/login.jsp?");
就相当于跳到http://localhost:8080/ABC/jsp/login.jsp

forward的根路径是相对于项目的根路径而言
resquest.getRequestDispatcher("/ABC/jsp/login.jsp");
相当于跳到http://localhost:8080/ABC/ABC/jsp/login.jsp
注意,路径出错了,所以应该这样写
resquest.getRequestDispatcher("/jsp/login.jsp");
相当于跳到http://localhost:8080/ABC/jsp/login.jsp

顺带一提:<a href="/ABC/jsp/login.jsp">登录</a>
<form action="/ABC/servlet/login">
这些链接跟sendRirect是一样的,根路径是服务器的根路径。
我认为你的错,就是错在没有理解这些路径的区别。

你可能感兴趣的:(tomcat,xml,jsp,Web,servlet)