ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Java WEB开发实战 之 第三部分:Servlet开发(1)【私塾在线 原创】

Java WEB开发实战 之 第三部分:Servlet开发(1)【私塾在线 原创】

原创 Linux操作系统 作者:啸傲1 时间:2012-02-29 14:40:45 0 删除 编辑
Servlet是什么

是在服务器上执行的Java组件,也可以说是在服务器上执行的小应用程序
Web应用的请求/应答模式 (画图说明)
 
关于Web应用的请求/应答模式的说明:

1:Web应用的请求/应答大多数基于Http协议
2:一次Http调用指的是一个请求和应答的来回
3: Http协议是面向连接的,指在一个请求和应答的来回之间保持连接,请求时打开连接,响应完后关闭连接,所以也有的资料说“HTTP是无连接的”
   4: Http协议是无状态的,服务器在发送应答后,不会保留关于客户端的任何信息,因此也无法分辨来自于同一客户端的多个请求是相关的
注意:就算是客户端和服务器位于同一台机器上,仍然是要通过网络来运行的
Servlet是什么(完整的)
Servlet能干什么
Servlet主要完成如下工作:接收、处理HTTP请求 和 动态生成HTTP响应
Web容器
Servlet运行在Web容器之上, Web容器是一个特殊的JVM,负责维护Servlet的生命周期及为每个请求生成线程
 
常用Servlet的API——javax.servlet包
 
 
注意:上面只是罗列的一些基本的API,不是Servlet全部的API
要研究怎么做,必然先要搞清楚到底要做些什么
一:当然首先是构建开发和运行环境,然后才会涉及具体的开发
1: 开发环境,Eclipse(初次学习期间不许用:MyEclipse,Dreamweaver之类的工具,也不要使用Eclipse的插件)
在Eclipse里面建一个新的Java工程,把tomcat/lib下的servlet-api.jar包引入到工程的library中即可
2: 运行环境:Tomcat,解压即可,配置好正确的JAVA_HOME,某些机器可能需要配置其他的,看运行提示
 
二:大家按前面讲过的组件体系结构,仔细思考一下,开发Servlet到底要做些什么
1:组件类——MyServlet类
2:部署描述文件——web.xml
3:把组件部署到服务器上
4:测试所写的组件是否能正确运行——在客户端也就是浏览器里面测试
 
war包:Web应用归档文件,结构如下
XXX.war
     --WEB-INF
        --web.xml (必须)
        --classes (可选,如果有的话,用来放web应用需要的类包)
        --lib (可选,如果有的话,用来放web应用需要的其他的jar包)
njar包:Java归档文件,结构如下:
XXX.jar
     --META-INF
        --MANIFEST.MF(描述Jar文件的一些属性和配置)
near包:企业应用归档文件,结构如下:
XXX.ear
     --META-INF
        --application.xml(描述ear文件所包含的多个war或者jar,还有liberary)
 
 
常用的HTTP提交方法为post和get,最典型的GET方法:
1:用户在页面点击超链接
2:用户直接在浏览器地址栏输入URL
HTTP请求格式
请求方法  URL  HTTP协议的版本号 
提交的Head区信息 
**空行** 
客户端请求提交的数据,示例如下:
GET /servlet/examples.web.HelloServlet HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.76 [en] (X11; U; SunOS 5.8 sun4u)
Host: localhost:8088
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/
Accept-Encoding: gzip
客户端请求提交的数据
nHTTP应答格式
HTTP协议的版本号 应答状态码 应答状态码说明 
应答的Head区信息 
**空行**
返回的数据,示例如下:

java代码:
Content-Type: text/html
Date: Tue, 10 Apr 2001 23:36:58 GMT
Server: Apache Tomcat/4.0-b1 (HTTP/1.1 Connector)
Connection: close


Hello Servlet


Hello World

 
那么到底应该如何写一个基本的Servlet类呢?看个例子:

java代码:
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
 HttpServletResponse response)  throws IOException {
      response.setContentType(“text/html”);
      PrintWriter ut = response.getWriter();
      out.println(“”);
      out.println(“”);
      out.println(“Hello Servlet”);
      out.println(“”);
      out.println(“”);
      out.println(“Hello, World”);
      out.println(“”);
      out.println(“”);
      out.close();
  }
}
 
总结一下:
1:写一个类,扩展HttpServlet类
2:实现doGet或doPost之类的方法
3:每个Servlet要求有一个public的、空参的构造方法
 
大家看看,写一个基本的Servlet是不是特别的简单呢?
有同学会说,那方法里面怎么写啊,不着急,写句打印就可以了。里面具体的怎
么写,待会儿再来研究
在web.xml中,配置示例如下:

java代码:

     Hello
     examples.web.FormBasedHello
     


      Hello
      /test
Web应用上下文名:由于一个web服务器上可以发布很多的Web应用,为了区分开这些应用,使用Web应用上下文名
Web应用上下文名默认就是Web应用的war包名称,可以被更改
Web应用上下文名通过URL中的第一个“层次”标识
URL的语法如下:
http:// host: port/ context/ path/ file
示例:http://localhost:8080/mytest/book/booklist.html
ROOT的Web应用没有上下文名
在浏览器的地址栏输入:http://localhost:8080/mytest/test进行测试,然后可以在服务器tomcat的控制台看到输出了
 
   注意:如果servlet类里面只是打印了一句话的话,那么此时IE是一片空白
对于Html的Form标记,有两个基本的属性如下:
ACTION– 指定form信息的目的地(相关的URL)
METHOD – 指定HTTP方法(GET或POST)
语法:
说明: servlet-URL配置的时候,要带上web应用上下文名,否则服务器不知道到底要访问哪一个应用了,比如前面的示例:“myweb/test”
GET与POST的选择
HTTP GET方法用于:
Form数据量小、数据的内容应在URL中可见
HTTP POST方法用于:
请求的处理过程改变服务器的状态(如在数据库中存储数据)、Form数据量大、数据的内容应在URL中不可见(如,口令)
Servlet通过HttpServletRequest来获取客户端的数据,根据前面的讲解可以看出,请求里面带着两部分数据,分别是Head区数据和应用数据(也就是客户端通过html的form提交的数据,也可以是直接get传递的参数)
HttpServletRequest API
   可以从请求对象中访问Head区的数据

java代码:
  getHeader(name) : String
getHeaders(name) : Enumeration
getHeaderNames() : Enumeration
getIntHeader(name) : int
getDateHeader(name) : Date
   可以从请求对象中访问HTML form参数
getParameter(name): String
getParameterValues(name): String[]
getParameterNames(): Enumeration
 
Servlet通过HttpServletResponse来向客户端返回数据

java代码:
HttpServletResponse API
setContentType(String MIME_type)
getWriter() : PrintWriter
getOutputStream() : ServletOutputStream
addHeader(name:String, value:String)
addIntHeader(name:String, value:int)
addDateHeader(name:String, value:Date)
说明: getWriter() 和getOutputStream() 只能二选一,不可以同时使用

视频配套PPT,视频地址【 Java WEB开发实战视频课程 】

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26715443/viewspace-717361/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-29

  • 博文量
    11
  • 访问量
    4539