web编程——Servlet基础练习

 

Servlet基础练习
一、实验目的
通过实验掌握下列知识:
1、学习使用Tomcat应用服务器,掌握web应用的配置和部署方法;
2、掌握Servlet的基本结构,能实现输出为HTMLServlet
3、理解Servlet的生命周期,理解initservicedestory方法的作用;
4、理解Servlet的多线程机制,能解决线程安全问题。
 
 
二、实验内容及步骤
1、安装TOMCAT服务器并配置web应用
1)打开TOMCAT/webapps子目录,创建myweb应用(在myweb文件夹下设置WEB-INF目录并进行部署)
2)HelloServlet.java编译成.class文件,并放置于正确目录中;
3)修改web.xml文件内容,使得浏览器访问路径为:http://localhost:8080/myweb/servlet/Hello
4)重启服务器,查看页面运行效果。
 
2Servlet生命周期
1)配置LifeCycleServlet,使之运行
   2)刷新页面,观察变量a和变量b值的变化,并记录在实验报告中;
   3)分析该运行结果的产生原因,并记录在实验报告中;
   4)若在该页面上显示该Servleta)首次被装载并初始化的时间,以及b)Servlet当前被访问的时间,应分别在哪些方法中增加什么代码?
(获取时间的代码可采用:new java.util.Date() ;
    5)实现该功能,查看页面运行效果,并在实验报告中描述实现方法。
 
3Servlet生命周期
1)在LifeCycleServlet中,应对哪个变量进行多线程的访问保护
   2)改进LifeCycleServlet代码,使用同步块进行访问保护,并记录在实验报告中。
 
 
三、实验要求
1、      填写并上交实验报告,报告中应包括:
实验结果(程序执行结果及产生结果的原因);
碰到的问题及解决方案,实验收获等。

2、      上交程序源代码。

 

附件:

1、HelloServlet.java源代码:

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloServlet extends HttpServlet
{
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String docType =
      "      "Transitional//EN/">/n";
    out.println(docType +
                "/n" +
                "Hello/n" +
                "/n" +
                "

Hello

/n" +
                "");
  }
}

2、LifeCycleServlet.java源代码

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

public class LifeCycleServlet extends HttpServlet
{
 private int a=0,b=0;
 
 public void destroy() {
    
 }

 public void init() throws ServletException {
  a++;
 }

 protected void doGet(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {
        b++;
                
        PrintWriter out = response.getWriter();
        String docType =
           "           "Transitional//EN/">/n";
        out.println(docType +
                "/n" +
                "Hello/n" +
                "/n" +
                "

Please refresh the webpage, and compare two values:

/n" +
                "

a=" + a + ";    b=" + b + "

/n" +
                "");
    }
}

 
 

 

 
 
二、实验内容及步骤
1、安装TOMCAT服务器并配置web应用
1)打开TOMCAT/webapps子目录,创建myweb应用(在myweb文件夹下设置WEB-INF目录并进行部署);
运行步骤:
1.    eclipse新建一个,取名为MyNewWeb1,在新建一个Servlet,取名HelloServlet,然后按Run on Server可以运行,并且在/MyNewWeb1/build/classes出现了需要的HelloServlet.cpp
2)将HelloServlet.java编译成.class文件,并放置于正确目录中;
3)修改web.xml文件内容,使得浏览器访问路径为:http://localhost:8080/myweb/servlet/Hello
4)重启服务器,查看页面运行效果。
 
源代码:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
publicclass HelloServlet extends HttpServlet
{
 publicvoid doGet(HttpServletRequest request,HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String docType =
      " +
      "Transitional//EN/">/n";
    out.println(docType +
                "/n" +
                "Hello/n" +
                "/n" +
                "

Hello

/n"
+
                "");
 }
}
 
运行结果:
 
 
 
2Servlet生命周期
1)配置LifeCycleServlet,使之运行;
   2)刷新页面,观察变量a和变量b值的变化,并记录在实验报告中;
   3)分析该运行结果的产生原因,并记录在实验报告中;
 
源代码:
import java.io.*;     
import javax.servlet.*;
import javax.servlet.http.*;
publicclass LifeCycleServlet extends HttpServlet
{
 privateinta=0,b=0;
 
 publicvoid destroy() {
    
 }
 publicvoid init() throws ServletException {
 a++;
 }
 protectedvoid doGet(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {
        b++;
                
        PrintWriter out = response.getWriter();
        String docType =
           " +
           "Transitional//EN/">/n";
        out.println(docType +
                "/n" +
                "Hello/n" +
                "/n" +
                "

Please refresh the webpage, and compare two values:

/n"
+
                "

a=" + a + ";    b=" + b + "

/n"
+
                "");
    }
}
 

运行结果:

原因:
因为init函数只被调用一次,以后的全是调用doGet函数,故a一直是1b会自增。
 
   4)若在该页面上显示该Servleta)首次被装载并初始化的时间,以及b)Servlet当前被访问的时间,应分别在哪些方法中增加什么代码?
源代码:
红色的为改动部分
publicvoid init() throws ServletException {
     a = new Date() ;
     
     protectedvoid doGet(HttpServletRequest request, HttpServletResponse response)
                   throws ServletException, IOException {
     b = new Date() ;
                     
            PrintWriter out = response.getWriter();
            String docType =
               " +
               "Transitional//EN/">/n";
            out.println(docType +
                    "/n" +
                    "Hello/n" +
                    "/n" +
                    "

Please refresh the webpage, and compare two values:

/n"
+
                    "

init: " + a + ";    " +

                      "current: " + b + "/n" +
                    "");
        }
}

运行结果:

 
    5)实现该功能,查看页面运行效果,并在实验报告中描述实现方法。
 
3Servlet生命周期
1)在LifeCycleServlet中,应对哪个变量进行多线程的访问保护?
答:变量b
   2)改进LifeCycleServlet代码,使用同步块进行访问保护,并记录在实验报告中。
 代码:
synchronized (this){
    b++;
 }
 
 

你可能感兴趣的:(JAVA)