1. 客户端访问服务器的时候是通过URL访问的,所以我们要想用浏览器访问我们的Servlet的时候,我们就需要将我们的Servlet映射到一个URL上(通过我们的web.xml文件中的<servler-mapping>中的两个子标签<servlet-name>和<url-pattern>两个标签实现URL的配置,<Servlet>标签是注册了一个Servlet,只有注册了我们才能进行映射,而且注册一个可以映射多个,所以一个注册的Servlet会被多次映射,也就是可以被浏览器的多个url访问,而且我们的加一个后缀名也可以访问
  2. /*、/news/*、/*.do 这三种方式的映射分别实现了不同的作用
     /*:任何的路径都可以访问
     /news/*:特定文件夹下的所有路径
    /*.do:特定扩展名的所有路径
    谁先被被匹配到???
      谁的匹配度高就匹配谁,谁最像就匹配谁。*.do的优先级最低,两个原则。
  3. Servlet的单例问题:Servlet是一个供其他java程序调用的类,它不能独立运行,针对客户端的多次请求,通常状况下,Servlet只会创建一个Servlet实例对象,一旦创建它就会驻留在内存中,为后续的请求提供服务,直至退出web应用为止,也就是当我们关闭了浏览器之后我们的Servlet就终止了。
    当Servlet第一次访问的时候,就被加载到内存中,以后该实例对各个请求服务,没次情况会调用一次service方法。
    这样会出现什么问题:因为Servlet是单例的,所以会出现线程安全问题:
      例如:售票系统(如果一个变量被多个用户共享,我们就需要实现同步机制,如果一个变量不需要共享直接在doGet或者doPost中定义,这样不会存在线程安全问题
         解决方法1:用这个对象将其synchronized(this){}包住,实现同步机制。
            解决方法2:
  4. servlet中配置<load-on-startup>配置的说明:
    需求:当我们的网站启动的时候,可能会要求初始化一些数据(比如像创建一些临时的表),再比如我们的网站会有一些要定时完成的任务(定时写日志,定时发送邮件)
    解决方法:可以使用配置这个标签然后结合一些线程相关的知识解决问题。
    先说明<load-on-startup>:通过配置该标签,可以指定该Servlet自动创建。
        实例1:初始化一些东西
        实现:1、在Servlet标签中配置<load-on-startup>标签。2、在init函数中写要初始化的东西。
        实例2:每隔1分钟发送一份电子邮件
        实现:1、新建一个线程 2、调用线程,配置<load-on-startup>标签
      
    public void init() throws ServletException {
    // Put your code here
    System.out.println("我们的线程启动了");
    SendEmail send=new SendEmail();
    send.sendmail();
    }

      

    package com.lyw.servlet;
    
    public class SendEmail extends Thread {
    public void sendmail(){
    int i=0;
    while(true){
    i++;
    try {
    Thread.sleep(10*1000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    System.out.println("发送第"+i+"份邮件");
    }
    }
    }

      

    <load-on-startup>2</load-on-startup>
    

      我们的<load-on-startup>标签中夹的数字是什么意思???有什么作用??

        这代表我们启动是顺序,因为在实际开发中我们肯定要初始化多个对象,所以我们在这里要用数字表明启动的顺序。

  5. ServletConfig对象
    该对象主要是用于读取Servlet的一些配置信息,
    <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
    </init-param>

      

    package com.lyw.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter; import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse; public class FirstServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html");
    String encoding=this.getServletConfig().getInitParameter("encoding");
    response.setCharacterEncoding(encoding);
    PrintWriter out=response.getWriter();
    out.print("编码是:"+encoding);
    } public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { doGet(request, response);
    } /**
    * Initialization of the servlet. <br>
    *
    * @throws ServletException if an error occurs
    */
    public void init() throws ServletException {
    // Put your code here
    System.out.println("我们的线程启动了");
    SendEmail send=new SendEmail();
    send.sendmail();
    } }

      读取配置信息,该配置信息只能由该Servlet读取。但是,如果希望让所有的Servlet读取某个参数,应该这样配置:<contex-param>标签下配置的可以被任何Servlet读取。

  6. 如何去修改Servlet的文件
    在myeclipse的plugin目录下输入wizards进行搜索找到相应的jar包,用压缩包打开之后进行修改,改成自己想要的样子,然后保存即可,修改的时候要把myeclipse关闭了。

