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. MySQL索引分析

    索引的出现解决数据量上升导致查询越来越慢的问题,优化数据的查询,提高查询的速度. 索引 定义: 通过各种数据结构实现的值到行位置的映射.快速定位与访问特定的数据. 作用: 提高访问速度 实现主键.唯一 ...

  2. Python爬虫之利用正则表达式爬取内涵吧

    首先,我们来看一下,爬虫前基本的知识点概括 一. match()方法: 这个方法会从字符串的开头去匹配(也可以指定开始的位置),如果在开始没有找到,立即返回None,匹配到一个结果,就不再匹配. 我们 ...

  3. 性能差异 ASP.NET WebForm与ASP.NET MVC

    一.为什么说 ASP.NET WebForm 比 ASP.NET MVC 要差? WebForm 顾名思义,微软一向主打简单化,窗体模式,拖拽控件就能做网站了, 然而这也引发了许多 Java 和 .N ...

  4. NodeJs学习之API篇

    学习nodeJS的API在对于使用nodeJS来进行编程的是十分重要的,所以首先就要去学习看看,相关的node的模块,来看一看相关的内容和可用性. 正文篇: nodeJS的API学习之路.(这里我们将 ...

  5. BW信息STMS传输

    项目时先接过来的.前面的人建了很多数据源,信息对象.我也建了不少.最后分成三个包.非常混乱,信息对象不在一个包里.导入报错.先后顺序也没有逻辑.可为难我了. 本来想着是全部释放掉,然后在传输连接收集自 ...

  6. Object.assign()与深拷贝(一)

    深拷贝与浅拷贝 所谓深拷贝与浅拷贝,是围绕引用类型变量的拷贝进行的讨论. 在ECMAScript中,变量分为基本类型和引用类型两种.其本质区别是不可变性,基本类型是不可变的,而引用类型是可变的. 所谓 ...

  7. Django上传文件的两种方式

    基于form表单上传文件 HTML <h3>基于form表单的上传文件</h3> <form action="" method="post& ...

  8. PHP文件管理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. hdu1863(最小生成树)

    很裸的最小生成树,但要注意判断输出问号的情况.其实就是当给的图不是连通图时输出问号.判断方法是:看形成的最小生成树的边数是不是等于节点数减一. #include<iostream> #in ...

  10. stl_algobase.h

    stl_algobase.h // Filename: stl_algobase.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: ...