Servlet
    1,servlet介绍
        servlet是一项动态web资源开发技术.
        运行在服务器端.
        作用:处理业务逻辑,生成动态的内容,返回给浏览器.
        本质就是一个类
     servlet的入门
        1.编写servlet(类)--- 继承HttpServlet
        2.编写关系--- web.xml(在WEB-INF下)
        3.访问:
            路径:http://localhost:80/serveltDemo/helloWorld
    servlet的体系结构及其常见api
        Servlet-- 接口
            |
            |
        GenericServlet---(抽象类)
            |
            |
        HttpServlet--(抽象类)
       
        常用的方法:
            servlet的常用方法:
                void init(ServletConfig):初始化方法
                void service(ServletRequest,ServletResponse):服务--处理业务逻辑
                void destroy():销毁方法
               
                ServletConfig getServletConfig():返回一个servlet的配置对象
                String getServletInfo() :返回是servlet一些信息,比如作者 版本
           
            GenericServlet的常用方法:
                实现了除了service方法之外的所有方法
                init():自己重写init方法
            HttpServlet的常用方法:
                service(HttpServletRequest,HttpServletResponse):服务--处理业务逻辑
                doGet(HttpServletRequest,HttpServletResponse):处理get请求的
                doPost(HttpServletRequest,HttpServletResponse):处理post请求的
    代码示例:

1 public class HelloWorldServlet extends HttpServlet {
2     @Override
3     public void doGet(HttpServletRequest req, HttpServletResponse resp)
4             throws ServletException, IOException {
5         System.out.println("hello world servlet");
6     }
7 }

HelloServlet.java

