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. 碰到错误Could not load the Tomcat server configuration at \Servers\MyEclipse Tomcat v8.5-config. The Servers project is closed.

    本人用的myeclipse是2017版. 可能解决的方法是: 双击MyEclipse Tomcat v8.5,然后就会弹出以下窗口,

  2. Memcache简介 & 内存分配机制

            关于这个东西里面到底应该存放数据网上一直有很多种说法,有的说sql进行md5之后作为键值,结果作为内容存放,也有人说按照业务逻辑错放,反正是炒的不亦乐乎.        本人经过将近2 ...

  3. MVC3 学习总结

        1.项目文件结构 controllers,views 2.Model特性实现模型的客户端和服务端的验证   1)自带特性   2)扩展特性,或者重写特性   3.实现MVC filter 的类 ...

  4. C语言基础一

    C语言学习 C语言的特点 语言简单.紧凑.使用方便.灵活 运算符丰富 数据类型丰富 具有结构化的控制语句 语法限制不太严格,程序设计自由度大 C语言允许直接访问物理地址,可以对硬件进行直接操作 生成代 ...

  5. hdu 2147 kiki's game(找规律)

    kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/10000 K (Java/Others)Total ...

  6. Unity3D重要知识点(转)

    Unity3D重要知识点 数据结构和算法很重要!图形学也很重要!大的游戏公司很看重个人基础,综合能力小公司看你实际工作能力,看你的Demo. 1.什么是渲染管道? 是指在显示器上为了显示出图像而经过的 ...

  7. 安装Nodejs、npm、Less(支持生成压缩后的css)

    安装Nodejs和npm 1.到https://nodejs.org/en/下载最新的版本,安装到d盘下,假设安装后的路径为D:\Program Files\nodejs, 笔者当前的版本v6.10. ...

  8. Hive数据导入——数据存储在Hadoop分布式文件系统中,往Hive表里面导入数据只是简单的将数据移动到表所在的目录中!

    转自:http://blog.csdn.net/lifuxiangcaohui/article/details/40588929 Hive是基于Hadoop分布式文件系统的,它的数据存储在Hadoop ...

  9. 06-THREE.JS 给所有物体相同的材质

    <!DOCTYPE html> <html> <head> <title></title> <script src="htt ...

  10. CSS3 之 RGBa 可透明颜色

    在 CSS3 中,增加了一个 opacity 属性,允许开发者设置元素的透明度,现在 opacity 已被主流的现代浏览器支持,但 opacity 会把被设置的元素及其子元素同时设置为同一个透明度,这 ...