06-Servlet

****一、Servlet中的线程安全问题
    在Servlet中定义变量,除非特殊要求,尽量使用局部变量。
    如果有需要实例变量时,应做同步处理,且同步代码块尽量包围少的代码。
    
***二、Servlet的配置对象:
        ServletConfig:(容器来创建)
            作用:代表了Servlet配置中的参数信息。
            比如在web.xml中的参数配置如下:
                <servlet>
                    <servlet-name>ServletDemo2</servlet-name>
                    <servlet-class>cn.itcast.servlet.ServletDemo2</servlet-class>
                    <init-param><!-- aaa=bbb -->
                        <param-name>aaa</param-name>
                        <param-value>bbb</param-value>
                    </init-param>
                    <init-param>
                        <param-name>xxx</param-name>
                        <param-value>yyy</param-value>
                    </init-param>
                  </servlet>
            
*****三、ServletContext详解
    1、在应用被服务器加载时就创建ServletContext对象的实例。每一个JavaWeb应用都有唯一的一个ServletContext对象
    它就代表着当前的应用。
    2、如何得到ServletContext对象:ServletConfig.getServletContext();
    3、有什么用?
        3.1ServletContext对象是一个域对象(域对象就是说其内部维护了一个Map<String,Object>)
                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的根元素下配置一下信息:
            <context-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </context-param>
            这些参数就属于整个应用的全局参数,使用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)
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("<meta http-equiv=‘Content-Type‘ content=‘text/html;charset=UTF-8‘>".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转发和重定向细节(实际开发中知道一个原则)

时间: 2024-08-23 21:21:18

06-Servlet的相关文章

06.实现servlet的几种方式,以及接口或者类之间的关系

接口:Servlet.ServletConfig.ServletRequest.ServletResponse.HttpServletRequest.HttpServletResponse.ServletContext 类:HttpServlet(抽象类).GenericServlet(抽象类) 来张关系图 ServletContext: ServletContext的对象是application是在项目初始化时被创建的.故servletContext随着应用初始化而被创建,随着应用的结束而被销

JavaEE基础(06):Servlet整合C3P0数据库连接池

本文源码:GitHub·点这里 || GitEE·点这里 一.C3P0连接池 1.C3P0简介 C3P0是一个开源的JDBC连接池,应用程序根据C3P0配置来初始化数据库连接,可以自动回收空闲连接的功能. 2.核心依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}

Java学习06 (第一遍) - JSP与Servlet

EL(Expression Language) <% User user=(User)session.getAttribute("user"); Dept dept=user.getDept(); String departname=dept.getDname(); %> EL: ${sessionScope.user.dept.departname} =${sessionScope.user.dept["departname"]} //.与[ ]意思一

Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext

场景描述 项目中用到spring boot进行带页面的开发,从github上的simples中下载了对应的spring-boot-sample-web-jsp项目,经简单修改之后死活启动不起来,各种异常.spring-boot以简单容易上手为核心宗旨,可为什么在引入jar时就会出现这么多问题呢? 异常信息 异常一: 2016-06-17 11:04:14.216 ERROR 4684 --- [ main] o.s.boot.SpringApplication : Application sta

Servlet&amp;jsp基础:第四部分

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接: http://www.cnblogs.com/jiangzhengjun/p/4289315.html 会话与状态管理... 58 cookie. 58 组成... 58 Set-Cookie2响应头... 59 Cookie请求头... 60 在Servlet中使用Cookie. 61 Cookie类... 61 构

Servlet&amp;jsp基础:第二部分

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接: HttpServletResponse. 20 产生响应状态行... 20 HTTP状态常量... 20 setStatus(int sc)20 sendError21 构建响应消息头... 21 addHeader与setHeader21 addIntHeader与setIntHeader21 addDateHead

JSP数据交互(二)和Servlet基础

01.Application原理与应用 01.application对象的作用域范围是整个应用服务,而它在应用中所承担的责任就类似于一个全局变量.只要服务启动,则application对象就会存在. 02.在一个应用中只有一个application,每一个用户都会共享这一个application对象. 03.通过统计网站访问次数来讲解application的用法 02.对象作用域 03.Cookie简介 解析:cookie是Web服务器保存在客户端的一系列文本信息,根据域名和端口号区分是否保存成

基于servlet实现一个web框架

servlet作为一个web规范.其本身就算做一个web开发框架,可是其web action (响应某个URI的实现)的实现都是基于类的,不是非常方便,而且3.0之前的版本号还必须通过web.xml配置来添加新的action. servlet中有一个filter的功能,能够配置全部URI的功能都经过filter.我们能够基于filter的功能来实现一个简单的web框架.在这个框架中,主要改进URI action的映射,就像play framework中route的配置: GET /hello c

servlet&amp;jsp高级:第五部分

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4289487.html 标准标签库(JSTL)... 98 JSTL的组成... 98 核心标签库... 99 <c:out>标签... 99 <c:set>标签... 99 <c:remove>标签... 100

Servlet服务器端编程之再体验

1.什么是Servlet?    * 服务器端Java程序,servlet需要交给服务器来运行.    * 与javax.servlet.Servlet接口有关的java程序    * sun公司提供一套servlet接口(API)具体实现的是靠web服务器(比如Tomcat.webLogic.JBoss等)    2.如果使用servlet?[必须]    * 创建web项目    * 创建一个类,并实现Servlet接口    * 交给服务器运行 /WEB-INF/web.xml