zoukankan      html  css  js  c++  java
  • 12.10

     今天学了

    编写 Servlet
    根据要完成的功能来编写 Servlet。功能确定之后,根据 Servlet 的框架来编写 Servlet。
    这里主要关注编写 Servlet 的一般过程。
    因为 Servlet 是 Java 类,所以它与一般的 Java 类的编写基本相同。具体步骤如下:
    (1) 创建一个包。假设包名是 servlets,创建包的代码如下:
    package servlets;
    (2) 导入用到的包。需要导入的包有 javax.servlet.*和 javax.servlet.http.*,通常还需要导
    入的包是 java.io.*。代码如下:
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    (3) 定义类的基本框架并继承 HttpServlet。每个 Servlet 都必须实现接口 Servlet,而这
    里要编写的 Servlet 主要是用于 HTTP 协议的,可以继承实现了 Servlet 接口的 HttpServlet。
    代码如下:
    public class HelloServlet extends HttpServlet
    {
    }

     (4) 编写成员方法。Servlet 通常不需要成员变量,成员方法包括 init、service、destroy
    等。如果需要对 Servlet 进行初始化,则需要实现 init 方法。如果需要在卸载 Servlet 的时候
    执行一些功能,则需实现 destory 方法。一般情况下,根据需要完成的功能只需要实现服务
    类方法即可。这里只实现 doGet 方法。服务类方法有两个参数:第一个参数是
    HttpServletRequest 的对象,该参数包含了用户的所有请求信息,要想获取用户的请求信息,
    必须使用该对象提供的方法;第二个参数是 HttpServletResponse 的对象,可以通过这个对
    象对用户进行响应,如果希望对用户进行响应或者设置响应相关的信息,需要使用该对象
    的方法。
    该实例完成的功能是向用户输出一行文字,所以不需要获取用户的请求信息,只需要
    对用户进行响应即可。在对用户进行响应的时候,需要设定文档类型以及编码方式等,就
    像在 JSP 中每个文件都要设置 page 标签的 contentType 属性一样。之后要向用户输出一些内
    容,需要先获取输出流。响应页面的属性设置和输出流的获取都是与响应相关的,需要使
    用第二个参数来完成。
    代码如下:
    public void doGet(HttpServletRequest request,HttpServletResponse)
     throws IOException,ServletException
    {
     response.setContentType("textml;charset=gb2312");
     PrintWriter out = response.getWriter();
     out.println("<html>");
     out.println("<head><title>Hello World!</title></head>");
     out.println("<body>");
     out.println("<p>Hello World!</p>");
     out.println("</body><ml>");
    }
    从代码可以看出,如果使用 Servlet 完成对用户的响应,所有的响应内容,包括格式信
    息等都要通过输出语句进行输出。要是使用 JSP 完成这个功能,就非常简单了。正因为这
    个原因,才推出了 JSP 技术,JSP 技术的主要优势就在于与用户进行交互比较方便。所以,
    如果要完成的功能是与用户进行交互,则应该使用 JSP 完成。在本书的后续内容中,使用
    Servlet 技术主要完成控制功能。
    为了使这个 Servlet 能够响应 post 请求,需要实现 doPost 方法,这时只需要调用 doGet
    方法即可。代码如下:
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
     doGet(request, response);
    }
    需要把这两个方法添加到前面定义的类 HelloServlet 中。 
     2. 编译 Servlet
    Servlet 开发所需要的包有 javax.servlet.*和 javax.servlet.http.*。这些包不是 Java 标准版
    的类库,如果没有安装 Java EE 开发环境,则需要配置环境变量。这些包位于 tomcat 安装
    目录下的 lib 下的 servlet-api.jar 压缩包中,需要把这个压缩包添加到环境变量中。
    假设 servlet-api.jar 所在的位置为 C:Program FilesApache Software FoundationTomcat
    6.0lib,需要在环境变量 classpath中添加 C:Program FilesApache Software FoundationTomcat
    6.0libservlet-api.jar。
    注意:不要删除 classpath 中原来的信息,如果不存在 classpath 环境变量,可以创建一
    个 classpath。
    环境变量设置好之后,使用 JDK 中的 javac 命令编译:
    javac HelloServlet.java
    3. 配置 Servlet
    Servlet 编写完之后,作为 Web 应用的组成部分,需要在配置文件 web.xml 中进行配
    置。Servlet 的配置包括两部分,第一部分是 Servlet 的声明,第二部分是 Servlet 访问方
    式的设置。
    首先是 Servlet 的声明,使用<servlet>元素:
    <servlet>
     <servlet-name>hello<rvlet-name>
     <servlet-class>servlets.HelloServlet<rvlet-class>
    <rvlet>
    <servlet-name>用于声明 Servlet 的名字,这里,hello 是 Servlet 的名字;<servlet-class>
    用于声明 Servlet 所对应的类,这里,servlets.HelloServlet 是这个 Servlet 所对应的类名。
    注意:包名不能缺少。
    然后是 Servlet 映射,主要配置访问该 Servlet 的方式,使用<servlet-mapping>元素:
    <servlet-mapping>
     <servlet-name>hello<rvlet-name>
     <url-pattern>/hello</url-pattern>
    <rvlet-mapping>
    <servlet-name>表示 Servlet的名字,需要和上面的 Servlet声明保持一致;<url-pattern>
    表示访问时候的格式,例如要访问上面这个 Servlet 需要使用 hello 作为名字访问。
    servlet-name 和 url-pattern 可以不相同。服务器接收到请求之后会根据这个 url-pattern 查
    找相应的 Servlet。
    4. 部署 Servlet
    Servlet 编写完成之后,需要部署到服务器才能访问,编译好的文件需要放在 Web 应用
    的 WEB-INFclasses 下面。
    5. 访问 Servlet
    对 Servlet 的访问与对 JSP 的访问基本相同,可以通过以下三种方式进行: 

    (1) 通过在浏览器中直接输入地址访问:
    http://127.0.0.1:8080/test/hello
    (2) 通过超链接的形式访问:
    <a href ="http://127.0.0.1:8080/test/hello">第一个 Servlet</a>
    (3) 通过表单提交的方式访问:
    <form method=get action="http://127.0.0.1:8080/test/hello">

  • 相关阅读:
    [BZOJ4876][ZJOI2017]线段树
    [FJOI2016]建筑师(斯特林数)
    WC2018伪题解
    [BZOJ3514]CodeChef MARCH14 GERALD07加强版(LCT+主席树)
    [BZOJ2594][WC2006]水管局长加强版(LCT+Kruskal)
    [洛谷3796]【模板】AC自动机(加强版)
    [洛谷3808]【模板】AC自动机(简单版)
    [BZOJ3261]最大异或和
    [BZOJ3439]Kpm的MC密码
    [POI2006]Periods of Words
  • 原文地址:https://www.cnblogs.com/dty602511/p/14173767.html
Copyright © 2011-2022 走看看