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]--> servletapplet区别?

 

相同点:

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


FeedBack:
# re: servlet学习笔记(1)
2007-03-09 11:02 | 坏男孩
up!  回复  更多评论
  
# re: servlet学习笔记(1)
2007-03-09 11:09 | αβγ
我是一边看书,一边实践,一边总结的。呵呵,白天上班没有时间学习,只有晚上回去能看下书。打算用比较快的速度把jsp看了,做个小的应用。这样把知识应用在实践中,也便于深刻掌握。做完这一步,再往下走。其实得感谢各位朋友的支持,让我更爱总结,写blog促进了学习啊。  回复  更多评论
  
# re: servlet学习笔记(1)
2007-03-09 11:17 | DoubleHeart
只有这些,你的工作还会不好找
你应该多学一些思想与架构的东西  回复  更多评论
  
# re: servlet学习笔记(1)
2007-03-09 11:30 | αβγ
做完这步,打算学习筐架、架构。  回复  更多评论
  
# re: servlet学习笔记(1)
2007-03-09 11:48 | L
现在java程序员遍地都是,你离开成都来北京要考虑清楚啊。  回复  更多评论
  
# re: servlet学习笔记(1)
2007-03-09 14:05 | BeanSoft
面试必备题目(虽然不一定常用, 仅用于面试, 面试就是把人搞的都不会然后砍价, 当然您可以讲我可以查资料完成, 但是面试的时候就是没道理的):
request.getAttribute() 和 request.getParameter() 有何区别?
response.sendRedirect() 和 forward() 区别?
<%@include file="xxx.jsp"%>
和 <jsp:include> 区别?
List 和 Map 区别?
Struts 和 Spring 自动填充表单参数到 Bean 的大致原理?
说一下你用的 Spring + Hibernate 的方框图? 您都用到了哪些部分?

try {
Connection conn = ...;
Statement stmt = ...;
} catch(Exception ex) {
}

这段代码有什么不足之处?

HTML 的 form 提交之前如何验证数值不为空? 为空的话提示用户并终止提交?  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

常用链接

留言簿(21)

随笔分类(265)

随笔档案(242)

相册

JAVA网站

关注的Blog

搜索

  •  

积分与排名

  • 积分 - 911937
  • 排名 - 40

最新评论