好文档 - 专业文书写作范文服务资料分享网站

Java - Servlet入门教程 

天下 分享 时间: 加入收藏 我要投稿 点赞

我们将Hello.class文件保存到Tomcat引擎的classes文件夹中。图7.2和7.3是在不同的web目录下运行servlet的效果。

图7.2 用Web根目录访问servlet图7.3 用friend目录访问7.2.5 带包名的servlet

在写一个servlet的java文件时,可以使用package语句给servlet一个包名。包名可以是一个合法的标识符,也可以是若干个标识符加“.”分割而成,如:

package gping; package tom.jiafei;

程序如果使用了包语句,例如

package tom.jiafei;

那么在classes目录下需有如下的子目录,例如,在

D:\\Tomcat\\jakarta-tomcat-4.0\\classes下再建立如下的目录结构。

\\tom\\jiafei

并将servlet的字节码文件存在该目录中,如图7.4所示。

图7.4 存放带包名的servlet

6

如果servlet有包名,比如,Hello的包名是tom.jiafei,那么调用该servlet的URL是:

http://localhost:8080/web服务目录/servlet/tom.jiafei.Hello

因为起了包名,Hello的全名是tom.jiafei.Hello(就好比大连的全名是:中国.辽宁.大连)。

7.3 通过JSP页面调用servlet

7.3.1 通过表单向servlet提交数据

任何一个Web服务目录下的JSP页面都可以通过表单或超链接访问某个servlet。通过JSP页面访问servlet的好处是,JSP页面可以负责页面的静态信息处理,动态信息处理交给servlet去完成。

在下面的例子中,JSP页面通过表单向servlet提交一个正实数,servlet负责计算这个数的平方根返回给客户。

为了方便地调试servlet,本书中,servlet的字节码文件存放在

D:\\Tomcat\\jakarta-tomcat-4.0\\webapps\\example\\Web-inf\\classes中,那么在JSP页面中调用servlet时,servlet的URL是:

/examples/servlet/servletName

在下面的例子2中,JSP页面通过表单提交一个正数,servlet负责计算这个数的平方根。

例子2

调用servlet的页面(该页面存放在web服务的根目录Root中) givenumber.jsp(效果如图7.5所示)

<%@ page contentType=\

输入一个数,servlet求这个数的平方根:

7

图7.5 提交数字的JSP页面图7.6 负责计算平方根的servlet

servlet源文件(效果如图7.6所示) Sqrt.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*;

public class Sqrt extends HttpServlet

{ public void init(ServletConfig config) throws ServletException {super.init(config); }

public void service(HttpServletRequest request,HttpServletResponse response) throws IOException

{ //获得一个向客户发送数据的输出流: PrintWriter out=response.getWriter();

response.setContentType(\MIME类型。

out.println(\

String number=request.getParameter(\ double n=0;

try{ n=Double.parseDouble(number); out.print(\ }

catch(NumberFormatException e)

{ out.print(\ }

out.println(\ } }

7.3.2 通过超链接访问servlet

我们可以在JSP页面中,点击一个超链接,访问servlet。 例子3

8

connection.jsp:

<%@ page contentType=\

7.4 servlet的共享变量

我们已经知道,在servlet被加载之后,当后续的客户请求servlet服务时,引擎将启动一个新的线程,在该线程中,servlet调用service方法响应客户的请求,而且servlet类中定义的成员变量,被所有的客户线程共享。在下面的例子4中,利用共享变量实现了一个计数器。

图7.7 计数器

例子4(效果如图7.7所示) Count.java: import java.io.*; import javax.servlet.*; import javax.servlet.http.*;

public class Count extends HttpServlet { int count;

public void init(ServletConfig config) throws ServletException {super.init(config); count=0; }

public synchronized void service(HttpServletRequest request,HttpServletResponse response)

throws IOException { //获得一个向客户发送数据的输出流: PrintWriter out=response.getWriter();

response.setContentType(\MIME类型。

out.println(\

9

count++; //增加计数。 out.println(\ out.println(\ } }

注:在处理多线程问题时,我们必须注意这样一个问题:当两个或多个线程同时访问同一个变量,并且一个线程需要修改这个变量。我们应对这样的问题作出处理,否则可能发生混乱.所以上述例子中的service方法是一个synchronized方法。

数学上有一个计算π的公式:

π/4=1-1/3+1/5-1/7+1/9-1/11… …

下面的例子中利用成员变量被所有客户共享这一特性实现客户帮助计算 的值,即每当客户请求访问servlet时都参与了一次 的计算。

客户通过点击一个JSP页面的超链接访问一个计算 的servlet

图7.8 用servlet计算PI

例子5(效果如图7.8所示) JSP页面

Example7_5.jsp:

<%@ page contentType=\

servlet源文件 import java.io.*; import javax.servlet.*; import javax.servlet.http.*;

public class ComputerPI extends HttpServlet { double sum=0,i=1,j=1;

10

Java - Servlet入门教程 

我们将Hello.class文件保存到Tomcat引擎的classes文件夹中。图7.2和7.3是在不同的web目录下运行servlet的效果。图7.2用Web根目录访问servlet图7.3用friend目录访问7.2.5带包名的servlet在写一个servlet的java文件时,可以使用package语句给servlet一个包名。包名可以是一个合
推荐度:
点击下载文档文档为doc格式
  • 正文标题

  • 上下篇章

  • 相关推荐

  • 精选图文

3hele9681999g5n14byc