黑马程序员技术交流社区

标题: 【厦门JavaEE就业1期-每日总结】request和response [打印本页]

作者: 厦门校区    时间: 2018-6-3 20:26
标题: 【厦门JavaEE就业1期-每日总结】request和response
同学们,今天我们学习了request和response,在JavaWeb阶段几乎每天我们都要和这两个对象打交道。

今日需要掌握的有:

请同学们按照如上要求,总结今日所学。





作者: q55w66    时间: 2018-6-3 21:33
请求req——ServletRequest接口   
{
    获得与客户机相关的信息
    获取页面提交的数据
    作为域对象存取数据
    {
        作用范围:一次请求的范围
        创建:客户端发送一次请求,服务器会创建一个request对象
        销毁:当服务器对这次请求作出响应后
        相关API
        {
            Object getAttribute(String name)
            void setAttribute(String name, Object o)
            void removeAttribute(String name)
        }
    }
}

响应res——ServletResponse接口
{
    处理响应体
    {
        相关API
        {
            字节流:ServletOutputStream getOutputStream()
            字符流:PrintWriter getWriter()
        }
        注意
        {
            响应式要么字符流要么字节流,不能两者一起用
        }
    }
   
    处理响应头
    {
        add系列相关API:针对一个key对应多个value头
        {
            void addDateHeader(String name, long date)
            void addHeader(String name, String value)
            void addIntHeader(String name, int value)
        }
        set系列相关API:针对一个key对应一个value头
        {
            void setDateHeader(String name, long date)
            void setHeader(String name, String value)
            void setIntHeader(String name, int value)
        }
    }
   
    子接口HttpServletResponse
    {
        setStatus(int sc)
        {
            状态码
            200成功
            302重定向
            304查找本地缓存
            404访问资源不存在
            500服务器内部错误
        }
    }
}


处理中文乱码问题
{
    响应
    {
        字节流输出
        {
            1.设置浏览器打开时默认采用的字符集编码---(Response对象).setHeader("Content-Type","text/html;charset=UTF-8")
            2.设置中文字节取出时候的编码---(Response对象).getOutputStream.writer("中文".getBytes("UTF-8"))
        }
        字符流输出
        {
            概述:Response对象使用的字符流有缓冲区,默认编码ISO-8859-1,编码根本不支持中文
            方法一
            {
                1.设置Response对象的字符流的缓冲区的编码---(Response对象).setCharacterEncoding("UTF-8");
                2.设置浏览器打开时默认采用的字符集编码---(Response对象).setHeader("Content-Type","text/html;charset=UTF-8")
            }
            方法二
            {
                一键设置(Response对象).setContentType("text/html;charset=UTF-8")
            }
        }
    }
   
    请求
    {
        概述:Request对象有一个缓冲区.request的缓冲区也是ISO-8859-1编码
        
        POST方式
        {
            设置Request对象的缓冲区的编码---(Request对象).setCharacterEncoding("UTF-8");
        }   
        
        GET方式
        {
            使用String(byte[] bytes,String charsetName)
            举例:String str = new String(request.getParameter("name").getBetys("ISO-8859-1"),"UTF-8");
        }
    }
}
            
               
转发和重定向
{
    重定向redirect
    {   
        概述
        {   
            两次请求,两次响应
            地址栏改变
            路径仍然是客户端到服务器,需要带工程名
            可以跳转到任意网站
        }
        一键设置(HttpServletResponse对象).sendRedirect("/MyWeb/fathersday/Title.html")
    }
   
    转发forward
    {   
        概述
        {
            一次请求,一次响应
            地址栏不变
            路径是服务器到服务器,不需要带工程名
            只能在服务器内部进行转发
        }
        (ServletRequest对象).getRequestDispatcher(String path).forward(ServletRequest request, ServletResponse response)
    }
}

读取文件
{
    相关API
    {
        InputStream getResourceAsStream(String path)  根路径为(MyWeb)/
        String getRealPath(String path) 获取磁盘绝对路径
    }
   
    注意
    {
        Tomcat加载Web项目后,实际上是将WebContent文件夹重命名为Web项目名称后,
        放到Tomcat根目录下的webapps文件夹下,此时Java Resources的scr路径变成了WEB-INF/classes
    }
}

