zoukankan      html  css  js  c++  java
  • 一个简单的jsp+servlet登录界面的总结

    这个登录界面我是用eclipse+tomcat7来实现的(网上比较多都是用myeclipse来做的)

    1.首先是关于servlet部署的问题

    首先你的servlet类要写在WEB-INF的Class文件夹里面。(如果是eclipse就写在Java resources的src文件夹中,它其实也就是写在WEB-INF的Class文件夹里面)

    如果你用eclipse的servlet类,它用的部署方法是    @WebServlet    标注来部署的,就是在类前面加上这个备注和name,url-pattern等其他信息。 

    这里我用的是部署描述符web.xml的方法,它在web-inf目录下。      对于web.xml,<web-app></web-app>是它的根元素。我们要部署servlet用的标签是:

    <servlet>
           <description>This is the description of my J2EE component</description>
           <display-name>This is the display name of my J2EE component</display-name>
             <servlet-name>CheckAccount</servlet-name>
           <servlet-class>com.ht.servlet.CheckAccount</servlet-class>
    </servlet>

    其中一个servlet元素必须包含一个servlet-name元素和一个servlet-class元素,或者一个servlet元素和jsp-file元素      servlet-name元素定义的servlet名称必须在应用程序中是唯一的。

    servlet-class元素是该sevlet类的全路径名(它会在class文件夹里开始找)

    然后是部署需要的servlet-mapping标签

     <servlet-mapping>
           <servlet-name>CheckAccount</servlet-name>
           <url-pattern>/CheckAccount</url-pattern>
     </servlet-mapping>

    这个元素映射一个servlet到url模式,该元素必须有一个servlet-name元素和url-pattern元素。

    servlet-name的值一定要和你的servlet标签里的servlet-name的值一样

    url-pattern的值就是我们在输入网址的时候的url。    比如我输入

          http://localhost:8080/TestWeb/CheckAccout

    它就会跳到servlet的页面上,这里来解释一下关于url的知识:

    http://localhost:8080    我们可以理解为是我们的服务器地址,而该地址之后的部分我们统称为:RequestURI

    /TestWeb  是我的ServletConext的上下文地址,我们称为ServletContext Path,可以简单理解为部署项目时的webapps目录下的项目名(其实就是我的项目名)

    /CheckAccount  是我们的Servlet的地址,我们称为Servlet Path,这里就是需要与我们的<url-pattern>匹配的内容,本来我们要访问的话,是要输入完整的路径的,但经过web.xml配置后,就可以通过这个映射找到。

    关于url-pattern元素还有个用法:

    1.当我使用<url-pattern>/*</url-pattern>时,我们可以匹配所有的请求,即所有的请求都会经过该标签对应的Servlet

    此时就需要注意静态资源的请求,因为当我们使用http://localhost:8080/TestWeb/Login.jsp时,依然会匹配该Servlet,

    而很多静态资源其实是不需要经过Servlet的,例如:js,css,html,jsp,img等静态资源文件,此时就需要在该Servlet中对静态资源做特殊处理

    2.如果配有如下两个<url-pattern>标签时,URL地址为http://localhost:8080/TestWeb/CheckAccount时又是如何匹配的呢?

    <url-pattern>/CheckAccount</url-pattern>
    
    <url-pattern>/*</url-pattern>

    上边我们已经说过,/*可以匹配所有的请求,而/CheckAccount也可以匹配我们的URL地址,此时URL地址会自动且优先的进行精确匹配,即/CheckAccount,

    且只匹配一次,也就是说一旦匹配到一个Servlet即执行该Servlet不再对其他Servlet进行匹配,

    当我们输入一个http://localhost:8080/TestWeb/login时,由于此时匹配不到/CheckAccount所以只能匹配/*了

    (url-pattern介绍转自http://www.cnblogs.com/keryang/p/5151632.html)

    还有个welcome-file-list元素也比较有趣,它是指定当用户在浏览器中输入的URL不包含一个Servlet名称或jsp文件页面或静态资源的时候显示的页面或servlet。

    <welcome-file-list>
        <welcome-file>/Index.jsp</welcome-file>
    </welcome-file-list>

    发现这个welcome-file元素的路径一般都这种格式,然后一般就放在你的项目文件下面,像这样:

    那个Index.jsp就是欢迎页,你输入http://localhost:8080/TestWeb/就可以访问这个Index.jsp.

    也就是说,这个welcome-file的路径查找是以你的项目文件(TestWeb)为起点开始找的

    2.关于表单<form>的action属性:(来自http://blog.sina.com.cn/s/blog_9f33f9170102v7h4.html)

    在写web页面时,标签 是很常见的元素,它的一个属性是action,用来标识将表单交给谁去处理。很显然,这里有一个地址的问题,而且是在服务器这边的地址。比如服务器内的一个servlet。

     
    那么这个地址怎么写?
     
    1.以"/"开头的表示绝对地址,即web根目录,比如你用tomcat服务器,那么就是指webapp目录了。
     
    2.不以"/"开头的表示的是相对地址,即相对于当前这个页面的地址下。
    举个例子,我们这里有一个项目Shop,结构图如下:
    表单form <wbr>action的url写法

        在WebContent目录下面,新建了一个view文件夹存放网站页面,我们写了一个login.html的登陆页面,form要交给一个servlet来处理,给servlet的url-pattern是"/validate",其中的表单form里的action该如何写呢?
     
       用绝对地址:action="/Shop/validate",这里"/"指向web根目录,Shop是项目上下文。
       用相对地址 : action="./view/validate",这里"./"跳出了view目录,进入到了Shop项目目录内。
    下面是论坛内其他人的回答,意思一样:
    需要注意的是,你现在讨论的是HTML的相关路径与绝对路径的问题。
    先看一下下面的URL:
    http://192.168.1.1:8080/hello/index.html
    一个URL由
    服务器地址: http://192.168.1.1:8080
    WEB应用上下文:  /hello
    网页或请求:  /index.html
    三个部分组成。
    WEB应用发布时,WEB应用上下文可以自行指定,如放在ROOT/下的话,WEB应用上下文就是空,如:
    http://192.168.1.1:8080/index.html
    它的WEB应用上下文就是空。

    HTML协议中要求,form的action属性,以“/”开头是绝对路径,不以“/”开头的是相对路径。
    绝对路径是相对于服务器地址而言的,相对路径是相对于当前网页或请求而言的。
    举一个例子,你的当前网页位置是:
    http://192.168.1.1:8080/hello/page/index.html
    其中/hello是WEB应用上下文;/page/index.html是网页。
    在这个网页上有一个请求需要指向
    http://192.168.1.1:8080/hello/servlet/checkUser.cgi
    index.html中的form应该怎么写呢?
    可以写成绝对路径(相对于http:/192.168.1.1:8080)

    ...

    也可以写成相对路径(相对于http://192.168.1.1:8080/hello/page)

    ...
     
    还有一个小记录,就是request.getParameter("")获得的不是id的值,而是name的值。
     
     
  • 相关阅读:
    通过百度地图API实现搜索地址--第三方开源--百度地图(三)
    对图片进行各种样式裁对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等剪:圆形、星形、心形、花瓣形等--第三方开源--CustomShapeImageView
    仿UC天气下拉和微信下拉眼睛头部淡入淡出--第三方开源--PullLayout
    【英语】Bingo口语笔记(14)
    【前端】HTML入门笔记
    【英语】Bingo口语笔记(13)
    【英语】20141013 生词
    【英语】20141011 生词
    【Android】Android 学习记录贴
    【英语】Bingo口语笔记(12)
  • 原文地址:https://www.cnblogs.com/wangshen31/p/7693945.html
Copyright © 2011-2022 走看看