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快速教程”系列文章

 

时间: 2024-10-26 12:07:47

Java网络03 Servlet沙拉的相关文章

Java网络02 Servlet开胃酒

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   在Tomcat初次尝试中,我们搭建了用于测试Servlet和JSP的基本环境.我们现在要转向网络应用的具体开发.   厨师 Web服务器的基本工作方式是请求-处理-回复.请求和回复是在网络上,以HTTP协议为基础的通信(参考HTTP协议).请求是客户点菜,回复像是服务员上菜,而处理则是在后厨中,厨师根据请求的菜单,准备菜品的过程. 厨师通常是服务器上的一个应用程序.这个应用程

Java网络学习(三) Servlet沙拉

Servlet开胃酒中介绍了Servlet的基本流程和设置方式.这里,我们将看一些Servlet实例.这些实例都是HTTP通信(参考HTTP协议:http://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html)中的常见问题.我们通过操作request和response,来实现HTTP协议的功能. 生成页面 Servlet的目的是动态生成页面.比如下面的例子: package foo; import javax.servlet.*; imp

Java网络学习(二) Servlet开胃酒

在Tomcat初次尝试中,我们搭建了用于测试Servlet和JSP的基本环境.我们现在要转向网络应用的具体开发. 厨师 Web服务器的基本工作方式是请求-处理-回复.请求和回复是在网络上,以HTTP协议为基础的通信(参考HTTP协议).请求是客户点菜,回复像是服务员上菜,而处理则是在后厨中,厨师根据请求的菜单,准备菜品的过程. 厨师通常是服务器上的一个应用程序.这个应用程序可以提取请求中的信息,并根据这些信息准备回复.这样的应用程序可以是许多中语言写成的,比如C, C++, Perl, Ruby

JAVA网络编程之模拟表单提交

这一篇博客是对上一篇<JAVA网络编程之获取网络资源>的扩充,这一篇将使用HttpURLConnection来模拟一个表单的提交.在B/S架构的系统中,请求时通过浏览器与服务端进行交互的,提交请求参数时使用form表单进行提交,但是有很多时候,我们需要在程序中直接调用HTTP接口,同时需要传递一些参数,那么这个时候我们就可以通过使用HttpURLConnection来模拟表单的提交过程. 首先,我们可以对请求进行封装 import java.util.ArrayList; import jav

java网络传递对象时该对象继承父类的属性在网络接收端接收该属性值总是null,why?

问题描述 java网络传递对象时该对象继承父类的属性在网络接收端接收该属性值总是null,why? //=========================== 情形一: ===============================//在网络上传递User1类对象时info属性值在网络的另一端能够接收到! public class User1 implements Serializable { public String info = null; public String userName =

Java网络服务器编程(NIO版)

编程|服务器|网络 从Java 1.4开始提供的NIO API常用于开发高性能网络服务器,本文演示了如何用这个API开发一个TCP Echo Server.   Java网络服务器编程 一文演示了如何使用Java的Socket API编写一个简单的TCP Echo Server.其阻塞式IO的处理方式虽然简单,但每个客户端都需要一个单独的Thread来处理,当服务器需要同时处理大量客户端时,这种做法不再可行.使用NIO API可以让一个或有限的几个Thread同时处理连接到服务器上的所有客户端.

Java网络编程从入门到精通

Hibernate从入门到精通(十一)多对多双向关联映射 Hibernate从入门到精通(十)多对多单向关联映射 Hibernate从入门到精通(九)一对多双向关联映射 Hibernate从入门到精通(八)一对多单向关联映射 Hibernate从入门到精通(七)多对一单向关联映射 Hibernate从入门到精通(六)一对一双向关联映射 Hibernate从入门到精通(五)一对一单向关联映射 Hibernate从入门到精通(四)基本映射 Hibernate从入门到精通(三)Hibernate配置文

Java网络编程从入门到精通(34)

Java网络编程从入门到精通(34):读写缓冲区中的数据---使用get和put方法按顺序读写单个数据 对于缓冲区来说,最重要的操作就是读写操作.缓冲区提供了两种方法来读写缓冲区中的数据:get.put方法和array方法.而get.put方法可以有三种读写数据的方式:按顺序读写单个数据.在指定位置读写单个数据和读写数据块.除了上述的几种读写数据的方法外,CharBuffer类还提供了用于专门写字符串的put和append方法.在本文及后面的文章中将分别介绍这些读写缓冲区的方法. 虽然使用all

java网络编程的小疑惑

问题描述 java网络编程的小疑惑 在服务器的循环语句中,这段代码只能进行服务器的一次响应 try{ while(true){ **serversocket=new ServerSocket(6000);** socket=serversocket.accept(); Thread workthread=new Thread(new ClientRun(socket)); workthread.start(); } } catch(IOException e){ } finally{ } 当将s