文件下载
{
    超链接下载
    {
        方法:直接将路径写到href中
        前提:文件类型浏览器不支持打开
    }
        
    手动编写代码方式完成下载
    {
        1.获得文件的MIME类型---String getMimeType(String file)
        2.设置两个头一个流
        {
            (Response对象).setHeader("Content-Type", TypeName)---告诉浏览器以下载的形式打开文件
            (Response对象).setHeader("Content-Disposition", "attachment;filename="+filename);
            InputStream getResourceAsStream(String path)---设置文件输入流,将Web项目文件变成输入流
        }
        3.然后用outputStream输出
        {
            (Response对象).getOutputStream()
        }
}


作者: wpwing    时间: 2018-6-3 21:45
吴鹏
总结
------------------------------------------------


掌握response设置响应头
    response.setHeader(name,value);这是针对一个key对应一个value;

掌握重定向和转发的区别
    重定向请求两次,转发请求一次;
    重定向的地址栏会发生变化,转发不会;
    重定向可以定向到任意网站,转发只能在服务器内部(当前工程);
    重定向的路径要加上工程名,转发的路径不需要加工程名;

掌握request接收请求参数
    request.getParameter(String name);获取指定name属性的属性值;
    String request.getMethod();获得表单传递方法;
   
掌握request域的作用范围
    request的作用于只在request的生命周期里,当当前request的生命周期结束时(即当前request的响应结束)
    即销毁;当使用request的转发时,request的作用域的范围和时间可以延长,因为转发只有一次请求,并且转发
    是发生在服务器内部的,可以实现保存在域里的变量在另外一个java或jsp中被调用;
作者: 光宇    时间: 2018-6-3 21:55
侯玉林
今天讲了下载和注册,以及在其中的各种编码错误.
作者: 磬辰    时间: 2018-6-3 21:57
林文辉
案例:登录成功后进行文件下载。
1.如果直接使用<a href=""></a>,有写类型浏览器支持直接打开,就无法完成下载,
所以需要告诉浏览器以下载的形式打开文件
2.接收页面传来的文件名(带扩展名)参数,通过getServletContext().getMimeType(filename)
获取MIME文件类型(这是让浏览器知道这个文件是什么类型),并设置头信息
response.setHeader("Content-Type", type);
3.设置Content-Disposition头  response.setHeader("Content-Disposition", "attachment;filename="+filename);
4.通过getServletContext().getRealPath()获取绝对路径,并设置输入流
5.通过response.getOutputStream() 获取输出流。
6.进行边读边写,完成文件下载。

response和request各自的编码转换:
大前提:服务端(转码后的编码)和客户端编码要保持编码一致
对与服务器响应:response.setContextType("text/html;charset=utf-8");
对与客户端请求:post请求:request.setCharacterEncoding("UTF-8");
                       get请求:String str = new String(    request.getParameter("name").getBetys("ISO-8859-1")      ,  "UTF-8"   );

案例:完成用户注册功能
和登录的案例类似,从表单总获取数据,向服务器发出请求。服务器获取参数,
封装实体类,调用业务层,业务层调用Dao层向数据库插入数据

重定向和转发的区别
1.重定向的地址栏会发生变化,转发的地址栏不变.
2.重定向两次请求两次响应,转发一次请求一次响应.
3.重定向路径需要加工程名,转发的路径不需要加工程名.
4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.

简单来说就是:跳转页面后需要获取request域中的值,就使用转发,
否则重定向或者转发。如果一定要使用重定向的话,那就需要将值存入
session中,因为session的周期是关闭浏览器后才结束的,这样重定向以后依然
可以取到之前存储在session中的值

作者: 滴滴eclipse启动    时间: 2018-6-3 21:57
江某人:
     掌握response设置响应头:
文件下载的方式:
一种:超链接下载.直接将文件的路径写到超链接的href中.---前提:文件类型,浏览器不支持.
二种:手动编写代码的方式完成文件的下载.
设置两个头和一个流:
Content-Type                        :文件的MIME的类型.
        String type = this.getServletContext().getMimeType(filename);
        response.setHeader("Content-Type", type);
Content-Disposition                :以下载的形式打开文件.
        response.setHeader("Content-Disposition", "attachment;filename="+filename);
InputStream                        :文件的输入流.
        String realPath = this.getServletContext().getRealPath("/download/"+filename);
        InputStream is = new FileInputStream(realPath);
        掌握重定向和转发的区别:
重定向和转发的区别:(redirect和forward的区别)
1.重定向的地址栏会发生变化,转发的地址栏不变.
2.重定向两次请求两次响应,转发一次请求一次响应.
3.重定向路径需要加工程名,转发的路径不需要加工程名.
4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.       
       
使用request对象存取数据:
        setAttribute(String name,String value);
        Object getAttribute(String name);

request的作用范围:
        作用范围就是一次请求的范围.
        创建和销毁:
        创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
        销毁:当服务器对这次请求作出了响应之后.

作者: 5119    时间: 2018-6-3 21:57
游荣辉
总结
        今天学了用ServletContext对象来读取WDB项目下的文件
                InputStream getResourceAsStream(String path); --- 根据提供路径读取文件返回一个文件的输入流.
                String getRealPath(String path); --- 返回一个路径的磁盘绝对路径.再配合inputStream来完成读
        响应行       
                void setStatus(int sc)   设置状态码
        响应头
                     addDateHeader(String name,long date)
                     addHeader(String name,String value)
                     addIntHeader(String name, int value)
                                                ------------一个key对应多个value头信息
                     setDateHeader(String name,long date)
                     setHeader(String name,String value)
                     setIntHeader(String name, int value)
                                                -------------一个key对应一个value头信息
        响应体
                 SrevletOutputStream  getOutputStream()   字节输出流
                 printWriter   getWriter();字符流
            重点:手动编写代码的方式完成文件的下载.
                * 设置两个头和一个流:
                    * Content-Type                        :文件的MIME的类型.
                    * Content-Disposition                :以下载的形式打开文件.
                   * InputStream                        :文件的输入流.


        有乱码的出现就去找编码处理!!!!!!!!


        Request也是一个域对象,他的生命周期是客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.当服务器对这次请求作出了响应之后就销毁

        重定向和转发的区别:
                1.重定向的地址栏会发生改变,转发不会发生改变
                2.重定向是两次请求和两次响应,而转发是一次请求和一次响应
                3.重定向路径需要加工程名,而转发不要加工程名
                4.重定向可以跳转所有的页面,而转发只能在服务器内部进行转发
作者: Eclipse启动    时间: 2018-6-3 21:58
郑阳阳
response设置响应头:
一个key对应一个value有三个方法:
setDateHeander(String name,long date);
setIntHeader(String name,int value);
setHeader(String name,String value);一般使用这个name为想要设置的key, value为要更改后的值
一个key对应多个value:就是把set换成add,今天没有使用.

重定向redirect和转发forward的区别:
1.重定向响应和请求两次,转发为一次
2.重定向跳转地址会变,转发不会
3.重定向路径需要加工程名,转发不需要
4.重定向可以跳转任意网站,转发只能在当前服务器跳转

request接收请求参数:
request.getParameter(String name);

request域的作用范围:
request的作用范围就是一次请求,发送请求时创建,响应后销毁.重定向不能使用.
作者: Yanmo_    时间: 2018-6-3 21:59
颜琳琳
   request的作用:用于获取请求的参数(参数和客户机信息)以及使用转发到页面并传递数据(转发和域对象)
掌握:(1)接受参数的方法
String getParameter(String name);
Map<String,String[]> getParameterMap();
String[] getParameterValues(String name);
(2)中文乱码处理方法
<meta charset="utf-8">
get请求: new String(request.getParameter("name").getBetys("IS0-8859-1"),"UTF-8");
post : request.setCharacterEncoding("utf-8");
(3)域对象属性处理方法()
setAttribute(String key,Object value);
Object getAttribuet(String key);
removeAttribute(String key)
(4)其他常用API:
得到工程名: getContextPath()
得到请求方式: getMethod();
(5)转发:request.getRequestDispatcher(径).forward(request,response);

response的作用:用于对请求做出响应,主要是下载文件和重定向
(1)下载文件
必要条件:两个头一个流
Content-Type -- MIME类型 ServletCOntext.getMIMEType();
Content-disposition:  attachment;filename=文件名(Content-disposition作用用于向浏览器发送响应时告诉他不管什么类型文件都要有下载的方式打开)
(2)响应中文乱码
字符流:(简写方式)response.setContenntType("text/html;charset=utf-8");
response.setHead("content-type","text/html;charset=utf-8");
response.setCharacterEncoding("utf-8")
字节流:response.setHead("content-type","text/html;charset=utf-8");
response.getOutPutStream().writer("中文版".getBetys("utf-8"))
(3)重定向
response.sendredirect("工程名/")

重定向和转发的区别:
(1)转发使用的是request,重定向使用的是response对象
(2)重定向的地址栏会发生变化,转发的地址栏不变
(3)重定向两次请求两次响应,转发一次请求一次响应
(4)重定向路径需要加工程名,转发的路径不需要加工程名.
(5)重定向可以跳转到任意网站,转发只能在服务器内部进行转发.
作者: sts    时间: 2018-6-3 21:59
su haib
今天主要是三个重点:一个是ServletContext的功能和使用;再是文件的下载;还有就是用户注册
getResourceAsStream读取文件
1.InputStream getResourceAsStream(String path)--根据提供的路径读取文件返回一个文件的输入流
2.String getRealPath(String path)--返回一个路径的磁盘绝对路径
getRealPath读取文件
通过今天的学习,我们能知道ServletContext有四个功能:
1.读取全局初始化参数(不重要,了解就好)
getInitParameter(String name)
2.获得文件的MIME类型
getMineType(String file)
        3.作为域对象存取数据(重点!!!)
        范围是整个web项目,而且是全局的对象,在服务器启动的时候,服务器为每个web项目创建一个单独的ServletContext对象,在服务器关闭的时候销毁ServletContext

        4.读取web项目下的文件(重点!!!)
类加载器读取文件(扩展,了解就好)
文件下载的方式:
设置两个头,一个流(属于手动编写代码的方式)
Content-Type(文件的MIME类型)
Content-Disposition(以下载的形式打开文件)
InputStream(文件的输入流)

对于中文文件的下载,可能会出现乱码问题,处理方法参考编码处理的文件;

重定向和转发的区别(超重点!!!!!!)
即redirect和forward的区别
重定向的地址栏会发生变化,转发的地址栏不变
重定向两次请求两次响应,转发一次请求一次响应
重定向路径需要加工程名,转发的不需要
重定向可以跳转的任意网站,转发只能在服务器内部进行转发
这个知识点很重要,需重点掌握,一时无法理解的话在之后还会反复用到,到时再逐步加深理解掌握!!!
作者: 偏离X    时间: 2018-6-3 21:59
郭明杰
*超链接下载.直接将文件的路径写到href中,前提是文件类型浏览器不支持
*手动编写代码下载:
                设置两个头和一个流
                #Content-Type :文件的MIME的类型
                #Content-Disposition:以下载的形式打开
                #InputStream         :文件的输入流
[response]输出响应内容的方法
        1:getOutputStream().write(xxx) 字节输出方法
        2:getWriter().println(xxx)        字符输出方法
      两种方法互斥,不能同时使用

[Response]:代表响应的对象,从服务器向浏览器输出内容
request 代表用户的请求

转发跟重点向的区别:
       
        重定向:两次请求两次响应 ,地址栏发生变化,路径需要加工程名
        转发:一次请求一次响应 ,地址栏不发生变化,路径不需要加工程名

**重定向的两种格式:
//重定向第一种:
                response.setStatus(302);
                response.setHeader("Location","/tiredServlet/success.html" );       
//重定向第二种:
//                response.sendRedirect("/tiredServlet/success.html");



转发的格式:
        request.getRequestDispatcher("path").forward(request,response)

request 的作用范围
  作用范围就是一次请求的范围
  创建和销毁:
        创建:客户端向服务器发送了一次请求后,服务器就会创建一个request的对象
        销毁:当服务器对这次请求坐出了响应之后



作者: 厦门黑马王子    时间: 2018-6-3 22:00
郑雪平

今天学了登录成功后完成文件的下载和用户注册的功能,文件的下载方式有两种:1.超链接下载,就是直接将文件的路径写到超链接中,不过文件类型的话浏览器不给予支持的;2.采用手动编写代码的方式完成文件的下载,要领是设置两个请求头一个字节流.实现的步骤:1.将之前的登录功能代码块准备好;2.在下载页面添加下载链接;3.编写代码实现.
完成用户注册的功能分为四步骤:1.创建数据库和表;2.创建包和类;3.引入注册页面;4.代码的实现.
request作为域对象来存储数据, 介绍request的作用范围:一次请求的范围.
创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
销毁:当服务器对这次请求作出了响应之后.
重定向和转发的区别: redirect和forward
                           
1.重定向的地址栏里会发生变化,但转发的地址栏不变.

2.重定向是发起两次请求得到两次响应,而转发则是一次请求一次响应.

3.重定向的路径需要加上工程名,而转发的路径则不需要加工程名.

4.重定向可以跳转到任意的网站,转发却只能在服务器的内部进行转发.

作者: 李志勇    时间: 2018-6-3 22:00
李志勇:
ServletContext对象读取WEB项目下的文件
InputStream getResourceAsStream(String path); --- 根据提供路径读取文件返回一个文件的输入流
String getRealPath(String path); --- 返回一个路径的磁盘绝对路径
【文件下载的方式】
一种:超链接下载.直接将文件的路径写到超链接的href中.---前提:文件类型,浏览器不支持.
二种:手动编写代码的方式完成文件的下载.
设置两个头和一个流:
Content-Type                        :文件的MIME的类型.
        String type = this.getServletContext().getMimeType(filename);
        response.setHeader("Content-Type", type);
Content-Disposition                :以下载的形式打开文件.
        response.setHeader("Content-Disposition", "attachment;filename="+filename);
InputStream                        :文件的输入流.
        String realPath = this.getServletContext().getRealPath("/download/"+filename);
        InputStream is = new FileInputStream(realPath);
输出中文乱码的处理:
        字节流:
                设置浏览器默认打开的编码:
                resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
                设置中文字节取出的时候编码.
                “中文”.getBytes(“UTF-8”);
        字符流:
                设置浏览器打开的时候的编码
                resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
                设置response的缓冲区的编码
                response.setCharacterEncoding(“UTF-8”);
                简化的写法:response.setContentType(“text/html;charset=UTF-8”);

使用request对象存取数据:
        setAttribute(String name,String value);
        Object getAttribute(String name);

request的作用范围:
        作用范围就是一次请求的范围.
        创建和销毁:
        创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
        销毁:当服务器对这次请求作出了响应之后.
重定向和转发的区别:(redirect和forward的区别)
        1.重定向的地址栏会发生变化,转发的地址栏不变.
        2.重定向两次请求两次响应,转发一次请求一次响应.
        3.重定向路径需要加工程名,转发的路径不需要加工程名.
        4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.
作者: 一梦    时间: 2018-6-3 22:00
陈世彪:
今天学习了equest和response
response设置响应头
二种:手动编写代码的方式完成文件的下载.
设置两个头的方法
Content-Type        文件的MIME的类型.
Content-Disposition   以下载的形式打开文件.

重定向和转发的区别
1.重定向的地址栏会发生变化,转发的地址栏不变.
2.重定向两次请求两次响应,转发一次请求一次响应.
3.重定向路径需要加工程名,转发的路径不需要加工程名.
重定向可以跳转到任意网站,转发只能在服务器内部进行转发.

request接收请求参数
使用requset接受参数的方法
request.getParameter("filename")
通过文件的名字来获取
设置Request对象的缓冲区的编码---(Request对象).setCharacterEncoding("UTF-8");
String request.getMethod();获得表单传递方法;

request域的作用范围
    request的作用于只在request的生命周期里,当当前request的生命周期结束时(即当前request的响应结束)
    即销毁;当使用request的转发时,request的作用域的范围和时间可以延长,因为转发只有一次请求,并且转发
    是发生在服务器内部的,可以实现保存在域里的变量在另外一个java或jsp中被调用;
作者: chenyelong    时间: 2018-6-3 22:01
陈叶隆
1. 使用ServletContext对象读取WEB项目下的文件
i) InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
ii) String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");
InputStream is = new FileInputStream(realPath);