<servlet-mapping><servlet-name>HelloWroldServlet</servlet-name><url-pattern>/helloWorld</url-pattern>
</servlet-mapping><servlet><servlet-name>LifeServlet</servlet-name><servlet-class>cn.augmentum.b_life.LifeServlet</servlet-class>
</servlet>     

  2,servlet生命周期:
       生命周期:什么时候来的,什么时候走的.
            void init(ServletConfig):初始化方法
                 * 执行时间:默认情况来说,第一次的请求的时候执行
                 * 执行次数:一次
                 * 执行者:tomcat
            void service(ServletRequest,ServletResponse):服务--处理业务逻辑
                * 执行时间:有请求就执行
                * 执行次数:请求一次,执行一次
                * 执行者:tomcat
            void destroy():销毁方法   
                * 执行时间:服务器正常关闭的时候执行
                * 执行次数:一次
                * 执行者:tomcat
        servlet是单实例多线程的
            默认的情况下是第一次访问的时候创建(有服务器创建),每出现一次请求,创建一个线程,用来处理请求,
            直到服务器正常关闭或者项目移除的时候servlet销毁
   url-pattern编写
        1.完全匹配,----(servlet最常用的)以"/"开头
            例如:/a/b/c/hello
        2.目录匹配 以"/"开头,以"*"结尾(filter常用的)
            例如:/a/*
        3.后缀名匹配 以"*"开头 
            例如:  *.do   *.jsp
       
        优先级:
            完全匹配>目录匹配>后缀名匹配
       
        有如下的一些映射关系:
            Servlet1 映射到 /abc/*
            Servlet2 映射到 /*
            Servlet3 映射到 /abc
            Servlet4 映射到 *.do
        问题:
            当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应
                Servlet引擎将调用Servlet1。
            当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应
                Servlet引擎将调用Servlet3。
            当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应
                Servlet引擎将调用Servlet1。
            当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
                Servlet引擎将调用Servlet2.
            当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
                Servlet引擎将调用Servlet2。
         tomcat的defalutservlet处理别的servlet处理不了的请求.
   load-on-startup
       
在servlet标签下
        改变servlet初始化时机.
        若值>=0的时候,servlet会随着服务器的启动而创建.
        值越小,优先级越高
    浏览器的路径编写:
        1.浏览器直接输入
        2.a标签
        3.location.href
        4.表单提交
       
        路径的写法:
            1.绝对路径
                带协议的绝对路径--一般访问站外资源的时候用
                    http://localhost:80/servletDemo/helloWorld
               
不带协议的绝对路径--站内资源
                    /servletDemo/helloWorld
            2.相对路径
                ./(路径) 和 ../
                八字方针
                    当前路径  http://localhost/servletDemo/    index.html
                    访问路径  http://localhost/servletDemo/    demoa
                   
                    当前路径  http://localhost/servletDemo/   a/b/c    ../../demoa
                    访问路径  http://localhost/servletDemo/   demoa
        以后使用的是绝对路径(一般使用的是不带协议的绝对路径)
       
3,ServletConfig
   
他是当前servlet的配置对象.
    获取方式:
        ServletConfig config=this.getServletConfig();
    作用:
        1.可以获取到当前servlet初始化参数
        2.可以获得全局管理者
    常用方法:
        String getServletName():获取当前servlet的名称 --指的是web.xml中servlet名字
        String getInitParameter(name):获取指定的参数
        Enumeration getInitParameterNames():获取全部初始化参数名称
       
        ServletContext getServletContext():获取全局管理者
    当servlet初始化的时候,执行了init(ServletConfig config),就把创建好的servletConfig传给了servlet
        由tomcat创建

示例代码:

 1 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 2     ServletConfig conf=this.getServletConfig();
 3     //获取当前servlet名字
 4     String name=conf.getServletName();
 5     System.out.println(name);
 6
 7     //获取名字为 "姓名"的参数值
 8     String value = conf.getInitParameter("姓名");
 9     System.out.println(value);
10
11     //获取全部参数名称
12     Enumeration<String> names=conf.getInitParameterNames();
13     while(names.hasMoreElements()){
14         String name_=names.nextElement();
15         System.out.println(name_+":"+conf.getInitParameter(name_));
16     }
17 }

View Code


4,ServletContext
    全局管理者.
    每个应用在tomcat启动的时候,就会创建一个servletcontext对象,这个对象可以获取到当前应用的所有信息,实现资源共享.
    本质servletcontext就是对当前应用的一个引用.
    作用:
        1.实现资源共享
        2.获取全局初始化参数.
        3.获取资源.
    怎么获取:
        this.getServletConfig().getServletContext():
        getServletContext()也可以获取
    常见的方法:
        String getInitparameter(name);获取指定的参数
        Enumeration getInitParameterNames():获取全部的参数名称
            参数   
                <context-param>
                    <param-name>
                    <param-value>
                   
        String getRealPath(path):返回相应文件在tomcat的实际路径
            例如:D:\JavaTools\apache-tomcat-7.0.53\webapps\servletDemo\
        InputStream getResourceAsStream(String path) :以流的形式返回对应的文件.
       
        String getMimeType(String file)   可以获取一个文件的mimeType类型. 例如 text/html
        URL getResource(String path) 它返回的是一个资源的URL        例如:  localhost/day09/a.html
    域对象:
        把他看成一个map,
        xxxAttribute()
            setAttribute(String,Object):添加
            Object getAttribute(string):获取
            removeAttribute(string):移除
示例代码:

 1 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 2     //首先获取ServletContext对象
 3     ServletContext context=this.getServletContext();
 4
 5     //获取url
 6     String url=context.getInitParameter("url");
 7     //System.out.println(url);
 8
 9     //获取全部的全局初始化参数
10     Enumeration<String> paramNames=context.getInitParameterNames();
11     while(paramNames.hasMoreElements()){
12         String name=paramNames.nextElement();
13         ///System.out.println(name+":"+context.getInitParameter(name));
14     }
15
16     //返回 "/"的路径
17     //String path=context.getRealPath("/");
18     //String path = context.getRealPath("/5.txt"); // 错误的
19     //System.out.println(path);
20     /*InputStream in = context.getResourceAsStream("/WEB-INF/classes/cn/itcast/e_servletcontext/5.txt");
21     BufferedReader reader = new BufferedReader(new InputStreamReader(in));
22     String readLine = reader.readLine();
23     System.out.println(readLine);*/
24
25     //获取index.htmlmime类型
26
27     String type = context.getMimeType("/a.html");
28     //System.out.println(type);
29     URL url_ = context.getResource("/a.html");
30     System.out.println(url_.getPath());
31 }

View Code


     

5,classpath
   
