A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

同学们,今天我们学习了request和response,在JavaWeb阶段几乎每天我们都要和这两个对象打交道。

今日需要掌握的有:
  • 掌握response设置响应头
  • 掌握重定向和转发的区别
  • 掌握request接收请求参数
  • 掌握request域的作用范围

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




50 个回复

倒序浏览
请求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()
        }
}

回复 使用道具 举报
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.
回复 使用道具 举报
吴鹏
总结
------------------------------------------------


掌握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中被调用;
回复 使用道具 举报
侯玉林
今天讲了下载和注册,以及在其中的各种编码错误.
回复 使用道具 举报 1 0
林文辉
案例:登录成功后进行文件下载。
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中的值
回复 使用道具 举报
江某人:
     掌握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的对象.
        销毁:当服务器对这次请求作出了响应之后.
回复 使用道具 举报 1 0
5119 中级黑马 2018-6-3 21:57:53
7#
游荣辉
总结
        今天学了用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.重定向可以跳转所有的页面,而转发只能在服务器内部进行转发
回复 使用道具 举报
郑阳阳
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的作用范围就是一次请求,发送请求时创建,响应后销毁.重定向不能使用.
回复 使用道具 举报
颜琳琳
   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:46
10#
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的区别
重定向的地址栏会发生变化,转发的地址栏不变
重定向两次请求两次响应,转发一次请求一次响应
重定向路径需要加工程名,转发的不需要
重定向可以跳转的任意网站,转发只能在服务器内部进行转发
这个知识点很重要,需重点掌握,一时无法理解的话在之后还会反复用到,到时再逐步加深理解掌握!!!
回复 使用道具 举报
郭明杰
*超链接下载.直接将文件的路径写到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的对象
        销毁:当服务器对这次请求坐出了响应之后


回复 使用道具 举报
郑雪平

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

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

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

4.重定向可以跳转到任意的网站,转发却只能在服务器的内部进行转发.
回复 使用道具 举报
李志勇:
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.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.
回复 使用道具 举报
陈世彪:
今天学习了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中被调用;
回复 使用道具 举报
陈叶隆
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");
回复 使用道具 举报
张育辉
四: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.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.
回复 使用道具 举报
谢洪彬:
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.重定向可以跳转到任何页面,但转发只能在本服务器内跳转
回复 使用道具 举报
刘文峰
response设置响应头:  setHeader()方法.方法里传入要设置的响应头参数,根据不同的参数在传入不同的值.例如 response.setHeader(“Content-Type”,”text/html”).Content-Type是要设置的响应头,”text/html”是Content-Type的值,代表的html文件的mime类型.
重定向和转发;重定向响应完成后地址栏会改变,重定向不会;重定向是两次请求两次响应,转发只有一次请求一次响应;重定向的request不可以作为域对象存取数据,转发可以;重定向跳转页面路径前要加工程名,转发不用;重定向可以跳转到其他工程的页面,转发只能跳转到当前工程的页面.
request获得请求参数:
getParameter():用来获取指定参数的值(用于单个值的参数)
getParameter():用来获取指定参数的多个值(用于有多个值的参数)
getParameterMap();以键值对的形式获取所有参数和值
request域对象的作用范围:发出请求时产生,响应后销毁
回复 使用道具 举报
陈强
request&response的一天
今天就是围绕两个案例进行的
首先第一个是文件的下载,如果是一个基础版本的文件下载是相对简单的,只要设置两个头和一个流就可以了,但是涉及到中文乱码问题就会复杂一点,因为牵扯到了请求过程的乱码和响应过程的乱码处理
两个头就是Content-Type-----传递文件的MIME类型
                  Content-Disposition----以下载的形式打开
一个流就是文件的输入流---inputStream
第二个案例就是完成用户的注册和登录,这个过程就是将今天完成的注册进行更加严谨的判断,先进行查询用户名是否存在,然后再进行存储数据到数据库中.最后完成页面的跳转.
这个案例基本完成,所以细节的整理待整体完成再详细记录.
另外今天还提到了一个重点就是重定向和转发的区别:
1\重定向的地址栏会发生变化,而转发不会
2\重定向是两次请求,两次响应,而转发是一次请求,一次响应
3\重定向的路径需要加上工程名.而转发不用加工程名
4\重定向可跳转到任意的网页,而转发只能在服务器内部进行转发
5\使用重定向不能往request对象存数据,因为request的生命周期是一次请求和一次响应,而转发是可以使用request存数据的.
回复 使用道具 举报
汪志阳
        早上讲解了web工程下文件的读取, 使用ServletContext中的getResourceAsStream读取.该方法是
根据提供路径读取文件返回一个文件的输入流.传入属性编辑文件/WEB-INF/classes/db.properties,通过属性编辑文件
修改工程文件的路径,创建properties对象,调用load方法实现文件的读取.
使用ServletContext中的getRealPath读取.,这是获得文件的绝对路径,同样的也会传入属性文件,创建properties对象,调用load方法实现文件的读取.
中文乱码出现:Response对象使用的字符流有缓冲区,默认编码ISO-8859-1,编码不支持中文;服务器和浏览器支持中文,但是选择不一致导致乱码
request作用范围:一次请求的范围,就是客户端发送一次请求,服务器会创建一个request对象
当服务器对这次请求作出响应后就销毁了.
重定向和转发:重定向可以理解为客户端向服务器某位置发送请求,服务器折返来告诉客户端,另一部分有办法达到请求要求,客户端又转向服务器,这样来回
发生了两次的请求与响应;转发是在请求数据基础上服务器直接跑到符合要求位置通知该数据响应,这是两者的不同.
除此之外不同还有:重定向的地址栏会发生变化,转发的地址栏不变..重定向可以跳转到任意网站,转发只能在服务器内部进行转发,且重定向不能在跳转的地方接收数据
转发可以.
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马