Properties properties = new Properties();
                properties.load(is);
2. 使用ServletContext获得文件的MIME的类型
String type = this.getServletContext().getMimeType("1.html");
3. 登录成功后,完成文件的下载
设置两个头和一个流:
    * Content-Type                        :文件的MIME的类型.
String type = this.getServletContext().getMimeType(filename);
response.setHeader("Content-Type", type);
    * Content-Disposition        :以下载的形式打开文件.
response.setHeader("Content-Disposition", "attachment;filename="+filename);
* InputStream                        :文件的输入流.
String realPath = this.getServletContext().getRealPath("/download/"+filename);
        InputStream is = new FileInputStream(realPath);
                // 获得response的输出流:
                OutputStream os = response.getOutputStream();
4. 完成用户注册的功能
// 获得客户机的IP地址:
                //String ip = request.getRemoteAddr();
// 获得用户的请求的路径:
//String url = request.getRequestURL().toString();
                //String uri = request.getRequestURI();
// 获得发布的工程名:
                //String contextPath = request.getContextPath();
// 重定向:
                // response.sendRedirect("/day10/ForwardServlet2");
// 转发:
                // request.getRequestDispatcher("/ForwardServlet2").forward(request, response);
5. 乱码的解决
i)请求乱码解决 :  
get请求:    String str = new String(request.getParameter("name").getBetys("ISO-8859-1"),"UTF-8");
                Post请求:       request.setCharacterEncoding("utf-8");


ii)响应乱码:        response.setContentType("text/html;charset=utf-8");

作者: finfin12    时间: 2018-6-3 22:03
张育辉
四:ServletContext对象四个功能
                        ServletContext对象:
                                1.获得全局初始化参数
                                        getInitParameter()根基名字获取对应的value值,
                                        getInitParameterNames()根基名字获取枚举
                                2.获得文件的MIME的类型
                                        可以通过getMimeType(String 文件名)获取文件类型,告诉浏览器用什么区解析
                                3.作为域对象存取数据.
                                4.读取web项目中的文件.
                                        getRealPath()获取盘符路径
                                        InputStream getResourceAsStream(String path);根据提供路径读取文件返回一个文件的输入流.
                                       
                五:文件下载两种方式        :
                                1:超链接下载.直接将文件的路径写到超链接的href中.---前提:文件类型,浏览器不支持;
                                2:设置两个头一个流
                                Content-Type                        :文件的MIME的类型.
                                Content-Disposition        :以下载的形式打开文件.
                                InputStream                        :文件的输入流.

                六:重定向和转发的区别:(redirect和forward的区别)
                        response.sendRedirect(String path); 完成重定向
                        request.getRequestDispatcher(String path).forward(request,response);完成转发,
                        1.重定向的地址栏会发生变化,转发的地址栏不变.
                        2.重定向两次请求两次响应,转发一次请求一次响应.
                        3.重定向路径需要加工程名,转发的路径不需要加工程名.
                        4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.

作者: 小故事    时间: 2018-6-3 22:40
谢洪彬:
Request:请求
Response:响应

今天一开始学习了ServletContent 并介绍了里面的四个方法:
1.获得全局参数
2.获得MIME类型
3.存取数据
4.读取文件

今天学习的第一个案例是下载文件:
下载文件又可以分为直接路径下载和代码实现下载,两者的区别在于路径下载如果是浏览器识别的文件则会直接打开,而代码实现则不管浏览器识别得了都可以下载:
下载文件的步奏:
1.获取文件,并拿到文件名
2.获取文件的MIME类型
3.设置MIME的一个头
4.设置默认下载的一个头
5.读取文件,然后写出
其中获取文件用Request
设置头使用Response
后面还学习Request域对象,是今天的重点
了解了Request的生命周期
有一个请求了,Request域则被创建
响应了则Request域则结束
还学习了重定向和转发的区别:
1.重定向请求,响应2次,而转发则一次
2.重定向会跳转到其他页面,而转发不会
3.重定向不能用于数据的存取,应为Request域会被创建并结束两次,而转发不会
4.重定向可以跳转到任何页面,但转发只能在本服务器内跳转

作者: 名字被人注册了    时间: 2018-6-3 22:55
刘文峰
response设置响应头:  setHeader()方法.方法里传入要设置的响应头参数,根据不同的参数在传入不同的值.例如 response.setHeader(“Content-Type”,”text/html”).Content-Type是要设置的响应头,”text/html”是Content-Type的值,代表的html文件的mime类型.
重定向和转发;重定向响应完成后地址栏会改变,重定向不会;重定向是两次请求两次响应,转发只有一次请求一次响应;重定向的request不可以作为域对象存取数据,转发可以;重定向跳转页面路径前要加工程名,转发不用;重定向可以跳转到其他工程的页面,转发只能跳转到当前工程的页面.
request获得请求参数:
getParameter():用来获取指定参数的值(用于单个值的参数)
getParameter():用来获取指定参数的多个值(用于有多个值的参数)
getParameterMap();以键值对的形式获取所有参数和值
request域对象的作用范围:发出请求时产生,响应后销毁
作者: 厦门陈强    时间: 2018-6-3 23:38
陈强
request&response的一天
今天就是围绕两个案例进行的
首先第一个是文件的下载,如果是一个基础版本的文件下载是相对简单的,只要设置两个头和一个流就可以了,但是涉及到中文乱码问题就会复杂一点,因为牵扯到了请求过程的乱码和响应过程的乱码处理
两个头就是Content-Type-----传递文件的MIME类型
                  Content-Disposition----以下载的形式打开
一个流就是文件的输入流---inputStream
第二个案例就是完成用户的注册和登录,这个过程就是将今天完成的注册进行更加严谨的判断,先进行查询用户名是否存在,然后再进行存储数据到数据库中.最后完成页面的跳转.
这个案例基本完成,所以细节的整理待整体完成再详细记录.
另外今天还提到了一个重点就是重定向和转发的区别:
1\重定向的地址栏会发生变化,而转发不会
2\重定向是两次请求,两次响应,而转发是一次请求,一次响应
3\重定向的路径需要加上工程名.而转发不用加工程名
4\重定向可跳转到任意的网页,而转发只能在服务器内部进行转发
5\使用重定向不能往request对象存数据,因为request的生命周期是一次请求和一次响应,而转发是可以使用request存数据的.

作者: 铁木啊童臂    时间: 2018-6-3 23:53
汪志阳
        早上讲解了web工程下文件的读取, 使用ServletContext中的getResourceAsStream读取.该方法是
根据提供路径读取文件返回一个文件的输入流.传入属性编辑文件/WEB-INF/classes/db.properties,通过属性编辑文件
修改工程文件的路径,创建properties对象,调用load方法实现文件的读取.
使用ServletContext中的getRealPath读取.,这是获得文件的绝对路径,同样的也会传入属性文件,创建properties对象,调用load方法实现文件的读取.
中文乱码出现:Response对象使用的字符流有缓冲区,默认编码ISO-8859-1,编码不支持中文;服务器和浏览器支持中文,但是选择不一致导致乱码
request作用范围:一次请求的范围,就是客户端发送一次请求,服务器会创建一个request对象
当服务器对这次请求作出响应后就销毁了.
重定向和转发:重定向可以理解为客户端向服务器某位置发送请求,服务器折返来告诉客户端,另一部分有办法达到请求要求,客户端又转向服务器,这样来回
发生了两次的请求与响应;转发是在请求数据基础上服务器直接跑到符合要求位置通知该数据响应,这是两者的不同.
除此之外不同还有:重定向的地址栏会发生变化,转发的地址栏不变..重定向可以跳转到任意网站,转发只能在服务器内部进行转发,且重定向不能在跳转的地方接收数据
转发可以.
作者: Nevermo    时间: 2018-6-4 00:02
xuyu
总结
读取配置文件
1 创建Servletcontext对象
2获得文件路径 getrealpath()
3 通过路径创建输入流
4 通过输入流加载配置文件
5 获得配置文件数据
  文件下载 手动编码下载
1 request获得需要下载的文件名
2通过文件名设置请求头 conntent-type 文件mime类型
3设置请求头 content-disposition 就是以下载方式打开文件
4通过文件名获得绝对路径 并创建输入流
5 获得response输出流并输出输入流读取到的内容完成下载
  乱码问题 根据是request乱码和response乱码分别做相应处理
