初识Servlet(一)

简介与准备工作

          Servlet程序运行在Web服务器之上,当客户端发送Http请求时,Servlet程序能产生相应的HTTP文档,并借由服务器返回给客户端。

          为运行Servlet程序,首先需要安装服务器程序,这里假定已经安装了Tomcat7,例如,在Linux系统上Tomcat7的安装位置为 /opt/Tomcat/apache-tomcat-7.0.54

         同样,假定已经配置好Tomcat7的环境变量,现在,启动Tomcat7,例如在Linux系统下,执行以下命令:

                cd /opt/Tomcat/apache-tomcat-7.0.54/bin/

        ./startup.sh 

         在浏览器中输入 http://localhost:8080则可以看到Tomcat7的欢迎页面。

Web程序部署

        首先,需要在Tomcat安装目录的webapps子目录中创建MyWebApp目录,同样,在MyWebApp目录下创建WEB-INF子目录,在WEB-INF目录中创建classes子目录。即形成以下目录层次:

         webapps  ->  MyWebApp -> WEB-INF -> classes

          其次,需要在WEB-INF目录下创建web.xml文件,这个文件称为部署描述(deployment descriptor)文件,用于指定Web程序部署的细节,对于每一个Servlet程序来说,在web.xml文件中都需要为其指定<servlet><servlet-mapping>标签。

          对于大多数Web程序来说,其部署描述文件基本上是一致的,通常只需对其做出适当的修改即可。例如,这里将接下来要创建的Servlet程序命名为FirstServlet,则web.xml文件的内容是:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <servlet>
    <servlet-name>FirstServlet</servlet-name>
    <servlet-class>FirstServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>FirstServlet</servlet-name>
    <url-pattern>/FirstServlet</url-pattern>
  </servlet-mapping>
</web-app>
          其中, <servlet> 标签用于指定 Servlet 程序相对应的 .class 文件的名称,而 <servlet-mapping> 则用于指定与 Servlet 程序相对应的 .class 文件的位置。

创建Servlet程序

          在创建Servlet程序之前,可以先创建一个html页面,将其命名为FirstServlet.html,其内容为:

<html>
  <head>
    <title>A First Servlet</title>
    <style>
      body{text-align:center}
    </style>
  </head>
  <body>
    <br><br><br>
    <form method=get action="FirstServlet">
      <input type="Submit"  value="Who are you?">
    </form>
  </body>
</html>

          保存文件,并将这个html文件保存在WEB-INF目录下。现在需要创建Setvlet程序的源文件FirstServlet.java,内容如下:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;

@WebServlet("/Firstervlet")
public class FirstServlet extends HttpServlet
{
    public void doGet( HttpServletRequest request, HttpServletResponse response ) 
           throws IOException, ServletException 
    {
	response.setContentType( "text/HTML" );
	PrintWriter out = response.getWriter();
	out.println( "<HTML>" );
	out.println( "<HEAD>" );
	out.println( "<TITLE>Simple Servlet</TITLE>" );
	out.println( "</HEAD>" );
	out.println( "<BODY>" );
	out.println( "<BR><BR><BR>" );
	out.println( "<CENTER><H1>I am Senlin!</H1></CENTER>" );
	out.println( "</BODY>" );
	out.println( "</HTML>" );
	out.flush();
    }   
}
          将文件保存在WEB-INF 目录下的 classes 子目录下,执行以下命令进行编译:

           javac -cp /opt/Tomcat/apache-tomcat-7.0.54/lib/servlet-api.jar FirstServlet.java
          这样则成功的编译Servlet程序了。

程序原理:

          由于Servlet程序使用HTTP协议,因此,大多数的Servlet程序都应当为HttpServlet的子类。对于两种常见的HTTP请求GETPOSTServlet程序中的service()方法将会分派doGet()doPost()方法对这些请求做出响应,因此,程序中至少需要对这两个方法中的一个进行覆写。

         doGet(),doPost()service()方法都接受HttpServletRequestHttpServletResponse类型的参数。其中,通过使用HttpServletRequest类型的参数,可以对客户端的请求做出响应,可以调用这个参数的两种常用的方法:

          void setContentType( String arg );  // 用于指定对客户端做出响应的数据的类型

          PrintWriter getWriter();          // 获得可以向服务端写入字符数据的输出流 

         最后,在Tomcat7中,需要在程序的开头部分放置@WebServlet注解,这用于指定Servlet的路径及其名称,使用方式为:

        @WebServlet( "/<Path>/<ServletName>" )

测试运行效果:

打开浏览器,输入 http://localhost:8080/MyWebApp/FirstServlet.html,出现以下页面:


点击按钮,则自动出现以下页面:


处理请求

          对之前的FirstServlet.html文件进行改动,使之可以让用户输入相关内容:

<html>
  <head>
    <title>A First Servlet</title>
    <style>
      body{text-align:center}
    </style>
  </head>
  <body>
    <br><br><br>
    <form method=get action="FirstServlet">
      Enter your first name:
      <input type="Text" name="FirstName" value="" >
      <br><br>
      <input type="Submit"  value="Submit">
    </form>
  </body>
</html>

          页面显示如下:



         现在,当用户点击Submit时,将会传递相应的值给FirstSetvlet程序,HttpRequest类型的对象具有3种方法用来获得传递给Servlet程序的值:

          String getParameter( String name );        // 根据参数的名字,返回与参数相对应的值

          Enumeration getParameterNames();            // 返回所有参数的名字

          String[] getParameterValues( String name );  // 当参数具有多个相应的值时,用来返回这些值

          修改相应的FirstServlet.java程序,则现在可以根据用户输入的文本内容,在Servlet中可以呈现出不同的内容。

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;

@WebServlet("/Firstervlet")
public class FirstServlet extends HttpServlet
{
    public void doGet( HttpServletRequest request, HttpServletResponse response ) 
           throws IOException, ServletException 
    {
	   response.setContentType( "text/HTML" );
	   PrintWriter out = response.getWriter();
	   out.println( "<HTML>" );
	   out.println( "<HEAD>" );
	   out.println( "<TITLE>Simple Servlet</TITLE>" );
	   out.println( "</HEAD>" );
	   out.println( "<BODY>" );
	   out.println( "<BR><BR><BR>" );
	   String name = request.getParameter( "FirstName" );
	   out.println( "<CENTER><H1>you are " +  name + "!</H1></CENTER>" );
	   out.println( "</BODY>" );
	   out.println( "</HTML>" );
	   out.flush();
    }
}

          这里,参数的名字为FirstName,其相应的值为Boss,因此,使用HttpServletRequestgetParameter()方法将返回值Boss。

显示的页面如下:





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值