Servlet开发中注意的细节问题的更多相关文章

  1. javaweb学习总结二十二(servlet开发中常见的问题汇总)

    一:web应用的映射问题 通常我们从别人那里拷贝来的代码,自己会修改应用的名称,但是web映射的访问路径并没有修改,还是原来的映射. 解决方法: 工程右键--properties--myeclipse ...

  2. servlet开发中遇到的问题集合

    问题1: servlet插入数据库时中文会乱码. 解决方法:在数据库连接地址最后增加两个转码参数(?useUnicode=true&characterEncoding=utf8) url=jd ...

  3. Web(Jsp+ Servlet)开发中如何解决中文乱码问题

    1.中文乱码的成因 编码的字符集和解码的字符集不一致. 2.web开发过程中可能出现的乱码的位置及解决方案 ①request乱码 在向服务器传递数据时,所传递的中文有可能出现乱码. post请求(协议 ...

  4. iOS开发中的一些细节BUG的解决

    这篇博客里我将不定期更新自己遇到的一些细节上的BUG,并提供解决方法,遇到同样问题的童鞋们可以参考交流一下. 1.关于tableView的tableHeaderView 请注意,我这里说的是table ...

  5. Servlet开发 中使用 log4jdbc 记录 hibernate 的 SQL信息

    一.前言 使用log4jdbc在不改变原有代码的情况下,就可以收集执行的SQL文和JDBC执行情况. 平时开发使用的ibatis,hibernate,spring jdbc的sql日志信息,有一点个缺 ...

  6. react开发中的小细节

    目前开始使用react余遇到的问题还不是很多,但还是希望总结一下. react中的属性prop: 在react中组件的父子组件的通信是基于prop的,当然对于底层的东西不是特别了解,但可以说一说它的基 ...

  7. day05 Servlet 开发和 ServletConfig 与 ServletContext 对象

    day05 Servlet 开发和 ServletConfig 与 ServletContext 对象 1. Servlet 开发入门 - hello world 2. Servlet 的调用过程和生 ...

  8. Servlet开发-----基础及MVC设计模式

    一.Servlet介绍   Servlet本身只是普通的Java类,只有当容器为他创建了ServletConfig和ServletContext时才成为了一个Servlet:   Servlet简单的 ...

  9. javaWeb中servlet开发——过滤器

    servlet开发--过滤器(filter) servlet有三种,分为简单servlet.过滤器servlet.监听servlet 简单servlet是作为一种程序所必须的开发结构保存的,继承htt ...

随机推荐

  1. review03

    class XiyoujiRenwu{ float height; float weight; String head; String ear; void speak(String s) { Syst ...

  2. 查询优化 | MySQL慢查询优化

    ​Explain查询:rows,定位性能瓶颈. 只需要一行数据时,使用LIMIT1. 在搜索字段上建立索引. 使用ENUM而非VARCHAR. 选择区分度高的列作为索引. 采用扩展索引,而不是新建索引 ...

  3. JavaScript作用域新总结

    作用域是什么 当我们将变量引入程序后,这些变量住在哪里,当程序需要的时候如何找到他们?这些问题都需要一个规则来存储变量,并且之后可以方便的找到这些变量,这套规则就被称为 作用域 .(管理变量的规则) ...

  4. 牛客练习赛7E 珂朵莉的数列

    题意:求所有子区间的逆序数对数之和 题解:树状数组维护,对于每一对逆序数(l,r)属于l*(n-r+1)个区间,计算每一对对结果的贡献即可,可用树状数组维护,sum维护(n-r+1),按逆序数那样操作 ...

  5. Python学习之路day4-函数高级特性、装饰器

    一.预备知识 学习装饰器需理解以下预备知识: 函数即变量 函数本质上也是一种变量,函数名即变量名,函数体就变量对应的值:函数体可以作为值赋给其他变量(函数),也可以通过函数名来直接调用函数.调用符号即 ...

  6. 分布式_事务_02_2PC框架raincat源码解析

    一.前言 上一节已经将raincat demo工程运行起来了,这一节来分析下raincat的源码 二.协调者启动过程 主要就是在启动类中通过如下代码来启动 netty nettyService.sta ...

  7. 简洁的Jquery弹出窗插件

    做项目时,很多时候都需要弹窗提示.如果要求不是很严格的项目,直接使用alert就可以搞定.对于需要高度定制化的项目,而且要求比较高的时候,就需要设计符合整体风格的弹出层,这种有美工帮忙,也比较好搞定. ...

  8. 学习动态性能表(15)--v$rollstat

    学习动态性能表 第15篇--V$ROLLSTAT  2007.6.12 本视图自启动即保持并记录各回滚段统计项.在学习本视图之前,我们先来了解一下回滚段(rollback segment)的相关概念: ...

  9. 解决count distinct多个字段的方法

    Distinct的作用是用于从指定集合中消除重复的元组,经常和count搭档工作,语法如下 COUNT( { [ ALL | DISTINCT ] expression ] | * } ) 这时,可能 ...

  10. python模块导入的问题

    从模块导入函数时,通常可以使用 import somemodule 或者 from somemodule import somefunction 或者 from somemodule import s ...