用户注册功能
1 request获得提交的信息 可将提交的信息封装到信息类
2 调用方法查询信息和数据库 做出相应处理
3 用户名已存在 显示注册失败并跳转回注册页面
4用户名不存在 显示注册成功并跳转到登录对面
  一个request对应一个response (最后这段讲到晚上八点半了,真心听不下去了.超哥你一定要劝劝辉哥讲不完的课留着第二天自习的时候占用时间再讲也是可以接受的,千万别就是在上了一天课后还占用晚自习时间继续讲课,基本上都是处于接受的饱和状态,需要自己消化,越到后面听课效率越来越低了.今天最后讲的那些基本都没有听进去,只能靠第二天自己再花时间看一看,还有就是可以适当讲快点,挑重点强调就好不要面面俱到.)
作者: 林荣彬    时间: 2018-6-4 00:24
林荣彬
  
ServletContext的功能:
1.读取全局初始化参数
2.获得文件的MIME的类型
3.作为域对象存取数据
    范围:整个web项目.而且全局的对象.
    创建:服务器启动的时候,服务器为每个web项目创建一个单独的ServletContext对象.
    销毁:服务器关闭的时候销毁ServletContext.
4.读取web项目下的文件


文件下载的方式:
一种:超链接下载,直接在文件的路劲写到超链接的href中---前提:文件类型,浏览器不支持;
二种:手动编写代码的方式完成文件的下载:
  设置两个头一个流:
        Content-Type:文件的MIME类型;
        Content-Disposition:以下载的形式打开文件.
        InputStream:文件的输入流.

向页面响应的方法:
getOutputStream();
getWriter();

这两个方法是互斥的.做出响应的时候只能使用其中的一种流响应.

输出中文乱码的处理:
    字节流:设置浏览器默认打开的编码:
resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
设置中文字节取出的时候编码.
“中文”.getBytes(“UTF-8”);
字符流:设置浏览器打开的时候的编码
resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
设置response的缓冲区的编码
response.setCharacterEncoding(“UTF-8”);
简化的写法:response.setContentType(“text/html;charset=UTF-8”);

使用request对象存取数据:
setAttribute(String name,String value);
Object getAttribute(String name);

request的作用范围:
创建和销毁:
创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
销毁:当服务器对这次请求作出了响应之后.

重定向和转发的区别:(redirect和forward的区别)
1.重定向的地址栏会发生变化,转发的地址栏不变.
2.重定向两次请求两次响应,转发一次请求一次响应.
3.重定向路径需要加工程名,转发的路径不需要加工程名.
4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.
5.重定向不能往request对象存数据,而转发是可以使用request存数据.
作者: ...ylq    时间: 2018-6-4 00:35
叶凌青
今天学习了request和response
Response
Interface HttpServletResponse
extends ServletResponse
HttpServletResponse接口位于javax.servlet.http包中,继续了ServletResponse接口,是servlet中的重要对象。
request
interface HttpServletRequest extends ServletRequest

HttpServletRequest接口位于javax.servlet.http包中,继续了ServletRquest接口,是servlet中的重要对象。(域对象)
转发和重定向的区别
【重定向】response.sendRedirect(String path); -- 完成重定向
【转发】request.getRequestDispatcher(String path).forward(request,response);
【区别】
1.转发的地址栏不变的.重定向的地址栏发生变化的.
2.转发是一次请求一次响应,重定向是两次请求两次响应.
3.request域对象存取的值在转发中是有效的,在重定向无效的.
4.转发的路径不需要加工程名.重定向的路径需要加工程名.
作者: doudou0606    时间: 2018-6-4 09:39

文件下载的方式:
1:超链接下载.直接将文件的路径写到超链接的href中---前提:文件类型,浏览器不支持.
2:手动编写代码的方式完成文件的下载.
       设置两个头和一个流:
    * Content-Type:文件的MIME的类型.
    * Content-Disposition:以下载的形式打开文件.
    * InputStream:文件的输入流.

重定向和转发的区别:(redirect和forward的区别)
1.重定向的地址栏会发生变化,转发的地址栏不变.
2.重定向两次请求两次响应,转发一次请求一次响应.
3.重定向路径需要加工程名,转发的路径不需要加工程名.
4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.

输出中文乱码的处理:
1.字节流:
   * 设置浏览器默认打开的编码:
      * resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
   * 设置中文字节取出的时候编码.
       * “中文”.getBytes(“UTF-8”);
2.* 字符流:
     * 设置浏览器打开的时候的编码
         * resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
     * 设置response的缓冲区的编码
         * response.setCharacterEncoding(“UTF-8”);
          简化的写法:response.setContentType(“text/html;charset=UTF-8”);

使用request对象存取数据:
* setAttribute(String name,String value);
* Object getAttribute(String name);

request的作用范围:
* 作用范围就是一次请求的范围.
* 创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
* 销毁:当服务器对这次请求作出了响应之后.

作者: 张述明    时间: 2018-6-4 10:48
张述明

        使用ServletContext的方法读文件
1.1           InputStream is= getResourceAsStream(String path)
根据提供的路径读取文件返回一个文件的输入流
2.        2.获得文件的mime的类型
什么是Mime: .zip   .jpg      .txt  .html .av  .MP3

String type=GetmimeType(“file””)
3.作为域对象存取对象

4.读取web项目下的文件
Response的概述
代表响应的对象,从服务器向浏览器输出内容
1.        setStatus(int  sc)  设置状态码
响应头  部分
addHeader(String name ,String value); 针对一个key对应多个value的响应头
addDateHeader(String name , long data);
addintHeader(String name , int data);

setHeader(String name ,String value); 针对一个key对应一个value的响应头
setDateHeader(String name , long data);
setIntHeader(String name , int data);

响应体
getOutputStream()
Reponse输出响应的内容
GetOutputStream()
Getwriter()
这两种方法互斥,只能使用其中一种响应.
输出中文乱码的处理
1.        使用字节流输出中文
response.getOutputStream().write(“中文”.getBytes());
不一定有乱码
解决:设置中文转成字节数组取出的时候的编码
设置浏览器默认打开的时候的编码


2.        使用字符流去输出中文
Response.getWriter().println(“中文”);
一定会乱码
Response使用的字符流有缓存区
Reponse的字符流的缓存区的默认的编码是ISO-8859-1;编码不支持中文
解决:
设置response的字符流的缓冲区的编码.
设置浏览器默认打开的时候的编码

getWriter()
文件下载的方式
1.        超链接下载,直接文件的路径写到超级链接的href中,前提就是浏览器不支持文件类型
2.        手动编写代码的方式完成文件下载
设置两个头一个流
Request作为域对象存取数据;
setAttribute(String name ,string value);
object getAttribute(String name )

request 的作用范围
作用范围就是一次请求的范围
创建和销毁
创建:客户端向服务器发送一次请求以后,服务器会创建一个request的对象
销毁:当服务器对这次请求作出响应以后

转发和重定向的区别(redirect和forward)
1.        重定向的地址栏会发生变化,转发不会
2.        重定向路径需要加工程名,转发的路径不需要
3.        重定向两次请求和响应,转发一次请求一次响应
4.        重定向可以跳转到任意网站,转发只能在服务器内容进行转发



作者: 13163997058    时间: 2018-6-4 11:10
王刘锁
补:1,设置响应头的方法:set一key一值和add一key多值
setDateHeader("响应头名字",对应的long date值);
setHader("name","value");
setIntHeader("name",int值);
2,重定向是两次请求对应有两次响应,第一次请求的响应回一个地址信息,客户端根据地址信息
去做第二次请求,转发呢是服务器内部的活动,只有一次请求,但是接收这次请求的servlet解决
不了就会把这个请求转给另外的servlet,这个请求的连接对象还是一开始的servlet,因为这个
动作是服务器内部的动作,并没有做出响应,所以只有一次请求,
3,接收参数的方法;
getParameter(String name);根据name属性来获取参数
getParameterMap(),获取所有的参数 key是name value是参数
getParameterNames()获取说有的name
getParameterValues()获取所欲的参数,
4,request域对象的使用客户端一次请求服务器就会创建一个请求域request对象
记住方法:setAttribute(String name,Object obj);存数据 ,
         getAttribute(String name);根据存的参数名获取数据
request域只在该次请求范围有效,一旦这个请求被响应就会销毁域,
作者: 渣..    时间: 2018-6-4 13:04
柯威龙
今天主要是降了三个案例登录,下载,注册.首先学习ServletContext的功能.全局初始化.获得文件的MIME
的类型.ServletContext还可以作为域对象存取数据.Response代表响应的对象,从服务器向浏览器输出内容
.在下载案例时学习了中文编码乱码的问题.还有Response向页面响应的方法getOutputStream()和getWriter()
不过这两种方法是排斥的,主要最重点的是Response作为域对象存取数据.Response的作用是一次请求的范围.他的
创建时客户端向服务器发送一次请求以后,服务器就会创建一个Response对象.销毁是当服务器对此次请求做出相应之后.
和ServletResponse的域对象不一样.还有一个重点是重定向和转发的区别.主要是重定向是两次请求两次相应.而转发
是一次请求一次相应.其他还有一些区别,例如重定向的地址栏会发生变化,转发的地址栏不变,重定向路径需要加工程名
转发的路径不需要加工程名.
作者: 1748341437    时间: 2018-6-4 13:34

2018/6/3 林玮

今天主要学习了request和response的一些常用方法,然后用这些方法来实现我们的代码,还有就是request接收参数时的乱码处理,以及重定向与转发的区别(重在理解).

