andy_taoke
大家一起来学JAVA
posts - 9,comments - 3,trackbacks - 0
今天动手实践了一下写Servlet的代码,感觉不错.现在写些东西给大家分享一下:

我们是用Servlet的API处理HTTP请求的,现在我给大家看一段代码,它的作用就是在浏览器里面打出一行字,经典的不能再经典(你想说老土我也不反对)就是,Hello,World
package Chap2;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet
{
    // eclipse非要让我加这句话,要么会有一个警告,我看对运行没有什么影响我就加了,不知道哪位高人知道怎么用这个东西
    private static final long serialVersionUID = 1L;

    // 这个方法可以处理GET的请求
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 设置一个Content-Type首部
        response.setContentType("text/html");
       
        // 这个东西就像你拿到了向客户端浏览器写字的一支笔
        PrintWriter out = response.getWriter();       
        // 现在可以往客户端的浏览器写HTML代码了,想怎么写就怎么写,呵呵
        out.println( "<HTML>" );
        out.println( "<HEAD><TITLE>Hello World</TITLE></HEAD>" );
        out.println( "<BODY>" );
        out.println( "<BIG>Hello World</BIG>" );
        out.println( "</BODY></HTML>" );
    }
}

把这个东西发布到你的服务器下面,你就可以看到一行字:Hello,World.
至于怎么配置服务器,近期我会给大家一份资料,里面详细描述了配置JDK+Tomcat+Eclipse+MyEclipse的方法,这些软件都可以到我的网站上去下载,链接在我的签名里面!

下面我们来点动态的东西,做完了以后,学过JSP的人们会发现,这个...不就是JSP么?
对!JSP就是拿这个东西实现的,就如同Windows API和MFC的关系;相信如果你是个肯钻研的主,早就不愿意学MFC那个把你规定的死死的东西了吧.
第二个例子:
package Chap2;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Exp2 extends HttpServlet
{
    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
       
        String name = request.getParameter( "name" );
        out.println( "<HTML>" );
        out.println( "<HEAD>" );
        out.println( "<TITLE>Hello " + name + ".</TITLE>" );
        out.println( "</HEAD>" );
        out.println( "<BODY>" );
        out.println( "Hello, " + name + "." );
        out.println( "</BODY>" );
        out.println( "</HTML>" );
    }
   
    public String getServletInfo()
    {
        return "A servlet that knows the name of the person to whom it's saying hello";
    }
}
这个Servlet可以接受一个name的参数,当然你可以新建一个页面来让用户来提交这个参数.
我给大家一个
<HTML>
    <HEAD>
        <TITLE>Introductions</TITLE>
    </HEAD>
   
    <BODY>
        Exp2
        <FORM METHOD=GET ACTION="servlet/Exp2"> If you don't mind me asking, what is your name?
            <INPUT TYPE=TEXT NAME="name"></P>
            <INPUT TYPE=SUBMIT>
        </FORM>
    </BODY>
</HTML>
纯粹的HTML代码,简单的不能再简单,根据你服务器配置的不同和Servlet存放的地方的不同,你要看你的FORM标签上面那个ACTION属性该怎么填!

Exp2那个Servlet就是接受了一个name的变量,然后叫一下你的名字,问候你下你呵呵.

但是有时候用户会发出一个HEAD请求(客户端只想看到响应的首部时发出的请求),这个东西可能会让你很烦,你心里会说这些人就会给我捣乱,发什么HEAD请求啊!确实这个东西看上去微不足道,也没有doHead()的方法可以使用.任何有子类HttpServlet和实现了doGet方法的servlet都支持HEAD请求.

现在我们看一下处理HEAD请求的工作过程:
HttpServlet的service()方法确定HEAD请求并把它特殊对待。它构建一个修改过的HttpServletResponse对象,并把它和原来的请求一起发给doGet方法(你知道了,我们要在doGet那个东西里面做文章!)。很高兴地告诉你,如果是一个HEAD请求,系统可以为我们自动屏蔽后面的输出,但是如果让我们来做一个判断,你可以提高你的程序性能,也能加深我们对这个Servlet的了解。

我们要在Exp2的doGet()方法中加一句话:
if( request.getMethod().equals( "HEAD" ) ) return;
通过request这个对象我们可以看到客户端的请求类型,如果这个字符串时HEAD,哈哈,干掉他!

但是,即使我们只是处理一个HEAD请求,我们也要设置Content-Type首部。
posted on 2005-12-30 13:32 Fusion KISS 阅读(408) 评论(0)  编辑  收藏

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


网站导航: