Servlet常用接口、类及其方法
在Web编程中使用servlet时,开发者主要用到doGet和doPost方法。当发出客户端请求的时候,调用Servlet的service方法并传递一个请求和响应对象。Servlet首先判断该请求是GET操作还是POST操作。然后分别调用doGet或doPost方法。doGet和doPost都接受请求(HttpServletRequest)和响应(HttpServletResponse)。
GET请求:表单和地址栏都是GET请求。
POST请求:只有表单请求。
-
doGet()
当客户端发送HTTP请求使用GET方法时就调用doGet()方法。HTTP缺省方法就是GET。
public class DoGetServlet extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
request.setCharacterEncoding("gb2312");
PrintWriter out = response.getWriter();
out.println("The user ID is :"+request.getParameter("userID"));
out.println("The user password is :"+request.getParameter("userPWD"));
}
}
-
doPost()
当客户端发送HTTP请求使用POST方法时就调用doPost()方法。Post适合发送大量的数据.
public class DoPostServlet extends HttpServlet { public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { request.setCharacterEncoding("gb2312"); PrintWriter out = response.getWriter(); out.println("The user ID is :"+request.getParameter("userID")); out.println("The user password is :"+request.getParameter("userPWD")); } }
HttpServletRequest接口
1)getParameter()
public String getParameter(String key)
此方法试图将根据查询串中的关键字定位对应的参数并返回其值。如果有多个值则返回列表中的第一个值。如果请求信息中没有指定参数,则返回null。
2)getParameterValues():
public String[] getParameterValues(String key)
如果一个参数可以返回多个值,比如复选框集合,则可以用此方法获得对应参数的所有值。如果请求信息中没有指定参数,则返回null。
HttpServletResponse接口
1)setContentType():
public void setContentType(String type)
在给调用者发回响应前,必须用此方法来设置HTTP响应的MIME类型。可以是任何有效的MIME类型,当给浏览器返回HTML是就是”text/html”类型。
2)getWriter():
public PrintWriter getWriter()throws IOException
此方法将返回PrintWriter对象,把servlet的结果作为文本返回给调用者。PrintWriter对象自动把Java内部的UniCode编码字符转换成正确的编码以使客户端能够阅读。
3)getOutputStream():
public ServletOutputStream getOutputStream() throws IOException
此方法返回ServletOutputStream对象,它是java.io.OutputStream的一个子类。此对象向客户发送二进制数据。
4)setHeader():
public void setHeader(String name,String value)
此方法用来设置送回给客户的HTTP响应头。有一些快捷的方法用来改变某些常用的响应头,但有时也需要直接调用此方法。
Servlet接口 | JSP内置对象 |
---|---|
HTTPServletRequest | request |
HTTPServletResponse | response |
ServletConfig | config |
HTTPSession | Session |
ServletContext | application 两种取得方式(对应两种初始化方法) ①无参数初始化方法:不写,直接取得 ②如果针对有构造(init(ServletConfig))方法则必须通过config对象取得 |
Servlet的环境配置和运行
- web.xml文件
基本的web.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
</web-app>
现在配置一个项目的缺省访问文件。在之前加入以下语句:
<welcome-file-list>
<welcome-file>exa.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
这几句设置,意思是当IE中输入http://127.0.0.1:8080/xxx(或其他域名、IP地址输入形式)而不输入Web页文件名时,查找调用页面文件的顺序为exa.htm→index.htm→index.jsp,找到那一个,就显示那一个;没有找到,就出现访问资源不存在的错误 或者列出目录下的所有文件和子目录。缺省访问文件的配置不是必需的。
Servlet要在web.xml中注册了才能访问。现在举一个最简单的例子。
例 一个最简单Servlet,文件名ServletExample.java,代码如下:
经过编译,按其中包的定义(package exa;)形成字节码文件ServletExample.class,放在chpt/WEB-INF/classes中,则在web.xml中注册的语句可以写成:
<servlet>
<servlet-name>ServletExample</servlet-name>
<servlet-class>exa.ServletExample</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletExample</servlet-name>
<url-pattern>/servexa</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletExample</servlet-name>
<url-pattern>/newunknownUniversity.edu.cn</url-pattern>
</servlet-mapping>
如图所示,两个映射地址访问的效果是一样的。
映射访问地址只是一种形式,可以随意定义,只要第一个字符是“/”,且不与其他资源重名就可以。允许多次映射,使得资源可以用多种形式访问。
注意: 每次修改web.xml文件后,都要重启服务器,这样新的配置才可以起作用。