首先来说说request是什么?request呢就是get请求,有着许多方法,还可以作为域对象储存数据,与ServletContext相似,但又不同.request的作用范围也就在一次请求的范围,一次请求也就是从发出请求开始到返回响应结束,范围比较短一点.还有就是response了,这个今天好像没有强调,就了解一下好了,主要用于服务端向浏览器响应的操作,也有众多方法.还有就是乱码的处理了,由于各种原因,当我们运行的时候出现乱码是必然的.既然出现了乱码,当然就要知道该怎么处理了.处理乱码之前首先我们要知道是哪里出现了乱码,然后对症下药,这边有三个针对不同的乱码的处理的方法:1. String str = new String(request.getParameter("name").getBetys("ISO-8859-1"),"UTF-8");第一个是针对get请求获得参数乱码的解决,要创建String对象来把参数的编码改为"UTF-8";2.  request.setCharacterEncoding("utf-8");第二个是针对post请求的乱码解决,它有一个专门修改乱码的方法,所有就比较简单了.3. response.setContentType("text/html;charset=utf-8");最后一个就是响应乱码的解决了,它不分get,post响应乱码,比较简单粗暴一点,只要是响应乱码就用这个方法.最后来说说重定向和转发的区别吧,很多人在使用它们的第一时间看不出来它们的区别但是它们还是有很大的区别的,1. 重定向是两次请求两次响应/而转发是一次请求一次转发;2. 重定向不能获取参数/而转发可以;3. 重定向可以跳转到任何页面/而转发只在服务器内部来进行转发;  其实要说他们俩的区别的话还是能说很多的,只不过这几个是比较直观的一些区别;
作者: LittleSky    时间: 2018-6-4 14:19
常小天
今天学习的内容继续是servlet的知识。通过今天的两个案例来总结今天的学习内容。案例一是文件下载。实现方法有两个,一是超链接形式,这种方式只能在浏览器不支持的文件种类上实现下载。第二个方法就是通过手动编写代码完成下载。操作步骤可总结为设置两个头和一个流,即设置content-type:文件的mime类型,告诉浏览器下载的是什么类型的文件;设置Content-Disposition,告诉浏览器这个文件只能以下载的方式打开;设置Inputstream,文件输入流。这里着重说一下设置流。因为在web项目中我们无法再像以前一样通过相对路径来创建一个输入流,所以需要通过新的方式来创建这个流。这里提供两个方法。一是域对象servletcontext的getResourceAsStream方法,该方法需要的参数是我们要读取的文件的服务器绝对路径,也就是/项目名…形式的一个路径,它可以返回一个输入流。第二个方法是servletcontext的getRealPath方法,向它传入一个服务器绝对路径,它可以返回一个一盘符开始的磁盘绝对路径,再将这个磁盘绝对路径传入输入流构造方法获得一个输入流。以上三个设置都处理好之后,就可以配合response.getOutputStream()获得的response专属的输出流来进行文件的下载。文件下载实际就是从服务器读取再向客户端的磁盘写入的过程。
案例二是注册案例。本案例中我们要将用户填写的注册信息接收,并在数据库中查重,判断可以使用后再添加进数据库,最后跳转页面并给出相应提示。事实上这个案例与昨天的登录案例大同小异。在业务流程上依然是浏览器发送请求,servlet接收数据,封装成对象,调用业务层对象service,service对象再通过调用一个或多个DAO方法完成业务,并向servlet返回数据处理结果,servlet对结果进行判断并作出相应的响应。这些内容就不再多说,这里要说的是与昨天的一些区别的地方。新的内容有两项。一是一个新的域对象request。不同于servletcontext,request的生命周期更短,request在浏览器发送请求后创建,在本次响应后销毁,其作用范围与生命周期相同。第二项内容就是转发和重定向的区别。重定向是访问的第一个servlet响应一个重定向的状态码和一个新的地址给浏览器,浏览器再向这个新的地址发送请求,新的servlet再作出响应,并且这里的新的地址可以是服务器外的地址。所以是两个请求和响应,request域对象就不能在两次响应中传递数据。转发是访问的第一个servlet不响应,将请求转发给第二个servlet,由第二个servlet作出响应,整个过程只有一次请求和响应,并且这里的第二个servlet只能是在本服务器中的servlet,所以可以通过request域对象来传递信息。

作者: 许大炮    时间: 2018-6-4 15:18
许剑鸿 webDay15总结

掌握文件下载的方式:?
第一种:超链接下载.直接将文件的路径写到超链接的href中.---前提:文件类型,浏览器不支持.
第二种:手动编写代码的方式完成文件的下载.
    * 设置两个头(setHeader)和一个流:
    * Content-Type                :文件的MIME的类型.
    * Content-Disposition        :以下载的形式打开文件.
    * InputStream                :文件的输入流.


掌握注册-登录案例:
重定向与转发:
【重定向】response.sendRedirect(String path); -- 完成重定向
【转发】request.getRequestDispatcher(String path).forward(request,response);
【区别】1.转发的地址栏不变的.重定向的地址栏发生变化的.
             2.转发是一次请求一次响应,重定向是两次请求两次响应.
             3.request域对象存取的值在转发中是有效的,在重定向无效的.
             4.转发的路径不需要加工程名.重定向的路径需要加工程名.


同时request也是域对象 可以存储数据 在请求发出时创建request对象 响应回来后即销毁 所以它的生命周期:一次请求-响应的事件内
作者: 咸鱼coder    时间: 2018-6-4 15:19
万冕

今天主要学习注册页面的构建,就包含了所有三合一


手动编码下载
     设置两个头和一个流:

     Content-Type:文件MIME的类型.
     Content-Dispostion:把类型全改为下载模式
     inputStream: 文件输入流(下载就是下载这个)

解决编码问题,有神奇的解决编码.txt

重定向和转发

重定向
response.sendRedirect(String path);

1.地址栏会发生改变
2.两次请求两次回应
3.域对象的生命周期存取值无效

转发
request.getRequestDispatcher(String path).forward(request,response);

1.地址栏不会发生改变
2.一次请求一次回应
3.可以在域对象内存取值


request的域对象存取值用处可以输出错误信息
作者: 六道的骸6    时间: 2018-6-4 16:01
张裕
                                        Request与Response
Web项目读取文件要用绝对路径

ServletContext对象读取WEB项目下的文件
        getResourceAsStream(String path)        根据提供的路径读取文件返回字节输入流对象
        getRealPath(String path)                  返回路径的绝对路径(磁盘中的全路径)

        获取了ServletContext对象时相当于已经进入了项目路径里 已经不需要在路径名里加项目名了

功能:
        1 读取全局初始化参数
                getInitParameter(String name) 根据属性名获取值
                getInitParameterNames() 获取初始化参数的所有属性名

        2 获取文件的MIME类型
                getMimeType(String file) 获得文件MIME类型

        3 作为域对象来存储数据!
                范围:整个web项目 是全局的对象
                创建:服务器启动的时候,会为每个web项目创建一个单独的ServletContext对象
                销毁:服务器关闭的时候

        4 读取web项目下的文件!
                工具类 类加载器:加载class文件到内存中
                        类名.class.getClassLoader().getResourceAsStream("文件路径"); 返回字节输入流


                                        文件下载
Response概述
        响应对象,从服务器向浏览器输出内容

常用API
        setStatus 设置状态码
        setHeader... 设置响应头 查api
                设置响应体 查api

文件下载的方式
        1 超链接下载
                直接将文件路径写在超链接的href中 前提: 文件类型浏览器不支持  支持的话文件将直接打开
        2 手动编写代码
                设置两个头和一个流
                        Content-Type:文件的MIME的类型
                        Content-Disposition:以下载的形式打开文件
                        InputStream:文件输入流
       
操作步骤
        1 获取文件名
        2 获取文件类型
        3 设置type头
        4 设置Disposition头
        5 获取输入 输出流
                       

中文文件下载乱码解决
        请求乱码解决方式 new String(文件名.getbytes("ISO-8859-1"),"utf-8")
        响应乱码解决 URLEncoder.encode(文件名,编码类型)

response输出响应的方法
        1 getOutputStream()
        2 getWriter()
这两个方法是互斥的(只能使用其中一种流)

输出中文乱码的处理:
        字节流:
                设置浏览器默认打开的编码:
                        resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
                设置中文字节取出的时候编码.
                        “中文”.getBytes(“UTF-8”);
          字符流:
                设置浏览器打开的时候的编码
                        resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
                设置response的缓冲区的编码
                        response.setCharacterEncoding(“UTF-8”);
        简化的写法:response.setContentType(“text/html;charset=UTF-8”);



Request概述
        代表用户的请求
功能
        1 获取客户机的相关信息
        2 获取从页面中提交的参数
        3 作为域对象存储数据

request接收参数中文乱码的解决方法
        POST的解决方案:
                POST的参数是在请求体中,直接到达后台的Servlet.
                数据封装到Servlet中的request中.request有一个缓冲区 编码类型为ISO-8859-1
        设置request的缓冲区的编码:
                request.setCharacterEncoding(“UTF-8”);  一定要在接收参数之前设置编码

        GET的解决方案:
                1.修改tomcat的字符集的编码.(不推荐)
                2.使用URLEncoder和URLDecoder进行编码和解码的操作.
                3.使用String的构造方法:
                                new String()
Request作为域对象存取数据
        使用request对象存取数据:
                setAttribute(String name,String value);
                Object getAttribute(String name);

request的作用范围:
        作用范围就是一次请求的范围.
        创建和销毁:
                创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象!!!
                销毁:当服务器对这次请求作出了响应之后.


重定向和转发的区别
        1.重定向的地址栏会发生变化,转发的地址栏不变.
        2.重定向两次请求两次响应,转发一次请求一次响应.
        3.重定向路径需要加项目名,转发的路径不需要加项目名.
        4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.

重定向
        request.sendRedirect("路径");
转发
        request.getRequestDispatcher("路径").forwar(request,response);
作者: 凉面要趁热吃    时间: 2018-6-4 16:22
黄进安:

