Java Servlet 应用小实例

  • 内容
  • 评论
  • 相关

相信很多开发web的人都使用过php,python,ruby等这些解释型语言,人们坚信的认为这些语言来开发web更加快捷,方便,那其实语言本身无可厚非,都是和计算机对话罢了,无论是最初模拟计算机的汇编还是到现在的图形编程,都只有一种语言,就是计算机语言。Java Web其实也是一个广为使用的分支,今儿我们就举一个Java Servlet的小例子,如果你使用其他语言开发过web,那么Servlet同样不难理解,完全一样的道理。
首先我们的要建立web目录,这个目录在tomcat的安装目录/webapps,我们在这个目录下建立一个文件夹test,然后新建一个test.java文件,写入如下代码:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class test extends HttpServlet {
  public void doGet(HttpServletRequest req, HttpServletResponse res)
                               throws ServletException, IOException {
    res.setContentType("text/html");
    PrintWriter out = res.getWriter();
    out.println("<HTML>");
    out.println("<HEAD><TITLE>Hello World</TITLE></HEAD>");
    out.println("<BODY>");
    out.println("<BIG>Hello World</BIG>");
    out.println("</BODY></HTML>");  
    out.close();
  }
 public void doPost(HttpServletRequest req, HttpServletResponse res)
                              throws ServletException, IOException  {
                         doGet(req, res); 
  }
}

以上我们实际上是实现了javax.servlet.Servlet接口的类,我们覆盖了HttpServlet的doGet()方法,用于对GET请求方法做出响应。在doGet()中,首先通过HttpServletResponse类的getWriter方法调用得到一个PrintWriter类型的输出流对象out,然后调用out的println()方法向客户端发送数据。
这里我们需要用到一个jar文件就是tomcat安装目录下的lib文件夹的servlet-api.jar文件,我们将这个文件加到环境变量或者将文件直接复制到jdk安装目录的类库扩展文件夹:D:\Program Files\Java\jdk1.7.0_17\jre\lib\ext。
然后我们进入这个文件的目录,在命令行下编译生成class文件。接下来我们在test下面建立文件夹WEB-INF,在WEB-INF下面建立文件夹classes,将刚才编译好的class文件放到classes文件夹,在WEB-INF文件夹下建立web.xml文件并且输入如下内容:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <servlet>
        <servlet-name>TestName</servlet-name>
        <servlet-class>test</servlet-class>
    </servlet>
   
    <servlet-mapping>
        <servlet-name>TestName</servlet-name>
        <url-pattern>/myweb</url-pattern>
    </servlet-mapping>
</web-app>

以上文件第一行是XML声明,在跟元素web-app上声明了XML Schema的命名空间。
注意这个文件,使用了以及其子元素来部署test这个Servlet。在这个文件中可以包含多个,用于部署多个Servlet。
元素用于声明Servlet,子元素用于指定Servlet的名字,在同一个web应用程序中,每一个Servlet的名字必须是唯一的,该元素不能为空。子元素用于指定Servlet类的完整限定名(如果有包名,也就是package,同时给出包名)。
用于定义Servlet和URL之间的映射。其子元素指定的Servlet名字必须和中的子元素给出名字一致,用于指定Servlet的URL路径,此路径是相对于web应用程序的路径。
okay,你的tomcat开起来,我们可以这样访问你的web程序了:

http://localhost:8080/test/myweb

再给出一个提交表单的小例子:
在webapps/test文件夹下面建立form.html文件:

<html>
    <head>
        <title>form action</title>
    </head>
    <body>
        <form action="forTest" method="get">
            input name:<input type="text" name="user" value="uusername" />
            <input type="submit" name="submit" />
        </form>
    </body>
</html>

在此目录下再建立Form.java文件:

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;
public class Form extends HttpServlet{
    public void doGet(HttpServletRequest req,HttpServletResponse resp)
        throws ServletException,IOException{
        String user = req.getParameter("user");
        String info = "hello " + user;
        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();
        out.println("<html><head><title>");
        out.println("form page");
        out.println("</title></head>");
        out.println("<body>");
        out.println(info);
        out.println("</body></html>");
        out.close();
    }
}

然后进入文件所在目录编译生成Form.class文件,将其复制到tomcat安装目录\webapps\test\WEB-INF\classes下面,同时编辑配置文件web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <servlet>
        <servlet-name>TestName</servlet-name>
        <servlet-class>test</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>FormName</servlet-name>
        <servlet-class>Form</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TestName</servlet-name>
        <url-pattern>/myweb</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>FormName</servlet-name>
        <url-pattern>/forTest</url-pattern>
    </servlet-mapping>
</web-app>

然后输入http://localhost:8080/test/form.html,出现表单,输入用户名gavin后点击submit之后就会get到http://localhost:8080/test/forTest?user=gavin&submit=%CC%E1%BD%BB%B2%E9%D1%AF,然后出现程序中的回应信息:hello gavin。
这里需要注意一个问题,servlet2.4规范中,因为是使用XML Schema 定义文档结构的,因此web.xml文件中元素的出现顺序无严格限定,而2.2和2.3中,因为是用DTD来定义文档的,servlet必须出现在servlet-mapping之前。

评论

0条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注