【Servlet学习笔记】01 入门及映射路径

2018.5.02

web应用目录结构

|--webroot web项目/应用的根目录(这个名字没有中文)
    |- 静态资源 (HTML css javascript img veido audio)
    |- WEB-INF: [固定写法]
        |-classes:存放二进制字节码文件的目录 放入.class文件【固定写法,可选】
        |-lib:存放当前 WEB项目运行需要的JAR包【固定写法,可选】
        |-web.xml 非常重要【现在非常重要】
        
注意事项: 
    1.WEB-INF目录下的内容不能通过浏览器目录方式访问。
    2.如果需要访问WEB-INF里面的资源内容,需要配置web.xml

1.Servlt入门

暂时不要研究源代码 手动创建一个servlet

1.1什么是Servlet?

前提 静态资源和动态资源的区别(源代码有无变化)

静态资源:
    用户在多次访问的情况下,但是每一次页面的源代码没有发生任何的改变。
    
动态资源:
    用户在每一次访问申请到的页面源代码都是不一样的
    
Servltjava语言实现动态资源的开发技术

要求:
    1.Servlet程序只能在Tomcat服务器上运行。【记住】
    2.Servlet其实是一个非常普通的类,只不过集成了HttpServlet,覆盖了doGetdoPost方法。

1.2 手动书写一个Servlet程序

1.定义一个类,要求继承HttpServlet

HttpServlet并不存在当前使用的JDK1.8中,Servlet程序要交给Tomcat运行的,所以
    Tomcat是支持HttpServlet,那么在 Tomcat下必须有HttpServlet当前整个代码
    
    在Tomcat安装路径/lib/servlet-api.jar    
    
    把servlet-api.jar 复制到当前的项目目录下,添加到工作路径中add path

2.书写Servlet程序

HttpServletRequest      servlet请求
        
    HttpServletResponse     servlet响应
    
    使用响应给浏览器发送数据
    
        设置响应在浏览器上展示的方式和编码集  使用HTML展示,字符集为utf-8
        resp.setContentType("text/html;charset=utf-8");
        
        PrintWrite resp.getWriter(); 专门用来给浏览器写入数据的对象。 基于IO流的

3.执行Servlet程序

这里servlet程序不能再交给Eclipse执行了,而是要在Tomcat服务器上执行Servlet程序
    
    在Tomcat服务器软件根目录下webApps中创建一个web项目文件夹,要按照Web项目要求创建。
    
    找到当前Servelet程序的class文件,要把这个文件放入到class文件中
    
    【注意】
        要求放入的class文件要带有完整的包名
        
    在WEB-INF文件
           |--day39
                |- WEB-INF: [固定写法]
                    |-classes:     存放二进制字节码文件的目录 放入.class文件【固定写法,可选】
                    |-web.xml 按照Servlet程序的规范书写XML文件

4.web.xml文件中的内容

<?xml version = "1.0" encoding = "utf-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
      version="3.0"
      metadata-complete="true">
    	<servlet>
    		<!-- servlet的内部名称 这个名字可以自定义-->
    		<servlet-name>HelloServlet</servlet-name>
    		<!-- servlet的class文件,这里要求是完整的类名 包名.类名-->
    		<servlet-class>包名+类名</servlet-class>
    
    	</servlet>
    	<servlet-mapping>
    		<!-- servlet的名字 要求和上面的名字一模一样-->
    		<servlet-name>HelloServlet</servlet-name>
    		<!-- servlet的访问名称:http://localhost:8080/mywebs/访问名-->
    		<url-pattern>/hello</url-pattern>//专门用来匹配浏览器中输入的内容
    	</servlet-mapping>
     </web-app>

servlet映射路径

Tomcat服务器启动之后
http://localhost:8080/day40/TestHttp

web.xml的配置文件

<servlet>
 <!-- 自定义的名字-->
<servlet-name>TestHttp</servlet-name>
<!-- Servlet程序的完整的包名.类名-->
<servlet-class>com.bitware.http.TestHttp</servlet-class>
</servlet>
<servlet-mapping>
<!--要求和上面name一致-->
<servlet-name>TestHttp</servlet-name>
<!--映射路径-->
<url-pattern>/TestHttp</url-pattern>
 </servlet-mapping>

浏览器访问服务器的URL分析

1.浏览器根据输入的URL来访问Tomcat服务器 http://localhost:8080
2./day40 访问在Tomcat服务器下webapps里面的day40项目文件夹
3./TestHttp 用来匹配在[WEB-INF]下的web.xml文件里面的url-pattern

/TestHttp称之为 映射路径

映射的流程:

1.在[WEB-INF]下的web.xml文件中匹配url-pattern
    2.匹配到就可以获取<servlet-mapping>,可以找到<servlet-name>标签内容,获取servlet-name
    3.通过匹配<servlet-name>找到<servlet>,也就可以获取到<servlet-class>标签内容
    在这个标签中宝包含了servlet程序运行需要执行的.class文件
    4.通过这个包名.类名就可以加载这个.class(字节码文件),运行servlet程序,这里
    用到的就是[反射]的思想。
    
url-patter 匹配形式:
    精确匹配:
    url-pattern规定的是写什么样的匹配,就在URL中些什么
    例如:
        /TestHttp 在浏览器中只能输入:
           http://localhost:8080/day40/TestHttp
        /TestHttp/hi 在浏览器中只能输入:
           http://localhost:8080/day40/TestHttp/hi
         
    一个字符都不能差,负责404.
    
    模糊匹配:
        /*      http://localhost:8080/day40/任意内容 都可以访问当前servlet程序
        *.do    http://localhost:8080/day40/任意内容.do结尾都可以访问当前servlet程序
        *.html(伪静态)  http://localhost:8080/day40/任意内容.html
        *.action
        *.jsp

    注意事项:
        1.模糊匹配不能同时使用\和* 不允许
        2.如果同时存在模糊匹配和精确匹配,精确匹配的优先级更高
        3.使用后缀名的迷糊匹配优先级最低。
        4.要求所有的Servlet的url-pattern都不能为/,不允许和Tomcat默认servlet冲突

Tomcat默认的servlet程序【缺省】 ----defaultServlet 最终的保障机制

在URL中输入
    Http://localhost:8080/day40/
    
    流程:
        1.在day40的项目目录下的【WEB-INF】里面的web.xml中匹配url-pattern为 / 的标签 【精确匹配】
        2.如果没有匹配到这个 / 映射路径,这个时候tomcat会把这个映射路径交给 在Tomcat中默认的servlet程序中
        ,DefaultServlet
        3.DefaultServlet会首先在day40的项目目录下找有没有对应的index.**文件
            这里可以支持 index.html index.jsp
        4.如果有,将对应的index.html发送给浏览器
        如果没有,报状态码404,跳转到默认的404页面


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值