servlet 学习笔记
自序
昨天心情有些失落。公司从去年底到现在就没有安排我做个正事,(也没有我什么事情,研发部门当产品出来后,还有什么好研发呢,无非就是修改 BUG ,做些维护)。没有事情的情况下,被拉着做测试。测试的内容也就是 GIS 的客户端,功能没有几个,测试很枯燥,被叫着翻来覆去做同一件事。郁闷的是部门经理的座位在我后面,虽然隔了有 4 米 左右距离,但是他完全能看到我在做什么事情。他批评了我好几次“该做什么就做什么。叫你做什么就做什么。”不说了,我并不喜欢发牢骚……
鉴于工作中的种种因素,我想跳槽,换个环境。换工作,我是 java 程序员,而目前的工作无非就是写 UI , swing 编程。类似的工作可不那么好找,而且也打算多长点见识。所以决定离开成都去北京找工作,而且找 J2EE 方面的。辞职前我打算做个 JSP 方面的小应用、再把 JAVA 好好复习一遍这样才对新工作有所准备。
说做就做吧。先学习 JSP (毕业前,曾自学过一点点),学习 JSP 前,有必要学习 servlet 。这就有了这一系列学习笔记……
<!--[if !supportLists]--> 1. <!--[endif]--> 什么是Servlet?
Java Servlet ( java 服务器小程序)是一个基于 Java 技术的 Web 组件,运行在服务器端,由 Servlet 容器所管理,用于生成动态的内容。
<!--[if !supportLists]--> 2. <!--[endif]--> servlet和applet区别?
相同点:
<!--[if !supportLists]--> ² <!--[endif]--> 他们都不是独立的应用程序,都没有main()方法;
<!--[if !supportLists]--> ² <!--[endif]--> 他们都生存在容器中,applet运行在浏览器中,servlet运行在servlet容器中。
<!--[if !supportLists]--> ² <!--[endif]--> 他们都有生命周期,都有init()和destroy()方法;
不同点:
<!--[if !supportLists]--> ² <!--[endif]--> applet具有图形界面,运行在客户端,servlet没有图形界面,运行在服务器端的servlet容器中。
我写的 applet 要多点,这样对比有利于自己更好的掌握 servlet 技术。
<!--[if !supportLists]--> 3. <!--[endif]--> hello world
说句废话:买的书《 JAVA WEB 开发详解》,孙鑫编著,感觉讲得不好, servlet 简直就是在介绍 api 手册。
我总结的时候,自然不能这样。还是介绍个入门例子吧。
先说下环境变量,要编译 servlet 需要把必要的 jar 设置到 classpath 中。我的环境变量是这样设置的。(这里我把 jar 拷贝到了 jdk 目录下面)
.;D:\jdk\lib\dt.jar;D:\jdk\lib\tools.jar;D:\jdk\jre\lib\rt.jar;D:\jdk\lib\servlet-api.jar;D:\jdk\lib\jsp-api.jar;
第一个程序—— test.java
import javax.servlet.ServletException;
import java.io.*;
import javax.servlet.http.*;
public class test extends HttpServlet
{
public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException
{
PrintWriter out = resp.getWriter();
out.println("hello, world!");
out.close();
}
}
由于设置了环境变量,这里顺利编译通过。
部署 servlet :
在 webapps 目录下,建立一个目录(存储该应用)。如: hello
在该 hello 目录下建立一个特殊目录 WEB-INF ,注意全大写。之所以特殊,因为该目录对客户端不可见。如果你把 index.html 放到 WEB-INF 目录下面,然后通过 http://127.0.0.1:8080/hello/WEB-INF/index.html 访问,这样是访问不到的。
而在 WEB –INF 目录下:
建立 classes 目录来存放编译好的 class 文件。
建立 lib 目录来存放运行所需要的其他包。
建立重要的 web.xml 配置文件。
web.xml 可以包含如下的配置和部署信息:
<!--[if !supportLists]--> ² <!--[endif]--> ServletContext的初始参数;
<!--[if !supportLists]--> ² <!--[endif]--> Session的配置;
<!--[if !supportLists]--> ² <!--[endif]--> Servlet/Jsp的定义;
<!--[if !supportLists]--> ² <!--[endif]--> Servlet/Jsp的映射;
<!--[if !supportLists]--> ² <!--[endif]--> MIME类型映射;
<!--[if !supportLists]--> ² <!--[endif]--> 欢迎文件列表;
<!--[if !supportLists]--> ² <!--[endif]--> 错误页面;
<!--[if !supportLists]--> ² <!--[endif]--> 安全;
<!--[if !supportLists]--> ² <!--[endif]--> 地区和编码映射;
<!--[if !supportLists]--> ² <!--[endif]--> jsp配置。
我们编写的 xml 必须是格式良好的 xml 。 web.xml :
<?xml version =”1.0” encoding=”ISO-8859-1”?>
<web-app>
<servlet>
<servlet-name>helloworld</servlet-name>
<servlet-class>test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloworld</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
这样输入:“ http://127.0.0.1:8080/hello/hello “就访问到了刚才写的 servlet 。
再介绍一种访问 servlet 方式: telnet 方式
telnet localhost 8080
回车,输入
GET /hello/hello HTTP/1.1
Host:localhost
dos 窗口下将显示 hello , world
如果要用 servlet 处理表单提交的信息,表单提交方式一般情况分 get 、 post 。相应的我们就应该覆盖 HttpServlet 中的 doGet ()、 doPost ()方法。表单中 action 写 servlet 的 url-/pattern 值。
值得注意的是: web.xml 在 servlet 2.2 、 2.3 规范中都由 DTD 定义,所有有元素间严格的顺利关系,而 servlet2.4 规范中, web.xml 文件改为, xml schema 来定义文档的结构,其中一个好处是元素出现的顺序不再有严格的限定。如果要兼容低版本的,还是得有严格的顺序关系。
提示一旦修改过 servlet 就应该重启 tomcat 。
posted on 2007-03-09 10:48
-274°C 阅读(2332)
评论(6) 编辑 收藏 所属分类:
JSP