1、
(1)我们在http://localhost/ch06/welcome.html中定义了这么一个表单:
<form action="com.hw.welcome" method="get">
<input type="submit" value="提交">
</form>
实际上当我们单击提交时,url变成了
http://localhost/ch06/com.hw.welcome?user=“xxx”,既将数据传送给相应的servlet进行处理。
(2)所以我们在web.xml必须声明了com.hw.welcome这个servlet,来看下:
<!-- welcome -->
<servlet>
<servlet-name>mywelcome</servlet-name>
<servlet-class>WelcomeYou</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mywelcome</servlet-name>
<url-pattern>/com.huawei.welcome</url-pattern>
</servlet-mapping>
上面的声明是正确的,所以“在web.xml必须声明了com.hw.welcome这个servle”这句话是不确切的,因为我们声明的servlet的名字并不是com.hw.welcome,而是mywelcome;
所以,确切的说,应该是”我们必须在web.xml中声明了具有 和Action所指定的值相同的<url-pattern>的servlet“。
(3)我们知道,本质上我们都是通过浏览器来访问servlet的,它的查找顺序如下:
<url-pattern>------------- <servlet-name>------------------<servlet-class>
既通过url最后找到了所要调用的servlet类。
2、Servlet容器是通过Java的反射API来创建Servlet实例,调用的是Servlet的默认构造函数,也就是不带参数的构造函数,所以我们在编写Servlet类的时候,不应该提供带参数的构造函数。
3、个人觉得把
<servlet-name>设置为<servlet-class>的类名是一个好的习惯。
4、out.close()用来关闭输出流对象,一旦关闭,响应将被提交。
5、在%CATALINA_HOME%\conf\[enginename]\[hostname]\目录下建立的XML文件的文件名将作为Web应用程序的上下文路径,不管你在属性path中指定的上下文路径是什么。----至少在笔者6.0.33版本如此。
6、
(1)将一个web应用程序打包成war包:
cmd到该应用程序的根目录下(如ch06目录),运行命令:
jar -cvf ch06.war *
(2)查看war包中的内容:
jar -tf ch06.war 也可以使用WinRAR查看
(3)javac -d CounterServlet.java
使用-d选项,会按照Java源文件中定义的包的层次生成对应的目录层次
7、如果在XML文档中使用了中文字符(注释除外),需要在XML文档的第一行XML声明中,指定该文档的编码为gb2312:
<?xml version="1.0" encoding="gb2312" ?>
8、