获取字节码文件的路径.
    通过字节码文件获取
        当前类.class.getResource("/").getPath():返回classes的目录
            D:/JavaTools/apache-tomcat-7.0.53/webapps/day09/WEB-INF/classes/
        当前类.class.getResource("").getPath():返回当前类的字节码文件所在的目录
            D:/JavaTools/apache-tomcat-7.0.53/webapps/day09/WEB-INF/classes/cn/itcast/h_classpath/
           
    通过类加载器获取文件路径
        当前类.class.getClassLoader().getResource("/").getPath():返回classes的目录
            D:/JavaTools/apache-tomcat-7.0.53/webapps/day09/WEB-INF/classes/
        当前类.class.getClassLoader().getResource().getPath():返回classes的目录
            D:/JavaTools/apache-tomcat-7.0.53/webapps/day09/WEB-INF/classes/
示例代码:

 1 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 2     //String path1 = PathServlet.class.getResource("/").getPath();
 3     // D:/JavaTools/apache-tomcat-7.0.53/webapps/day09/WEB-INF/classes/
 4     //String path2 = PathServlet.class.getResource("").getPath();
 5     // D:/JavaTools/apache-tomcat-7.0.53/webapps/day09/WEB-INF/classes/cn/augmentum/h_classpath/
 6     // System.out.println(path1);
 7     // System.out.println(path2);
 8
 9     //String path3 = PathServlet.class.getClassLoader().getResource("/").getPath();
10     //String path4 = PathServlet.class.getClassLoader().getResource("").getPath();
11
12     //System.out.println(path3);
13     //System.out.println(path4);
14     //       myeclipse                         tomcat路径                                             获取
15     //1.txt  src                            /WEB-INF/classes/1.txt                            lei.class.getResource("/").getpath()
16     //2.txt  webroot                        /2.txt                                            context.getRealPath
17     //3.txt  web-inf                        /WEB-INF/3.txt                                    context.getRealPath
18     //4.txt  cn.augmentum.h_classpath            /WEB-INF/classes/cn/augmentum/h_classpath/4.txt    lei.class.getResource("").getpath()
19
20     ServletContext context=this.getServletContext();
21     String path1 = PathServlet.class.getResource("/1.txt").getPath();
22     String path2 = context.getRealPath("/2.txt");
23     String path3 = context.getRealPath("/WEB-INF/3.txt");
24     String path4 = PathServlet.class.getResource("4.txt").getPath();
25
26     /*System.out.println(path1);
27     System.out.println(path2);
28     System.out.println(path3);
29     System.out.println(path4);*/
30     readFile(path1);
31     readFile(path2);
32     readFile(path3);
33     readFile(path4);
34 }

View Code

小demo: 当访问index.html中的 链接则通过CountServlet计数, 每访问一次则count加1, 然后通过ShowServlet展示到控制台:

 1 public class CountServlet extends HttpServlet {
 2
 3     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 4         //访问计数
 5         //首先获取context对象
 6         ServletContext context=this.getServletContext();
 7         //请求一次,context取出访问次数
 8         Integer count=(Integer) context.getAttribute("count");
 9         //次数+1,放入context中
10         if (count==null) {
11             context.setAttribute("count", 1);
12         }else{
13             context.setAttribute("count", ++count);
14         }
15     }
16
17     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
18         doGet(request, response);
19     }
20
21 }

CountServlet.java

 1 public class ShowServlet extends HttpServlet {
 2
 3     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 4         //首先获取context
 5         ServletContext context=this.getServletContext();
 6         //取次数
 7         Integer count=(Integer) context.getAttribute("count");
 8         System.out.println("访问的次数为:"+(count==null?0:count));
 9     }
10
11     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
12         doGet(request, response);
13     }
14
15 }

ShowServlet.java

1 <body>
2     <a href="/servletDemo/count">显示次数</a><br/>
3     <a href="/servletDemo/show">展示结果</a><br/>
4 </body>

index.html

 1 <servlet>
 2     <servlet-name>CountServlet</servlet-name>
 3     <servlet-class>cn.augmentum.showcount.CountServlet</servlet-class>
 4 </servlet>
 5 <servlet>
 6     <servlet-name>ShowServlet</servlet-name>
 7     <servlet-class>cn.augmentum.showcount.ShowServlet</servlet-class>
 8 </servlet>
 9 <servlet-mapping>
10     <servlet-name>CountServlet</servlet-name>
11     <url-pattern>/count</url-pattern>
12 </servlet-mapping>
13 <servlet-mapping>
14     <servlet-name>ShowServlet</servlet-name>
15     <url-pattern>/show</url-pattern>
16 </servlet-mapping>