1.      读取WEB工程下的文件
l  使用ServletContext对象,调用getResourceAsStream(Stringpath);根据提供路径读取文件返回一个文件的输入流,在调用properties对象的方法load(获得的输入流) 从输入流中读取属性列表(键和元素对),在调用properties对象的getProperty(String key)用指定的键在此属性列表中搜索属性
l  使用ServletContext对象, getRealPath(Stringpath); 返回一个路径的磁盘绝对路径.在根据路径获得文件输入流,其余同上
2.      ServletContext的作用
l  读取全局初始化参数.
l  获得文件的MIME的类型.
l  作为域对象存取数据.
l  读取web项目下的文件
3.      文件下载案例
在下载页面的HTML文件中,下载的超链接如下
<a href="/webdemo03/ServletDown?filename=hello.jnt">hello.jnt</a>
l  ?之后的红色部分相当于点超链接之后,将红色部分的键值对信息请求到浏览器根据指定的url访问web.xml配置文件中对应的.class对象,此class对象继承了HttpServlet类就可以根据请求方式调用server方法,处理浏览器的请求和给予浏览器的响应
l  在servlet对文件进行下载操作步骤:
1)        获得请求参数: eg. request.getParameter("filename");--->得到值(文件名)
2)        获得文件类型: getServletContext().getMimeType(文件名);--->type
3)        设置Content-Type头: response.setHeader("Content-Type", type);
4)        设置Content-Disposition头: response.setHeader("Content-Disposition","attachment;filename="+filename);
5)        获得文件的输入流:InputStream.(ServletContext的两种方法获取)
6)        获得response的输出流: response.getOutputStream();
7)        利用输入流读取文件,利用响应输出流输出文件
4.      注册页面案例
l  跟昨天的登入案例差不多,只要在添加用户信息之前对用户名进行判断是否已经存在数据库即可
l  存在时:
1)        调用request对象的setAttribute(String name,String value);用来存储对jsp页面中的信息,eg: 用户名已存在
2)        利用转发返回注册页面重新注册(路径相对于服务器而言,可以不写项目名)
request.getRequestDispatcher("/demo02/regist.jsp").forward(req,resp);
用户名可用时:
1)        往数据库插入用户注册的相关信息即可
2)        利用重定向到登入页面
response.sendRedirect("/webdemo03/demo02/enter.jsp");



作者: zzx835387607    时间: 2018-6-4 16:34
郑志祥


用户注册的操作
1.创建User表(在数据库创建)
2.创建User实体类
3.导入3个包C3P0         mysql  DButils
4.创建userDao表(执行sql语句,增删改查)
5.创建UserServlce(业务层,创建UserDao对象,使用UserDao里面的方法)
6.创建UserSevlet  (1,解决乱码问题 2.接收数据 3.将数据封装到user对象中  4.调用业务-->userDao执行sql语句  -->跳转页面    转发跳转与重定向跳转)
转发跳转
request.getRequestDispatcher(路径).forward(request, response);
重定向跳转
response.sendRedirect("demo1-download/success.html");
7.Servlet的生命周期  (重点)
              生命周期:一个对象从创建到销毁的过程
        Servlet生命周期:从创建到销毁的过程
                创建时间: 客户第一次访问Servlet时创建Servlet实例(只创建一次)
                销毁时间: 当项目从服务器中移除的时候,或者关闭服务器的时候
解决乱码问题
请求乱码解决 :
get:
Stringstr=newString(request.getParameter("name").getBetys("ISO-8859-1"),"UTF-8");

post:    
request.setCharacterEncoding("utf-8");

响应乱码:        response.setContentType("text/html;charset=utf-8");

下载的操作步骤
1.接收数据
2.完成文件的下载
2.1设置Content-Type头
2.2设置Content-Disposition头   
2.3设置文件的InputStream.
作者: seilye    时间: 2018-6-4 16:43
叶身辉:


域对象:  可以存取数据.一个地方保存,另一个地方取出,  不同:生命周期和作用返回.
       
        ServletContext创建: 服务器启动,服务器会为我们每一个工程创建一个属于他们自己的ServletContext,在该工程的任意位置都可以获取ServletContext中的数据;
        ServletContext销毁, 服务器关闭或者项目从服务器中移除,销毁ServletContext.

        * ServletContext对象:(重要)-被多个用户共享.
    * 记录网站被登录的次数.
    * 在服务器启动的时候ServletContext就会被创建.一个WEB项目创建一个ServletContext对象.
在服务器关闭的时候销毁.域对象-存的数据有作用范围.
    * 功能:
        * 1.获得文件的MIME的类型.
        * 2.获得全局初始化参数.
        * 3.存取数据-作为域对象来使用.
            * setAttribute(String name,String value);
            * getAttribute(String name);
            * removeAttribute(String name);
        * 4.读取WEB项目的文件:
            * getResourceAsStream(String path);
            * getRealPath(String path);
       
       

        request创建:发送请求;
        request销毁:响应结束;
                *访问Servlet会不会创建request   会
                *访问JSP会不会创建request                会
                *访问HTML会不会创建request                会
               
        request:  
                        获得客户机信息:
                        getMethod();                        ---获得请求方式.
                        getQueryString();                ---获得请求路径后的参数.
                        getRemoteAddr();                ---获得客户机的IP地址.
                        getRequestURI();                ---获得请求的路径
                        getRequestURL();                ---获得请求的路径
                        getContextPath();                ---获得工程名
                        获得请求头
                        getDateHeader();
                        getHeader();
                        getHeaderNames();
                        getHeaders();
                        getIntHeader();
                        * request.getHeader(“User-Agent”);
                        * request.getHeader(“Referer”);
                        请求参数:
                        getParameter();   
                        getParameterMap();
                        getParameterNames();
                        getParameterValues();
                        用来作为域对象存取值:
                        removeAttribute();
                        setAttribute();
                        getAttribute();
                       
                       
        Response对象
                响应行:
                        Response设置状态码:
                        setStatus();
               
                响应头:
                * 一个key对应一个value
                setDateHeader();
                setHeader();
                setIntHeader();
                * 一个key对应多个value
                addDateHeader();
                addHeader();
                addIntHeader();
                响应体:
                getOutputStream();
                getWriter();
               
解决中文乱码问题
请求乱码解决 :  get请求:    String str = new String(request.getParameter("name").getBetys("ISO-8859-1"),"UTF-8");
                                post:       request.setCharacterEncoding("utf-8");

响应乱码:        response.setContentType("text/html;charset=utf-8");
                       
                       
文件下载:
                手动编码方式完成文件下载.
                        * 设置两个头和一个流:
                        * Content-Type:文件MIME的类型.
                        * Content-Dispostion:
                        * 文件的输入流:
                       
               
        session
        session       
               
               
域对象中的方法:
        setAttribute();
        getAttribute();
       
【重定向】
response.sendRedirect(String path); -- 完成重定向
【转发】
request.getRequestDispatcher(String path).forward(request,response);
【区别】
1.转发的地址栏不变的.重定向的地址栏发生变化的.
2.转发是一次请求一次响应,重定向是两次请求两次响应.
3.request域对象存取的值在转发中是有效的,在重定向无效的.
4.转发的路径不需要加工程名.重定向的路径需要加工程名.

作者: lnongge    时间: 2018-6-4 16:59
16weisong今天学习了request和response的对象的,这两个都是域对象,今天主要掌握2个案例即可:1.用户注册  2文件下载,只需把这两个案例给敲了即可掌握

作者: 376091692    时间: 2018-6-4 17:37
凌辉:
向页面响应的方法:
getOutputStream();
getWriter();

* 这两个方法是互斥的.
    * 做出响应的时候只能使用其中的一种流响应.
使用request对象存取数据:
setAttribute(String name,String value);
Object getAttribute(String name);

request的作用范围:
作用范围就是一次请求的范围.
*创建和销毁:
     创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
     销毁:当服务器对这次请求作出了响应之后.
1.重定向的地址栏会发生变化,转发的地址栏不变.
2.重定向两次请求两次响应,转发一次请求一次响应.
3.重定向路径需要加工程名,转发的路径不需要加工程名.
4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.
作者: 追风筝的人哇    时间: 2018-6-4 21:19
康元中
学习两个域对象ServeletContext和request
域对象是一个地方存数据一个地方取数据
1 ServletContext这个域对象 作用范围最大;在工程的任何位置都可以获取ServletContext中的数据
   ServletContext 创建时间:在tomcat第一次启动时创建
   ServletContext 销毁时间:在tomcat关闭或者移除项目时关闭
   在jsp中写代码可以用<%代码%>
2 request 是Servlet中的请求对象
   request 创建的时间:在浏览器发送请求
           结束的时间是在一次请求一次响应完
3 request的重定向和转发
   重定向是:resp.sendRedirect()   转发 request.getRequestDispatcher(路径).forward(request, response)
   两次请求和响应         是一次请求一次响应
   地址栏路径会改变       地址栏路径不发生该变
  路径要加上工程名        路径不用加工程名
request域对象存取的值在转发中是有效的,在重定向无效的.

4 Servlet
        Servlet生命周期:Servlet从创建到销毁的过程.
        何时创建:用户第一次访问Servlet创建Servlet的实例
        何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候.
用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,
那么Servlet中init方法就会执行.任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法
.在service方法内部根据请求的方式的不同调用doXXX的方法.(get请求调用doGet,post请求调用doPost).
当Servlet中服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执
5 **登录注册案例的完成
  6 文件的下载使用三个步骤: 设置两个响应头和一个响应到浏览器页面的文件输出流和输入流对接
   处理响应的中文乱码问题 :他分成了字符流 方式和字节流方式

  

