美文网首页
Java Web Servlet映射配置 (No.4.1)

Java Web Servlet映射配置 (No.4.1)

作者: ALK416 | 来源:发表于2019-10-30 21:02 被阅读0次

    之前在使用 web.xml配置Servlet时候出了一些问题,现在大概明白了原因出在哪里。
    在这里总结下当时使用 web.xml配置时出现的一些问题以及解决的方法



    关键点在于两个:
    HTML(JSP)页面中表单属性action的值,以及web.xml中几个标签的设置
    1. action属性:
      这个action属性其实并没有具体的意义,只是与web.xml中的<url-pattern></url-pattern>中的值对应即可。但是这里要注意诸如/emailListemailList这两种表达的区别。之前的亏就吃在这里了。

      之前遇到的一个问题
      我在IDEA工程没有注意到,当时我设置了<form action="/email" method="post">(我这里有斜杠),在访问的时候显示我访问到了这个地址:[http://localhost:8080/email],而我的web.xml设置如下:
    /Task_9_21_war_exploded
        <servlet>
            <servlet-name>emailListServlet</servlet-name>
            <servlet-class>TYUT.emailListServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>emailListServlet</servlet-name>
            <url-pattern>/email</url-pattern>
        </servlet-mapping>
    

    看起来都是正确的,都是匹配的,然而却显示 404 NOT FOUND,所以我推测[http://localhost:8080/email]并不是<url-pattern>/email</url-pattern>所代表的地址。
    之后我重新设置:<form action="email" method="post">,然后得到的Servlet访问地址为:[http://localhost:8080/Task_9_21_war_exploded/email],而此时正确连接到了Servlet上了。

    为什么会造成这种情况?

    后来发现,工程设置中有这么一条:

    工程设置.PNG
    也就是说,我之前设置了工程的根目录就是服务器根目录下的/Task_9_21_war_exploded,也就是说我指定了这个目录才是这个项目的根目录。所以造成了我以为的是根目录的[http://localhost:8080/email]其实并不是根目录。将这个设置修改为:
    设置2.PNG

    此时安安心心地设置:<form action="/email" method="post">,就可以正常访问了。


    回到正题

    2.使用web.xml配置Servlet的方法:
    之前 No.1 那篇里说过web.xml配置,这里再援引一篇讲的不错的博客。
    https://www.cnblogs.com/fnz0/p/5586019.html
    这篇博客讲了web.xml的配置以及从表单是如何转到Servlet的具体细节,很具有参考价值。
    这里提一下博客里提到的跳转过程:

        <servlet>
            <servlet-name>emailListServlet</servlet-name>    //3
            <servlet-class>TYUT.emailListServlet</servlet-class>  //4
        </servlet>
    
        <servlet-mapping>
            <servlet-name>emailListServlet</servlet-name>  //2
            <url-pattern>/email</url-pattern>  //1
        </servlet-mapping>
    
    • 首先当一个表单请求发出之后,服务器首先在web.xml中搜索,找到 1(1的内容与表单action属性相同)
    • 找到1之后,拿着2的值找到3
    • 找到3之后,根据4找到具体的类,然后执行类中的 doGetdoPost方法

    相关文章

      网友评论

          本文标题:Java Web Servlet映射配置 (No.4.1)

          本文链接:https://www.haomeiwen.com/subject/ioyavctx.html