问题一:我们在编写servlet的时候为什么要在web.xml中进行配置呢?
问题二:jsp最终也是被容器转化成servlet了,而jsp为什么就不用在web.xml中配置了?
新手问题,希望哪位能帮我说的详细点,提前谢谢了。

解决方案 »

  1.   

    这样理解吧,程序是要运行的,运行哪个程序,首先至少要找到相应的程序你想浏览某个页面,也就是你要找某个页面,然后服务器才能进行处理所有jsp是你要找的,即 你所指定的要跑的程序而servlet它要处理业务, servlet也不是随便运行的,必须对应某个页面传来的数据进行处理, 所有页面的请求和servlet 就是在web.xml里进行配置
      

  2.   

    1.你在JAVA里的MAIN方法里如果要调用某个类时要写A a() = new A();对吧,servlet也是java类,因此想用它也要将它实例化,但现实情况是你编程的时候一定没写过Servlet A = new Servlet()之类的代码吧,其实是WEB容器帮你做了这一步,在WEB.xml里配,WEB容器就知道该实例哪些类,至于配的那些东西,就是调用servlet时传的参数。
    2.你访问哪个,它就实例化哪一个,而且不用传参数,所以就不用配了
      

  3.   

    servlet是jsp以前的技术。现在多用jsp用来显示页面,用servlet来做业务处理。
    当你把前台jsp的数据提交给servlet去处理,这时就要用xml配置,不然他不知道
    去哪里寻找对应的servlet去处理了。
    jsp不用配置是因为你每次访问时都能给出全地址,服务器就能直接找到对应的jsp
    了。
      

  4.   

    谢谢2楼和4楼的朋友了,你们说的挺容易理解的
    但我还是有点不理解你们说的意思就是web.xml主要负责让容器找到servlet然后实例化出servlet对象吗?
    如果是这样,那jsp转化成servlet时,此servlet对象是怎么被实例化的?
    还有你们说那jsp是给的全路径,所以服务器能直接找到,那servlet可以给全路径让服务器去直接执行吗?
      

  5.   

    这个不用配置:一、相关软件介绍
      1、 JDK:Java2的软件开发工具,是Java应用程序的基础。JSP是基于Java技术的,所以配置JSP环境之前必须要安装JDK。
        2、 UFO:最新发布的支持jsp的服务器软件,作为独立的Web服务器来使用。即支持静态页面、同时也支持动态页面,处理这两种页面都很迅速;而软件自身很健壮,不会出现内存泄漏和服务器自己宕掉的现象。对于初学者来说不用做任何部署配置环境变量的工作,简直可以说是初学者的首选。二、 软件下载 1、JDK1.5.0
      版本:JDK1.5.0_16 (JDK1.5.0及以上版本都可以)
      地址:http://java.sun.com/javase/downloads/index_jdk5.jsp  2、UFO 1.10
      版本:1.10(1.50MB)
        地址:http://www.gm365.com 主页面上三、软件的安装  1、安装JDK1.5.0_16
         (1)、这个不用说大家都会,直接运行下载的jdk-1_5_0_16-windows-i586-p文件,根据安装向导安装到一个目录,例如安装到D:\DK1.5.0_16。
        (2)、不用添加环境变量,只需要做如下工作:
             a: Windows下,打开UFO中的bin目录,打开编辑setclasspath.bat文件插入一行:set JAVA_HOME=D:\jdk1.5.0_16 (即把JAVA_HOME设置成JDK在您计算机上的安装目录),修改后敲startup.bat即可启动UFO;
             b: Linux下、打开bin目录下的setclasspath.bat文件,敲./startup.sh 即可直接启动UFO;四、Servlet/JSP在UFO中的使用(你会发现Servlet的使用原来这么简单)
      
       1、先拿个简单的单纯的Servlet来介绍。
       编写一个文件名为FirstServlet.java的Servlet,代码如下:package test;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    public class FirstServlet extends HttpServlet
    {
        public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
       {
         response.setContentType("text/html"); 
        PrintWriter out = response.getWriter();
         out.println("<html><head><title>");
         out.println("It's my first Servlet");
         out.println("</title></head><body>");
         out.println("<h1>welcome to use UFO!</h1>");
         out.println("</body></html>");
       
       }
    }
        在UFO的ROOT或是examples(当然也可以是webapps底下自己新建的)的WEB-INF/classes下新建个文件名为test的文件夹,将编译好的FirstServlet.class文件放入;启动UFO,如果class文件放置ROOT底下浏览器中输入http://localhost:80/servlet/test/FirstServlet,如果class文件放置examples底下浏览器中输入http://localhost:80/examples/servlet/test/FirstServlet,你就可以成功的看到几个超大的welcome to use UFO!。
        说明:UFO中Servlet是不用在WEB-INF中的web.xml文件中注册的,UFO直接根据URL中的/servlet/认定,也就是说在UFO中如果要用到Servlet是需要在访问调用的Servlet前面加上一个标志符——servlet即可。
       2、 JSP中调用Servlet
        编写一个Servlet,用JSP调用这个Servlet来存储字符内容:
       a)、编写一个JSP文件ioFileServlet.jsp,用来写入文字内容,其代码如下:<%@ page contentType="text/html;charset=GB2312" %>
    <script language="javascript">
     function on_submit()
     {//验证数据的合法性
      if (form1.file_content.value == "")
        {
         alert("文件内容不能为空,请输入文件内容!");
         form1.file_content.focus();
         return false;
        }
     }
    </script>
    <HTML>
    <head>
    <title>提交文件内容</title>
    </head>
    <BODY>
    <div align="center">
      <center>
    <table border="1">
    <tr><td colspan="2" align="center">用servlet处理输入的文件内容</td></tr>
    <tr>
    <tr><td>
    <form name="form1" action="servlet/readdata/ioFileServlet" method="post" onsubmit="return on_submit()">
      请输入文件内容:
    </td><td>
    <textarea rows="7" name="file_content" cols="52"></textarea>
      </td></tr>
    <tr><td colspan="2" align="center"><input type="submit" value="提交"></td></tr>
    </form>
    </table>
      </center>
    </div>
    </html>再编写一个名为ioFileServlet.java的Servlet用来存储ioFileServlet.jsp中写入的内容:package readdata;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    public class ioFileServlet extends HttpServlet
    {  
     public String codeToString(String str)
      {//处理中文字符串的函数
        String s=str;
        try
          {
          byte tempB[]=s.getBytes("ISO-8859-1");
          s=new String(tempB);
          return s;
      }
      catch(Exception e)
        {
        return s;
        }
      }
      public void init(ServletConfig config) throws ServletException
        {
          super.init(config);
        }
      public  void  doPost(HttpServletRequest request,HttpServletResponse response) 
                            throws ServletException,IOException
        {
           //设置mime
           response.setContentType("text/html;charset=GB2312");
           PrintWriter out=response.getWriter();
           out.println("<HTML><head><title>接收新用户注册</title></head><BODY>");
           //把提交的文件内容写入文件
           int RowSize=30;//文件每行的字符数
           String tempString1=null;
           String tempString2=null;
           tempString1=codeToString(request.getParameter("file_content"));
           if(tempString1!=null)
           { 
             File tempFile1=new File("d:/fileContent.txt");
             FileWriter outfile1=new FileWriter(tempFile1,true);
             BufferedWriter outbuffer1=new BufferedWriter(outfile1);
             int writeStringLength=tempString1.length();
             for(int i=0;i<writeStringLength/RowSize+1;i++)
             { 
               if((i+1)*20<writeStringLength)
               {
                 tempString2=tempString1.substring(i*RowSize,(i+1)*RowSize);
               }
               else
               {
                 tempString2=tempString1.substring(i*RowSize,writeStringLength);
               } 
               outbuffer1.write(tempString2);
               outbuffer1.newLine();
             }
             outbuffer1.flush();
             outbuffer1.close();
             outfile1.close();
            }
           out.println("写入的文件内容是:<br>");
           //从文件中读取内容
           File f=new File("d:/fileContent.txt"); 
           if(f.exists())
           {  
             FileReader fileReader1=new FileReader(f);
             BufferedReader buffer1=new BufferedReader(fileReader1);
             byte bufferArray[]=new byte[90];
             String tempString=null;
             while((tempString=buffer1.readLine())!=null)
             {
               out.println(tempString+"<br>");
             }
             buffer1.close()
             fileReader1.close();
           }
           else
           {
             out.println("故事中暂时没有内容。");
           }
           out.println("</body> </html>");
        } 
    }将ioFileServlet.jsp放置于examples底下,接着在examples的WEB-INF/classes下新建个文件名为readdata的文件夹,将编译好的ioFileServlet.class文件放入,在浏览器中输入http://localhost:80/examples/ioFileServlet.jsp,你会看到等待你要输入内容的页面,提交之后便调用了Servlet文件ioFileServlet.class;如果你将ioFileServlet.jsp放置于examples/servlets/ioFileServlet底下,那么相应的在ioFileServlet.jsp文件中要修改action为action="../../servlet/readdata/ioFileServlet",此时UFO默认的访问Servlet路径是http://localhost:80/examples/servlet/ioFileServlet/ioFileServlet,需要先返回到examples底下,所以用到了相对路径。