作者: 郑学馨    时间: 2018-6-4 21:47
郑学馨
案例一:完成文件的下载
步骤:第一:创建下载的servlet类
     第二:获得传输的参数(也就是文件名)
     第三:根据传输的文件名调用contextservlet中的getmimetype()方法获取文件的Mime类型
     第四:设置文件类型:(设置响应头:response.setheader("content-type",mime类型));
     第五:设置文件名与下载文件开关(设置响应头:response.setheader("content-disposition","attachment;filename"+文

件名))
     第六:获得文件的下载的绝对路径:(this.getservletcontext().getrealpath("/文件所在文件夹名/"+文件名))
     第七:利用文件输入流读取文件(new fileinputstream(绝对路径));
     第八:利用response调用其中的getoutputstream()方法下载文件
     第九:文件流的写入方式:int len = 0;
                        byte[] b = new byte[1024];
                        while ((len = fs.read(b)) != -1) {
                        os.write(b, 0, len);
                        }
                        fs.close();

案例二:完成用户注册:
步骤:第一:创建数据库;
     第二:创建表信息
     第三:创建相对应的javabean
     第四:创建servlet类
        4.1:接收客户端传输的注册信息
        4.2:创建javabean对象
        4.3:将客户信息封装到对象中
        4.4:创建service(业务类)
                4.4.1:调用service类中的注册功能
                4.4.2:创建数据库操作类(userdao)
                        4.4.2.1:查询数据库中的数据,是否存在该用户名
                        4.4.2.2:不存在则向数据库中添加该对象
                        4.4.2.3:返回查询结果
     第五:根据返回的值判断是否存在,如果存在用户名,响应"用户名已存在",如果不存在,响应"注册成功"

servlet中的域对象:
1:request:请求域对象;一个用户可以有多个,存储的数据在进行响应后就销毁了,生命周期较短
2:servletcontext:项目域对象,所有用户共用这一个,存储的数据全局都可以调用,只有在服务器停止或者项目移除后销毁
3:session:一个用户只有一个
作者: Do1    时间: 2018-6-4 22:09
本帖最后由 Do1 于 2019-11-23 00:37 编辑


学习了request和response,很不错挺好用
作者: AsusCoder    时间: 2018-6-4 22:17
webday03_request&response总结
  
   JavaWeb基础都是重点吗?变成鱼的脑子了,学了后面忘了前面。

  案例一从web工程文件夹下读取文件。与传统文件读取不同,web工程发布到Tomcat以后文件结构发生了改变。正确在web工程中读取资源是利用ServletContext里面的两个方法getResourceAsStream(filename)和getRealPath(path)的方法获取资源在tomcat的磁盘绝对路径。两个方法的区别是getResourceAsStream()返回的是字节流对象,getRealPath()返回的是字符串路径。

  第二个案例手动编写一个下载文件的方法。这个案例涉及到的知识很多。
  第一,前端页面的文件连接是用get的方式上传把文件名给Servlet。Servlet接收文件名后,又使用ServletContext获得这个文件的MIME类型,用来给浏览器识别。
  第二,通过ServletContext的getRealPath得到文件的绝对路径。
  第三,设置了两个头:头一"Content-type",后面接一个文件的MIME类型让浏览器识别这个文件类型。头二"Content-Disposition","attachment;url=filename="+filename;告诉要通过下载的方式获得这个文件
  第四,输出文件到用户的浏览器中。使用字节流的形式来操作文件。输入流可以从ServletContext的getResourceAsStream(filename)方法来获得,输出流是response的输出流OutputStream()输出流
  第五,有了输入流和输出流,把输入流转换成文件流。建立一个字节数组byte[1024] ,利用while()循环读到结束。
  第六,解决中文乱码问题。不论是post方法或是get方法传送都会产生中文乱码问题。在参考资料中有服务端的编码问题处理。这里要将的是当把文件传给浏览器的时候, 浏览器也识别不了中文名字文件。要获取浏览器的类型,然后火狐浏览器用Base64编码处理,其他浏览器用URLEnconder编码处理

  总结,这个案例学习了ServletContext里面的两个功能:获取文件的MIME类型;获取文件的绝对路径。

  案例三是写一个注册功能。比较重要的是Servlet->UserService->DAO这三个层次的数据操作。登录成功:设置头"Location"重定向到index.jsp页面;登录失败的话,因为要设置提示信息,所以利用ServletContext的setAttribute()方法把信息设置到里面,前提是,要先在初始化函数init()中先设置一个空的msg。在jsp页面中获取ServletContext的方式是${msg}。
  注册功能是查询数据库有没有存在该实体类,没有存在就表示成功,然后再把这个实体类User插入进去。另外,要把用户昵称,和网站人数传给index.jsp的话,使用域对象ServletContext存取数据。JSP文件再获取。
  
  上面三个案例使用ServletContext域对象的三个功能。ServletContext域对象是服务器在启动的时候,就开辟了一块空间,只要服务器不关闭,这个空间就一直存在,存的数据也可以随时拿来用或者更新。ServletContext有四个功能
1.获取初始化参数。很少用。
2.获取文件的MIME类型
3.获取文件的绝对路径。
4.当作域对象为所有Servlet和JSP共享数据。是重点

   第四学习的是request这个对象。有两个重点,一是request当作域对象存取数据。二是request重定向和转发的区别。
首先request的生命周期是用户请求的时候创建,当响应完毕后结束。重定向是先响应一个空白,再做一次请求,最后响应定位到新的页面,所以是两次请求两次响应,request域对象在重定向中就不起作用了,不要尝试往里面存取数据。转发是request.Redict("servlet的路径"),地址栏不的地址不发生改变。request还存在,可以传数据给新的servlet。


  第五,上自习课学习了Tomcat处理web工程的流程:
   浏览器根据前端传来的地址,首先找到web工程的web.xml配置文件,前端的Servlet虚拟路径/aa,和web.xml中的url-pattern匹配,通过servlet-name找到了要访问的Servlet,其中Tomcat利用反射获取了<servlet-class>Servlet字节码文件。最后把封装的reuqest数据给了Servlet.
作者: 李思贤126    时间: 2018-6-4 22:43
李思贤:-servletContext对象的四个功能:
    * 1.获得全局初始化参数
    * 2.获得文件的MIME的类型
    * 3.作为域对象存取数据.
    * 4.读取web项目中的文件.

今天上午主要学习了文件下载的功能实现:
首先要学习ServletContext对文件的读取功能:
1getResourceAsStream(String path)  这里根据你提供的路径读取文件返回一个文件的输入流
2getRealPath(String path)  这里返回的是一个路径的磁盘绝对路径

在昨天登录代码的基础上  在登陆成功以后 跳转到一个download的html页面:
一:超链接下载:直接将文件路径写入到超链接的href中--能下载的前提是你用的浏览器不支持该类型文件;
Eg:  <a href="/Day0603/download/123.txt">123.txt</a><br/>
二:手动写入文件下载:需要设置两个头和一个流(在downloadServlet中)
Eg:  <a href="/Day0603/downloadServlet?filename=123.txt">123.txt</a><br/>

下面就是在downloadServlet中的代码实现:
1:接收参数String filename = request.getParameter("filename");
2文件下载(2个头一个流)
* 设置两个头和一个流:
String type = this.getServletContext().getMimeType(filename);
* Content-Type                :文件的MIME的类型.
response.setHeader("Content-Type", type);
* Content-Disposition        :以下载的形式打开文件.
response.setHeader("Content-Disposition", "attachment;filename="+filename);
* InputStream                        :文件的输入流.
String realPath = this.getServletContext().getRealPath("/download/"+filename);


向页面响应方法:
getOutputStream()和getWriter()  这2个方法互斥,用时只能用一种











接下来学习了中文乱码的问题:用渣渣辉的编码处理就行了:
处理编码的时候,先要搞清楚自己是请求乱码 ,还是响应乱码?
要对症下药!!
请求乱码解决 :  get请求:
String str = new String(request.getParameter("name").getBetys("ISO-8859-1"),"UTF-8");
post:request.setCharacterEncoding("utf-8");
响应乱码:        response.setContentType("text/html;charset=utf-8");
把处理乱码的代码写在方法中的靠前的位置


最后就是这用户注册的功能了:
1先要了解request作为域对象存取数据的功能:

使用request对象存取数据:
* setAttribute(String name,String value);
* Object getAttribute(String name);

request的作用范围:
* 作用范围就是一次请求的范围.
* 创建和销毁:
* 创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
* 销毁:当服务器对这次请求作出了响应之后.

2重定向和转发的区别(redirect和forward的区别)
* 1.重定向的地址栏会发生变化,转发的地址栏不变.
* 2.重定向两次请求两次响应,转发一次请求一次响应.
* 3.重定向路径需要加工程名,转发的路径不需要加工程名.
* 4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.


