• Servlet开发【03】Servlet与表单|路径匹配详解


    原作者:http://zhaoyuqiang.blog.51cto.com/6328846/1148434

    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与表单的问题就学到这个地方,本文章的重点就是路径问题,一定要弄明白

    本文出自 “赵玉强的博客” 博客,请务必保留此出处http://zhaoyuqiang.blog.51cto.com/6328846/1148434

  • 相关阅读:
    SpringBoot集成Swagger2并配置多个包路径扫描
    SpringBoot基于EasyExcel解析Excel实现文件导出导入、读取写入
    SpringBoot + SpringSecurity + Quartz + Layui实现系统权限控制和定时任务
    Redis数据持久化(RDB、AOF)
    so安全编译选项(栈溢出保护)
    Python调用Chrome下载文件
    AtomicInteger如何保证线程安全以及乐观锁/悲观锁的概念
    SpringCloud:Eureka的健康检测机制
    共享锁(S锁)和排它锁(X锁)
    Collection接口及其常用子类(java.util包)
  • 原文地址:https://www.cnblogs.com/honglihome/p/3440052.html
Copyright © 2020-2023  润新知