zoukankan      html  css  js  c++  java
  • Java网络03 Servlet沙拉

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。

     

    Servlet开胃酒中介绍了Servlet的基本流程和设置方式。这里,我们将看一些Servlet实例。这些实例都是HTTP通信(参考HTTP协议)中的常见问题。我们通过操作request和response,来实现HTTP协议的功能。

     

    生成页面

    Servlet的目的是动态生成页面。比如下面的例子:

    package foo;
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.util.*;
    
    public class TestPage extends HttpServlet {
    
        public void doGet(HttpServletRequest request,
                         HttpServletResponse response)
                    throws IOException, ServletException
        {
            PrintWriter out = response.getWriter();
            Date now = new Date(); // Date & Time
            String page = "<html><body><p>" + now +"</p></body></html>";
            out.println(page);
        }
    
    }


    上面,我们调用response的getWriter()方法,向回复中写入文本,即回复的主体部分。关于Java的读写,可参考Java IO基础

    有时我们主体部分不是文本,这时我们需要OutputStream类型的写入器,通过调用response的getOutputStream()方法来获得。

    我们利用java.util.Date()提供的功能,来动态的生成日期和时间显示。效果如下:

    提交表格

    HTTP请求有POST方法。Servlet通过doPost()方法来处理POST请求。POST方法的目的是向服务器提交数据,特别是HTML的FORM元素中包含的数据。

     

    我们先来编写一个包含有FORM的HTML页面:

    <html>
    
    <body>
      <form action="MyForm" method="post">
        Username: <input type="text" name="user"><br>
        <input type="submit" value="Submit">
      </form>
    </body>
    
    </html>

    页面将提交给MyForm这个URL处理。提交的数据为text类型的user输入。

    下面是TestForm.java代码,该代码编译成的Servlet将对应于MyForm这个URL(在web.xml中设置对应关系,参考Servlet开胃酒)

    package foo;
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    
    public class TestForm extends HttpServlet {
    
        public void doPost(HttpServletRequest request,
                        HttpServletResponse response)
                        throws IOException, ServletException
        {
            String username = request.getParameter("user"); // get "user" input
    
            PrintWriter out = response.getWriter();
            String page = "<html><body><p>Submitted: " + username +"</p></body></html>";
            out.println(page);    }
    }

    在上面的代码中,我们改写的是doPost()方法。此外,我们调用request的getParameter()方法,来获得提交的数据,即user的参数值。我们随后显示了提交的数据。在真实使用情境下,我们可以对该数据进行其他的操作,比如放入数据库。

    显示结果如下:

     

    其它方法

    我们看到,HTTP协议在Servlet中的操作,主要是通过request和response对象实现的。这两个对象分别实施了HttpServletRequest接口和HttpServletResponse接口HttpServletRequest接口继承自ServletRequest接口HttpServletResponse接口继承自ServeletResponse接口

    下面列举一些HttpServletRequest和HttpServletResponse的常用方法。

    HttpServletRequest的方法 (官方参考)

    获得头信息

    String host = request.getHeader("Host");

    获得请求方法

    String method = request.getMethod();

    获得请求中的cookies

    Cookie[] cookies = request.getCookies();

    读取请求中的非文本资源,需要InputStream

    InputStream input = request.getInputStream();

    HttpServletResponse的方法 (官方参考)

    设置MIME类型

    response.setContentType("image/jpeg");

    重新定向

    response.sendRedirect("http://www.google.com");

    设置头信息

    response.setHeader("Server","Apache-Coyote/1.1");

    设置ContentLength

    response.setContentLength();

    设置状态码

    response.setStatus(200);

    总结

    HttpServletRequest和HttpServletResponse是HTTP协议在Servlet中的具体实施。通过调用它们,我们可以在Java内部来使用HTTP协议。对HTTP协议本身的了解,将有助于我们更好的使用这两个接口。

    欢迎继续阅读“Java快速教程”系列文章

    如果你喜欢这篇文章,欢迎推荐

    技术推动进步,分享促进社区。

  • 相关阅读:
    The Game
    棋盘问题(dfs)(类似8皇后)
    dfs---之全排列
    Dijkstra算法(求单源最短路径)
    四点共面 (简单题)
    最长递增子序列
    线段的重叠
    kruskal
    hdu 1232 畅通工程
    无限对拍程序
  • 原文地址:https://www.cnblogs.com/vamei/p/3076903.html
Copyright © 2011-2022 走看看