注册案例:分析:
1注册页面提交数据到UserRegistServlet
2接收参数(注意中文乱码问题),封装数据调用UserRegistSerivice中registe方法,在调用UserDao中registe方法,在UserDao中先对该数据检测看数据库中是否含有相同用户名,有就跳转到注册页面(用户名存在//用request域对象存储数据)如果无就跳转到登录页面,登录页面,输入用户名密码,错误就跳转登录页面提示:用户名或密码错误,登陆成功跳转到主页.
作者: hpb199567    时间: 2018-6-4 23:42
何平波
使用web工程读取文件,下载文件(使用ServletConText)
1.getResourceAsStream(String path)//相对路径读取文件
2.getRealPath//真实路径读取文件

3.ServletContext(全局参数)功能
功能一:获取全局参数
功能二:获得文件的mime(后缀名)类型 getMimeType
功能三:作为域对象存取对象
存:setAttribute(key,value)
去:getAttribute(key)
功能四:读取web项目下的文件
a1读.ServletContext.getResourceAsStream("/WEB-INF/classes/xx.文件")
a2取.ServletContext.getRealPath("/WEB-INF/classes/xx.文件")


案例一:下载文件
文件下载的方式(设置两个头和一个流)
第一种:超链接下载,直接将文件的路径写到超链接的herf中--前提;文件类型,浏览器不支持
第二种:手动编写代码的方式完成文件的下载
content-type:文件的mime类型
content-Disposition:以下载的形式打开文件
inputStream:文件的输入流

Download?filename=nba.jpg (Download是servlet类的名)



案例二:用户注册页面的功能
步骤
1.创建数据库,创建表
2.准备工作,在WEB-INF文件夹里的lib文件夹引入c3p0,jar  dbutils.jar  jdbc.jar  
3.新建一个Servlet类(自动生成web.xml的url路径),在src路径下引入c3p0-config-xml,再在包下引入一个c3p0的工具类
4.新建一个实体类(实体类中的成员变量和变量名与数据库的类型要一致),新建一个外层业务类service,一个Dao(查询数据库)
5.在WEBContent中引入注册页面,登陆页面的表单提交方式是post,提交路径是(/工程名/url路径)
6.在Servlet类编写注册代码,详见代码编写,可以在Dao类中加一些判断,如果用户名存在的的话就不执行注册
7.执行注册页面,查看注册效果

案例三:用户登陆页面的功能
步骤
1.创建数据库,创建表
2.准备工作,在WEB-INF文件夹里的lib文件夹引入c3p0,jar  dbutils.jar  jdbc.jar  
3.新建一个Servlet类(自动生成web.xml的url路径),在src路径下引入c3p0-config-xml,再在包下引入一个c3p0的工具类
4.新建一个实体类(实体类中的成员变量和变量名与数据库的类型要一致),新建一个外层业务类service,一个Dao(查询数据库)
5.在WEBContent中引入登陆页面,登陆页面的表单提交方式是post,提交路径是(/工程名/url路径)
6.在Servlet类编写登陆代码,详见代码编写
7.执行登陆页面,查看登陆效果
作者: wahahaha    时间: 2018-6-5 09:15
林恒山
ServletContext对象读取web项目下的文件:
getResourceAsStream(String path);返回输入流
getRealPath(String path);返回磁盘的绝对路径
注意:两个方法的path参数传入的是项目发布后的位置,不是

在esclise中的位置

ServletContext的功能:
1.读取全局初始化参数:
getInitParameter(String name) 返回web.xml里面的

context-param标签参数是param-name的内容,值为param-

value的内容.
2.获得文件mime类型
getMimeType(String file) 获得文件MIME类型
3.作为域对象存取数据
getAttribute(String name) 读取数据
setAttribute(String name,Object obj) 存入数据
removeAttribute(String name) 移除数据
范围:整个web项目
创建:服务器启动的时候,服务器为每个web项目单独创建一

个ServletContext对象
销毁:服务器关闭或者项目从服务器移除
4.读取web项目下的文件
getResourseAsStream(String path)
getRealPath(String path)

response:响应的对象,从服务器向浏览器输出内容.
响应行:
setStatus(int num)设置状态码

响应头:
一个key对应多个value:
addDateHeader(String name,long date)
addHeader(String name,String value)
addIntHeader(String name,int value)
一个key对应多个value:
setDateHeader(String name,long date)
setHeader(String name,String value)
setIntHeader(String name,int value)

响应体:
getoutputStream()
getWriter()

文件下载的方式:
1.超链接下载,文件路径写到a标签的href.前提,文件类型浏

览器不支持
2.手动编写代码完成文件下载
设置两个头一个流
Content-Type:文件的MIME类型
Content-Disposition:以下载的形式打开文件
InputStream:文件的输入流.

response输出内容是中文乱码的处理:
字节流:
设置浏览器默认打开的编码:resposne.setHeader

("Content-Type","text/html;charset=UTF-8”);
设置中文取出时的编码:"中文".getBytes("UTF-8");

设置浏览器打开的时候的编码
resposne.setHeader("Content-

Type","text/html;charset=UTF-8");
设置response的缓冲区的编码
response.setCharacterEncoding("UTF-8");
简化的写法:response.setContentType

("text/html;charset=UTF-8");

request:用户的请求
功能1.
请求方式:getmethod()
请求的路径:getRequestURI()   getRequestURL()
客户机的ip:getRemoteAddr()
获得工程名:getContextPath()
功能2:
获得页面提交的参数
getParameter(String name)
getParameterMap()
getParamterNames()
getParameterValues(String name)
功能三:作为域对象存取数据
getAttribute(String name) 读取数据
setAttribute(String name,Object obj) 存入数据
removeAttribute(String name) 移除数据

request参数乱码:
post:request.setCharacterEncoding(“UTF-8”);
get:
1.修改tomcat的字符集的编码.(不推荐)
2.使用URLEncoder和URLDecoder进行编码和解码的操作.
3.使用String的构造方法:

request作为域对象存取数据:
作用范围:一次请求的范围
创建:用户向服务器发送一次请求后,服务器就会创建一个

request对象.
销毁:服务器响应之后.

重定向和转发的区别(redirect和forward的区别)
1.重定向的地址栏会发生变化,转发的地址栏不变.
2.重定向两次请求两次响应,转发一次请求一次响应.
3.重定向路径需要加工程名,转发的路径不需要加工程名.
4.重定向可以跳转到任意网站,转发只能在服务器内部进行

转发.


作者: conan75    时间: 2018-6-5 09:48
15.MIME类型的作用就是通过设置响应头,让浏览器知道我们给它的到底是怎样的文件类型,否则浏览器可能会采用错误的方式进行打开,其实在拿到那个响应头后,浏览器会根据MIME类型选择打开的方式
16.当出现乱码时,需要明确是请求还是响应时的乱码,如果是请求乱码,需要明确是什么类型的请求,
get请求需要调用new String(request.getparameter(“xxx”).getbytes(“ISO-8859-1”),”UTF-8”)
post请求需要调用request.setCharacterEncoding(“UTF-8”)
响应乱码:调用方法,response.setEncoding(“text/html;charset=UTF-8”)
response.setCharacterEncoding(UTF-8)这个方法的设置的是字符流的缓冲区的编码
17. /day01/DownloadServlet?filename=Eclipse.jpg 这个filename其实就是标签中的name属性的值, Eclipse.jpg就是标签中value属性的值
18.request域对象:作用范围:一次请求的范围,也就是说一般是私有的信息才会存到request
                                创建:客户端向服务器发送每一次请求服务器都会创建一个request对象
                                销毁:请求结束

作者: 望蜀    时间: 2018-6-5 21:09
邵倩


ServletContext的功能:
一.读取全局初始化参数(了解)

二.(重点)获得文件的MIME的类型

每种文件都有自己的MIME类型
怎么获得:getServletContext().getMimeType("1.html")  //  text/html

三.(完全掌握)作为域对象存取数据:setAttribute(name,value)     getAttribute(name)
范围  整个web项目,而且全局对象
创建  服务器启动时 服务器为每个web项目创建一个单独的ServletContext对象
销毁 服务器关闭时销毁ServletContext

四.(完全掌握)读取web项目下的文件
a.ServletContext.getResourceAsStream(String path) --- 根据提供路径读取文件返回一个文件的输入流.
b.String getRealPath(String path)


案例 登录成功后 用手动编写代码方式完成文件的下载
DownloadServlet:
      接收浏览器请求的文件,
      设置两个头一个流:
          Content-Type   文件的MIME的类型   告诉浏览器响应回来的文件是什么类型
          Content-Disposition    以下载的形式打开文件     告诉浏览器 无论类型 都以下载的形式打开文件
          InputStream   文件的输入流   
      获得response的输出流
      关闭输入流
download.html:  <a href="/day15_pre/DownLoadServlet?filename=hello.txt">hello.txt</a><br/>



responese向页面响应的方法
getOutputStream().write();
getWriter().print();
这两个方法是互斥的,做出响应的时候只能使用其中的一种流响应.

解决乱码问题
先明确是请求乱码还是响应乱码
请求乱码解决 :  get:       String str = new String(request.getParameter("name").getBetys("ISO-8859-1"),"UTF-8");
                        post:     request.setCharacterEncoding("utf-8");
响应乱码: response.setContentType("text/html;charset=utf-8");
把处理乱码的代码写在  方法中的  靠前的位置


Request代表用户的请求
获得客户机信息:
获得请求方式:getMethod()
获得请求路径:getRequestURI()   getRequestURL()
获得客户机IP地址:getRemoteAddr()
*获得工程名:getContextPath()
*getparameter
*作为域对象存取值setAttribute  getAttribute


案例 注册
创建数据库和表 id username password email name sex telephone
创建包和类  实体类  service  dao servlet    网页

Request作为域对象存取数据
使用request对象存取数据
setAttribute()

重定向和转发的区别(redirect和forward)
重定向的地址栏会发生变化,转发的地址栏不变
重定向两次请求 两次响应,转发一次请求一次响应
重定向路径需要加工程名,转发的路径不需要加工程名
重定向可以跳转到任意页面,转发只能跳转工程内的页面
只有转发可以在request域中存数据



作者: it小白001    时间: 2018-6-6 00:30
吴俊斌

掌握response设置响应头
     response.setHeader(name,value);这是针对一个key对应一个value

掌握重定向和转发的区别
    重定向请求两次,响应两次.转发请求一次,请求一次
    重定向的地址栏会发生变化,转发不会;
    重定向可以定向到任意网站,转发只能在服务器内部(当前工程);
    重定向的路径要加上工程名,转发的路径不需要加工程名;
    如果在用request存取数据要用转发



掌握request域的作用范围
    request的域作用范围在响应之前所到的范围





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2