Servlet详解

一、Servlet中的线程安全问题

在Servlet中定义变量,除非特殊要求,尽量使用局部变量。
如果有需要实例变量时,应做同步处理,且同步代码块尽量包围少的代码。

二、Servlet的配置对象:

    ServletConfig:(容器来创建)
        作用:代表了Servlet配置中的参数信息。
        比如在web.xml中的参数配置如下:
            
                ServletDemo2
                cn.itcast.servlet.ServletDemo2
                
                    aaa
                    bbb
                
                
                    xxx
                    yyy
                
              

三、ServletContext详解

1、在应用被服务器加载时就创建ServletContext对象的实例。每一个JavaWeb应用都有唯一的一个ServletContext对象
它就代表着当前的应用。
2、如何得到ServletContext对象:ServletConfig.getServletContext();
3、有什么用?
    3.1ServletContext对象是一个域对象(域对象就是说其内部维护了一个Map)
            Object getAttribute(String name):根据名称获取绑定的对象
            Enumeration getAttributeNames() :获取ServletContext域中的所有名称
            void removeAttribute(String name):根据名称移除对象
            void setAttribute(String name,Object value):添加或修改对象。
    3.2实现多个Servlet之间的数据共享
    3.3获取WEB应用的初始化参数(应用的全局参数)
        在web.xml的根元素下配置一下信息:
        
            encoding
            UTF-8
        
        这些参数就属于整个应用的全局参数,使用ServletContext来读取。
    3.4读取资源文件的三种方式:
        利用ServletContext.getRealPath():
                特点:读取应用中任何文件。只能在Web环境下用
        利用ResourceBundle读取配置文件
                特点:可以用在非web环境下。但是只能读取类路径中的properties文件
        利用类加载器读取配置文件(专业)
                特点:可以用在非web环境下。可以读取类路径下的任何文件。

插入:ServletAPI中的主要接口或类的核心类图

Tips:更改MyEclipse生成的Servlet的模板(8.5)
1、关闭你的MyEclipse
2、找到MyEclipse的安装目录C:\Program Files\Genuitec
3、搜索wizard(com.genuitec.eclipse.wizards_8.5.0.me201003052220.jar),这边要注意找的是.jar文件
4、打开,找到templates\Servlet.java,这个文件就是MyEclipse生成Servlet的模板代码
5、弄出来,做好备份,开始修改。

四、请求和响应对象概述

HTTP协议包含请求和响应部分。
HttpServletRequest就代表着请求部分
HttpServletResponse就代表着响应部分

学好的关键:HTTP协议。

五、HttpServletResponse详解

5.1输出中文数据:
    字节流:
        out.write("中文".getBytes("UTF-8"));有乱码
        解决办法:
            方式一:更改浏览器的查看编码(不可取)
            
            通知浏览器,使用的码表
            方式二:response.setHeader("Content-Type", "text/html;charset=UTF-8");
            方式三:response.getOutputStream().write("".getBytes("UTF-8"));
            *方式四:response.setContentType("text/html;charset=UTF-8");//方式二、三、四都是一样的
            
    字符流:
        Servlet中的字符流默认查ISO-8859-1(SUN的Servlet规范要求的)
        如何更改这个默认的编码呢?response.setCharacterEncoding("UTF-8");
        
        //不要忘记通知浏览器的编码
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Type", "text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.write(s);//默认查的是ISO-8859-1码表(SUN的Servlet规范要求的)
        
        
        在字符流输出中文数据时:response.setContentType("text/html;charset=UTF-8");
                有两个作用:通知字符流以UTF-8编码输出
                            通知客户端以UTF-8解码显示
        
        
5.2控制不要缓存
5.3控制缓存时间
5.4动态生成随机验证码图片
5.5定时刷新
5.6文件下载(中文文件名的文件下载)
5.7HttpServletResponse细节:
    字节流和字符流不能同时使用,互斥的。
    通过字符流或字节流输出的数据并不是直接打给浏览器的。而是把数据写到response对象的缓存中的。服务器从缓存中取出数据,按照HTTP协议的响应格式输出给浏览器。
    如果你调用的response的输出流没有主动关闭,服务器会替你关的。

六、HttpServletRequest详解

6.1常用简单方法
6.2获取请求消息头
6.3获取请求参数(内省)
6.4常用表单数据的获取
6.5域对象
6.6请求转发和重定向
6.7转发和重定向细节(实际开发中知道一个原则)

你可能感兴趣的:(Servlet详解)