Servlet开发得需要JSP等技术的辅助,我们先来看一下Servlet与表单的应用。

Servlet程序开发---一个实例

   由于Servlet本身也存在着HttpServletRequestHttpServletResponse对象的声明,所以既可以使用Servlet接受用户所提交的内容

   我们来以一个实例说明一下:

   项目如下:

先做一个表单的页面

 
  
  1. input.html 
  2. <html> 
  3. <head> 
  4. <title>WEB开发</title> 
  5. </head> 
  6. <body> 
  7. <form action="../InputServlet" method="post">    关于action路径问题下面会讲到 
  8.    输入内容:<input type="text" name="info"> 
  9.    <input type="submit" value="提交"> 
  10. </form> 
  11. </body> 
  12. </html> 

做好表单页面后再来做Servlet页面

 
  
  1. InputServlet.java 
  2. package ServletDemo 
  3. import java.io.*; 
  4. import javax.servlet.*; 
  5. import javax.servlet.http.*; 
  6. public class InputServlet extends HttpServlet{ 
  7.     public void doGet(HttpServletRequest req,HttpServletResponse resp) 
  8.                throws ServletException,IOException{  //覆写doGet()方法 
  9.         String info=req.getParameter("info");//接受请求参数 
  10.         PrintWriter out=resp.getWriter(); //准备输出 
  11.         out.println("<html>"); 
  12.         out.println("<head><title>WEB开发</title></head>"); 
  13.         out.println("<body>"); 
  14.         out.println("<h1>"+info+"</h1>"); 
  15.         out.println("</body>"); 
  16.         out.println("</html>"); 
  17.         out.close();//关闭输出 
  18.     } 
  19.     public void doPost(HttpServletRequest req,HttpServletResponse resp) 
  20.                throws ServletException,IOException{     //处理POST请求 
  21.         this.doGet(req, resp);//同一种方法体处理         
  22.     } 

   在程序中doPost()方法是用来处理表单中method=post的,如果表单中method=get的话就交个代码中的doGet()来处理  

   当一个Servlet编写完成之后下面就需要web.xml文件之中进行Servlet的映射配置。

 
  
  1. <servlet> 
  2.      <servlet-name>Servlet</servlet-name> 
  3.   <servlet-class>ServletDemo.InputServlet</servlet-class> 
  4. </servlet> 
  5. <servlet-mapping> 
  6.      <servlet-name>Servlet</servlet-name> 
  7.   <url-pattern>/InputServlet</url-pattern>   url路径问题下面会讲到 
  8. </servlet-mapping> 

这个样子就已经写好了一个项目,细心照着做的同学可能会发现很多疑点,表单中的action的内容是怎么来的,web.xml中的<url-pattern>的内容是怎么写的,是不是随意命名就可以呢?不是的,这是个路径问题,不要着急,因为我们这一篇文章主要就来是来解决路径问题的

路径匹配详解

以上代码一定要注意路径匹配问题,

这个地方一定要注意路径问题,有关路径的编写,有2个地方需要些正确:

1.  input.html中,action的值是../InputServlet.  

2.   web.xml中,<url-pattern>的值是/InputServlet.

这两个地方一定要写正确了,action表示表单提交给Servlet来执行,但是Servlet有一个url的映射路径,如果路径填写的是/InputServlet,那么action的值就应该是../InputServlet.

../表示的是上一层目录,也就是根目录,而url中的/表示的就是根目录。这样才能将表单中的内容提交给Servlet来执行。

 Action中的../是很麻烦的,如果../多了就会感觉到头晕,我们还有一种方法,就是actiond=InputServlet  web.xml中的<url-pattern>/jsp/InputServlet,   因为input.html是在jsp文件夹下的。例如我们可以把上述的程序改为如下:

 
  
  1. input.html 
  2. <html> 
  3. <head> 
  4. <title>WEB开发</title> 
  5. </head> 
  6. <body> 
  7. <form action="InputServlet" method="post"> 
  8.    输入内容:<input type="text" name="info"> 
  9.    <input type="submit" value="提交"> 
  10. </form> 
  11. </body> 
  12. </html> 
 
  
  1. <servlet> 
  2.      <servlet-name>Servlet</servlet-name> 
  3.   <servlet-class>ServletDemo.InputServlet</servlet-class> 
  4. </servlet> 
  5. <servlet-mapping> 
  6.      <servlet-name>Servlet</servlet-name> 
  7.   <url-pattern>/jsp/InputServlet</url-pattern> 
  8. </servlet-mapping> 

 

修改之后也是一样可以运行的。

     不知道大家的脑子是不是有点混乱了,我们来总结一下这个路径的问题,因为这个路径曾经难倒了一大片的学生啊。 

路径配置总结(重点) 

      Servlet和表单,表单中的内容要通过action 提交到自己编写的Servlet中执行,但是自己编写的Servlet代码会在web.xml中有个配置的url路径(url路径是<url-pattern>的内容),既然Servlet的路径是自己配置的,那么action要提交到什么地方吗?提交的路径要怎么写呢?我们解决的就是这个路径匹配问题。 我们说有两种做法:

  第一种:

      让action 提交的路径去匹配Servlet的配置路径。

      例如:  action=../X  那么web.xml中的url为 /X. 这里的X是自己命名的。  ../意思是上一层目录,也就是根目录

第二种:

      让Servlet的配置路径去匹配action表单提交的路径

例如:  表单页面在一个叫做A的文件夹里    action=X  那么web.xml中的url为 

/A/X.  这里的X也是自己命名的。

 我们的表单页面时.html,但是如果是.jsp页面呢?答案是和.html一样的,但是如果是jsp页面的话,这个路径配置还有第三种方法:

例如;    表单页面在一个叫做A的文件夹里    action=<%=request.getContextPath()%>/A/X  那么web.xml中的url为 

/A/X.  这里的X也是自己命名的

这种方法只能在jsp页面中才能使用

 

 好了,关于Servlet与表单的问题就学到这个地方,本文章的重点就是路径问题,一定要弄明白