Servlet的详解以及在Tomcat环境下的路径问题分析

Servlet入门

  • Servlet线程特性:实例化一次,多线程运行

  • 请求和响应接口 Servlet API中

    • javax.servlet.ServletRequest[接口]<-javax.servlet.http.HttpServletRequest
    • javax.servlet.ServletResponse[接口]<-javax.servlet.http.HttpServletResponse
  • 利用Servlet对客户端不同方式请求做出动态响应

    • 3种方式访问服务端
      • 直接从地址栏输入URL访问
      • 网页中点击链接访问
      • 网页中通过表单提交访问
        • ajax也算是一种访问方式,但注意不能请求跳转页面。
        • 补充:后面的axios也算是一种访问方式。
  • Servlet获取普通请求的参数

    • 向Servlet传递请求参数的方式
      • URL:添加 ?name1=value1&name2=value2
      • 表单提交:表单元素name为参数 value值为参数值
        • 补充:表单提交包括隐藏域的提交
        • ajax方式提交请求参数/axios方式提交请求参数
    • Servlet中获取请求参数的方式:
      • 请求接口中提供与获取请求参数相关的方法
        • getParameter(name) 返回指定名字的请求参数的值,String型
        • getParameterMap() 将所有请求参数的name和value值作为键值对返回,存储在Map对象中
        • getParameterNames() 返回所有请求参数的名字,存在集合对象中
        • getParameterValues(name) 返回指定名字的请求参数值,String[],适用一个名字对应多个值的情况
  • Servlet初始化参数 见前章 只在当前Servlet中使用

    • 补充:可通过servletconfig接口来获取到初始化参数的相关信息。

      doPost()/doGet()中:
      getInitParameter("name");//获取指定name的初始化参数值
      
  • 全局参数 context-param 所有Servlet中都能使用

    位置:web.xml的根节点中
    <context-param>
    	<param-name>propsparam-name>
    	<param-value>helloparam-value>
    context-param>
    访问方式:
    doPost()/doGet()方法中:
    //先获取到ServletContext上下文对象
    ServletContext context = this.getServletContext();
    //调用该上下文对象的该方法
    context.getInitParameter("props");//hello
    
  • Servlet加载启动选项 见前章

  • Servlet配置中通配符用法

    两种方式
    位置:servlet-mapping中
    <url-pattern>*.actionurl-pattern>
    <url-pattern>/admin/*url-pattern>
    注意:这里不能同时使用通配符和后缀 比如 /admin/*.do
    
  • web.xml首页及错误页面等其他配置信息

    位置:web.xml根目录
    配置默认首页:当不指定具体访问路径时,默认访问默认首页
    <welcom-file-list>//按顺序访问,都不存在报404错误
      	<welcome-file>index.htmlwelcome-file>
      	<welcome-file>index.htmwelcome-file>
      	<welcome-file>default.htmwelcome-file>
      	<welcome-file>default.jspwelcome-file>
    welcom-file-list>
    位置:web.xml根目录
    配置错误页面:当应用中出现响应错误或异常时,可以跳转到错误页面
    <error-page>//出现404错误,自动跳转到404.html
    	<error-code>404error-code>
      	<location>/404.htmllocation>
    error-page>
    <error-page>
    	<exception-type>java.lang.NullPointerExceptionexception-type>
      	<location>/exception.htmllocation>
    error-page>
    
  • Servlet获取请求头属性方法—Request的相关方法

    客户端请求服务端Servlet时,会传递给服务器一系列的HTTP请求头属性,请求接口中定义了系列方法获取请求属性。

    • getHeader(String name) 返回某个请求头属性的值,返回String
    • getHeaders(String name) 返回指定名字的请求头属性的值,适用一个名字对应多个值得情况
    • getIntHeader(String name) 返回类型为Int类型的请求头属性值
    • getDateHeader(String name) 返回日期类型的请求头属性 ,返回long
    • getHeaderNames() 返回所有请求头属性的名字
  • 重要的请求头属性(请求长度、请求MIME类型、请求refer等)

    Content-Length:   请求长度   request.getIntHeader("")
    Accept:    MIME类型		  request.getHeader("")
    Referer:    来路路径		request.getHeader("")
    
  • 路径问题

    • 服务器根目录:服务器IP+":port";
    • 上下文根目录:服务器IP+":port"+工程部署后根目录(通常为项目名称);
      • 注意:每一个容器的根目录和上下文目录可能不一样。例框架和tomcat的容器。
      • 比如Dynamic Web Project 下的WebContent就被Tomcat视为上下文根目录
      • 所以每个容器注意看自己容器的上下文目录
    • 有无"/":类比sturts2,有"/"表示从Action容器根目录开始寻找(也就是上下文根目录),如果无则最好给出访问资源的绝对路径。–这里不是很清晰,可以略过。
    • 超链接是在servlet容器内进行(即服务器根目录)。所以struts2中最好给出绝对路径来访问资源。但是Springmvc中,似乎不用也是可以的。
  • 路径问题

    • 相对路径:

      默认,相对于当前网络路径的上一级目录,等效于./

      http://172.18.20.2:8080/serveletdemo/b        img/aaa.jpg   =>  http://172.18.20.2:8080/serveletdemo/img/aaa.jpg
      
      http://172.18.20.2:8080/serveletdemo/b/c      img/aaa.jpg   =>       http://172.18.20.2:8080/serveletdemo/b/img/aaa.jpg
      
      ../ 查找上一级目录
      
      http://172.18.20.2:8080/serveletdemo/b/c     ../img/aaa.jpg    =>    http://172.18.20.2:8080/serveletdemo/img/aaa.jpg 
      

      base标签 --解决了相对路径的问题

      指定了相对路径的根路径,

      ​ http://172.18.20.2:8080/serveletdemo/b/c/e/d/f img/aaa.jpg => http://172.18.20.2:8080/serveletdemo/img/aaa.jpg

      绝对路径:相对于根路径

      ​ /img/aaa.jpg => http://172.18.20.2:8080/img/aaa.jpg

  • 补充 :路径问题

    • HTML下

      • 使用场景

        • from action
        • a链接 href
        • 图片
      • 路径

        //下面是jsp在默认WebContent下时
        
            --->上下文目录      localhost:8080/jspdemo/login.jsp    通过标签矫正相对路径为当前上下文路径    
        
           ---->服务器根目录   localhost:8080/login.jsp//例:如果该jsp在/product/h
          ----相对的是当前路径的上一级    			localhost:8080/jspdemo/product/login.jsp
        
         ---服务器根路径  localhost:8080/login.jsp
        
    • Servlet中

      • 使用场景
        • 请求转发
        • 响应重定向
      • servlet 命名为/a/b
       //请求转发下
       绝对路径   ("/a/b")  ----相对于上下文根目录  localhost:8080/jspdemo/a/b
       相对路径    ("a/b")   ----相对于上一层路径   localhost:8080/jspdemo/a/a/b
      
       总结:servlet命名+/   url也+/ 
       //响应重定向---这个则是与HTML下相同
       绝对路径    ("/a/b")  ---服务器路径    localhost:8080/a/b
       相对路径    ("a/b")   ---相对于上一层路径  localhost:8080/a/a/b
      

你可能感兴趣的:(Java,EE,JavaEE,Servlet,路径问题)