web.xml

转载于:https://www.cnblogs.com/wang-meng/p/5389214.html

[Java拾遗三]JavaWeb基础之Servlet相关推荐

  1. [Java面试三]JavaWeb基础知识总结.

    [Java面试三]JavaWeb基础知识总结. 1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Int ...

  2. [Java拾遗四]JavaWeb基础之Servlet_RequestResponse

    今天来回顾下之前学过Servle的Resquest以及Response的知识. 1,Request和Response技术:     rr的作用:         request是请求,封装用户的请求信 ...

  3. java项目如何分工合作,JavaWeb基础 jsp+servlet分工合作的简单示例

    礼悟: 好好学习合思考,尊师重道存感恩.叶见寻根三返一,江河湖海同一体. 虚怀若谷良心主,愿行无悔给最苦.读书锻炼强身心,诚劝且行且珍惜. javaEE:7 javaSE:1.8 JSTL:1.2.2 ...

  4. JavaWeb基础知识总结

     [Java面试题]JavaWeb基础知识总结. 1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l ...

  5. 超详细的Java面试题总结(四 )之JavaWeb基础知识总结

    系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...

  6. index加载显示servlet数据_[WEB篇]-JavaWeb基础与应用-02-Servlet开发

    JavaWeb基础与应用 2.Servlet开发 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源 ...

  7. 超详细的Java面试题总结之JavaWeb基础知识总结

    超详细的Java面试题总结之JavaWeb基础知识总结 Java互联网架构师08-29 16:01 打开网易新闻 查看更多精彩图片 Servlet总结: 在Java Web程序中,Servlet主要负 ...

  8. 【黑马Java笔记+踩坑】JavaWeb基础——JDBC

    目录 JDBC JDBC概述 JDBC概念 JDBC本质 JDBC好处 JDBC步骤 标准代码 编写代码步骤 获取数据库连接的各种方式 JDBC所有API 驱动管理类 DriverManager 数据 ...

  9. 超详细的Java面试题总结之JavaWeb基础知识总结,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

最新文章

  1. 孙正义看科技未来:今后30年要把钱和精力投向哪里
  2. bash--shell高级编程-特殊字符
  3. boost:验证Boost的BOOST_CLASS_REQUIRE宏
  4. cs-Panination
  5. phpmyadmin 安装 配置
  6. 阿里云CentOS服务器挂载数据盘
  7. ajax 详解(GET,POST方式传输以其封装)
  8. Nginx系列一:Nginx介绍与Nginx工作原理分析
  9. 发那科机器人override指令_上海发那科(FANUC)机器人有限公司内部教材 -
  10. linux的intel显卡驱动下载地址,英特尔®嵌入式媒体和显卡驱动程序(英特尔® EMGD)...
  11. Rational Rose2007的安装
  12. libselinux conflicts with fakesystemd-1-17.el7.centos.noarch
  13. 软件工程毕业设计题目安卓Android移动端推荐
  14. unity 手电筒光源SpotLight
  15. 如何有效防治企业污染
  16. 如何使用SWFTools 命令 将pdf文件转换为swf文件,并进行在线浏览该pdf文件
  17. 小米pro15笔记本开机错误代码怎么U盘重装系统
  18. 2022-2028年中国国际货运代理行业市场竞争态势及未来前景分析报告
  19. Climb Stairs
  20. 计算机断层ct检查要不要麻醉,你过虑了!做CT记住三个叮嘱,其实不会很伤身体...

热门文章

  1. tfs java开发需要jar_使用Spring框架开发最少需要哪些jar包,依赖jar包有哪些?
  2. 综合评价模型的缺点_视频/图像质量评价综述(一)
  3. 【干货】运维人员常用的Linux命令汇总
  4. 14 位大咖导师集结完毕,阿里云云原生加速器就等你来
  5. 林昊获中国计算机学会杰出工程师奖,阿里中间件再获高度肯定,“三位一体”推动技术普惠
  6. 流量暴增,掌门教育如何基于 Spring Cloud Alibaba 构建微服务体系?
  7. 11 个新项目入选 CNCF Sandbox | 云原生生态周报 Vol. 56
  8. 2300+ commits,80+ Contributors,阿里 PouchContainer 工程质量实践
  9. c语言 12大于12么,【C语言】第十二章
  10. influxdb查看数据库命令_influxdb基本命令