Servlet的一些细节(韩顺平老师视频讲解)
(1)
由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序想要被外界访问,
必须把servlet程序映射到一个URL地址上。这个工作在web.xml文件中使用
<servlet> & <servlet-mapping>

<servlet>
        用于注册Servlet,它包含两个主要的子元素<servlet-name> & <servlet-class>
        分别用于设置Servlet的注册名和Servlet的完整的类名
    <servlet-mapping>
        用于映射一个已经注册的Servlet的一个对外访问路径,它包含两个子元素<servlet-name> & <url-pattern>
        分别用于指定Servlet的注册名和Servlet的对外访问路径
(2)
同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名
(3)
在Servlet映射到URL中也可以使用 *通配符,但是只能有两种固定格式
    一种是“*.扩展名” 另一种是:以正斜杠开头,并以“/*” 结尾。
在匹配中,要参考的标准
    谁的匹配度高,谁就被选择
    *.do 的优先级最低
(4)
 Servlet是一个供其他java程序(servlet引擎)调用的java类,它不能独立运行,它的运行完全由Servlet引擎来控制
 
 Servlet的单例问题
     当Servlet被第一次访问后,就被加载到内存,以后该实例就对各个请求服务。即在使用中,是单例的。
     因为Servlet是单例的,一次会出现线程安全问题。如果不加线程安全机制,就会出现问题。
 synchronized(this)
        如果一个变量需要多个用户共享,则应当在访问该变量时,加同步机制
        synchronized(this){
            // 同步代码
        }
        如果一个变量不需要共享,则直接在doGet()  或者在 doPost() 中定义
(5)
在我们的网站启动的时候,就需要初始化一些数据,要求有定时完成的任务(定时写日志、定时备份数据库)。
<loat-on-startup>配合线程就可以搞定
ServletConfig对象用来读取servlet的配置信息。
如果希望所有的Servlet读取某个参数
<context-param>
    <param-name></param-name>
    <param-value></param-vlaue>
</context-param>
读取所有参数
Enumeration<String> names = this.getServletConfig.getInitParameterNames();
while(names.hasMortElements()){
    String name = names.nextElement();
}

Referer的实际案例
//获取用户浏览器Referer
    String referer = request.getHeader("Referer");

if(referer == null || !referer.startWith("")){
            response.sendRedirect("/Error");
    }    
//下载文件演示
response.setHeader("Content-Disposition", "attachment; filename=winter.jpg");
//打开文件,说明web站点下载文件原理
//1.获取要下载文件的全路径
String path = this.getServletContext().getRealPath("/images/winter.jpg");
//2.先读到tomcat中,创建文件输入流
FileInputStream fis = new FileInputStream(path);
//做一个缓冲字节数组
byte[] buffer = new byte[1024];
int len = 0;//表示每一次读取了多少个字节
OutputStream output = response.getOutputStream();
while(len = fis.read(buff) > 0){
        output.write(buff, 0, len);
}
//关闭流

2016-2-1 Servlet细节的更多相关文章

  1. Servlet细节

    Servlet细节 线程不安全的做法: * 不要在Servlet中创建成员!创建局部变量即可! * 可以创建无状态成员! * 可以创建有状态的成员,但状态必须为只读的!(不提供set方法) 1.Ser ...

  2. HTTP协议 Servlet入门 Servlet工作原理和生命周期 Servlet细节 ServletConfig对象

    1 HTTP协议特点   1)客户端->服务端(请求request)有三部份     a)请求行--请求行用于描述客户端的请求方式.请求的资源名称,以及使用的HTTP协议版本号 请求行中的GET ...

  3. Servlet第二篇【Servlet调用图、Servlet细节、ServletConfig、ServletContext】

    Servlet的调用图 前面我们已经学过了Servlet的生命周期了,我们根据Servlet的生命周期画出Servlet的调用图加深理解 Servlet的细节 一个已经注册的Servlet可以被多次映 ...

  4. Servlet细节整合

    最近在复习Servlet,发现其中有很多细节方面的东西都没有接触到,只是学了大概 1.请求转发和请求重定向的区别 2.输入参数为中文时候的乱码问题 3.Web工程中的目录写法 下面分别阐述 1.请求转 ...

  5. 2 Servlet 细节

    1 Servlet 配置详解 ①  由于客户端在浏览器只能通过URL访问web服务器的资源,所以Servlet程序若想被外界访问,必须把Servlet 程序映射到一个URL 地址上,这个工作在项目we ...

  6. Servlet细节处理

    1.Servlet的线程安全问题 尽管servlet的工作效率高,但是线程也是不安全的,因为一个类型的Servlet只有一个实例对象,那么就有可能会出现一个Servlet同时处理多个请求 解决方案:所 ...

  7. Servlet技术之——概述、实现、细节、获取资源、ServletConfig、ServletContext

    Servlet概述.实现.细节.获取资源.ServletConfig.ServletContext (一) Setvlet基本概述 (1) 什么是Servlet ? Servlet(Server Ap ...

  8. javaweb之servlet 全解

    ①Servlet概述 ⑴什么是Servlet Servlet是JavaWeb的三大组件之一,它属于动态资源.Servlet的作用是处理请求, 服务器会把接收到的请求交给Servlet来处理,在Serv ...

  9. 初学Java Web(4)——Servlet学习总结

    经过一段时间的学习,对于Servlet有了新的不一样的见解,在这里做一下总结,将近来学习到的知识总结一下. Servlet 的请求流程 浏览器发出请求:http://localhost:80/xxx1 ...

随机推荐

  1. bootstarp

    我最近在学一个前端框架叫bootstarp.我的老大给了一个bootstarp的模板给我,我看了看感觉没意思.因为那里面的样式,我也会写,所以我就没心思去看,每次只要面板上有的我就搬下来就完了,只要面 ...

  2. Qt - QThread(翻译帮助文档)

    QThread Class 详细描述 QThread 类提供一个平台无关的方法来管理线程. 一个QThread对象管理一个程序中的控制线程.QThread在run()中开始执行任务.默认地,run() ...

  3. Python全栈开发【基础三】

    Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...

  4. VMWARE修改CPUID

    在cmd shell下执行wmic cpu get ProcessorId命令,可是查看机器的cpuID,但这个命令显示的只是2组ID,实际CPUID,有4组 通过更改虚拟机配置文件.vmx可是实现任 ...

  5. printf和scanf

    一 printf和scanf(printf和scanf是c语言中的输入输出库函数) printf(”格式控制“,输出列表) <1>格式控制 其中包含 格式声明(%+相应格式对应字母).转义 ...

  6. - > code vs 3038 3n+1问题(递归)

    3038 3n+1问题  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 白银 Silver 题解   题目描述 Description 3n+1问题是一个简单有趣而又没有解决的数 ...

  7. APP里如何添加本地文本

    首先考虑到用webview加载,那么久需要把文本转化成html的形势啊:如下,先把文字放到一个文本里,然后 文本转换H5: 1.在word中将文件格式布局 2.word中文本标题设为宋体标题,设字号, ...

  8. MarkdownPad2 表格不显示处理

    1.添加表格的扩展 工具 >选项 > Markdown >Markdown处理器 改为 “Markdown(扩展)”即可. 2.在设置的过程中要注册markdownpad2 邮箱: ...

  9. Activemq的连接方式

    http://blog.csdn.net/liangguo03/article/details/7011227 http://blog.csdn.net/johnnie_deng/article/de ...

  10. 使用Azure REST API创建虚拟机

    Hollis Yao, Shihao Rong  使用REST API创建虚拟机之前,首先要确保Azure订阅中已经建好了"云服务"和"存储账号".如果没有的话 ...