java web之requestrespone

readme

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video { margin: 0; padding: 0; border: 0 }
body { font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 1.6; color: #333; background-color: #fff; padding: 20px; max-width: 960px; margin: 0 auto }
body>*:first-child { margin-top: 0 !important }
body>*:last-child { margin-bottom: 0 !important }
p,blockquote,ul,ol,dl,table,pre { margin: 15px 0 }
h1,h2,h3,h4,h5,h6 { margin: 20px 0 10px; padding: 0; font-weight: bold }
h1 tt,h1 code,h2 tt,h2 code,h3 tt,h3 code,h4 tt,h4 code,h5 tt,h5 code,h6 tt,h6 code { font-size: inherit }
h1 { font-size: 28px; color: #000 }
h2 { font-size: 24px; border-bottom: 1px solid #ccc; color: #000 }
h3 { font-size: 18px }
h4 { font-size: 16px }
h5 { font-size: 14px }
h6 { color: #777; font-size: 14px }
body>h2:first-child,body>h1:first-child,body>h1:first-child+h2,body>h3:first-child,body>h4:first-child,body>h5:first-child,body>h6:first-child { margin-top: 0; padding-top: 0 }
a:first-child h1,a:first-child h2,a:first-child h3,a:first-child h4,a:first-child h5,a:first-child h6 { margin-top: 0; padding-top: 0 }
h1+p,h2+p,h3+p,h4+p,h5+p,h6+p { margin-top: 10px }
a { color: #4183C4; text-decoration: none }
a:hover { text-decoration: underline }
ul,ol { padding-left: 30px }
ul li>:first-child,ol li>:first-child,ul li ul:first-of-type,ol li ol:first-of-type,ul li ol:first-of-type,ol li ul:first-of-type { margin-top: 0px }
ul ul,ul ol,ol ol,ol ul { margin-bottom: 0 }
dl { padding: 0 }
dl dt { font-size: 14px; font-weight: bold; font-style: italic; padding: 0; margin: 15px 0 5px }
dl dt:first-child { padding: 0 }
dl dt>:first-child { margin-top: 0px }
dl dt>:last-child { margin-bottom: 0px }
dl dd { margin: 0 0 15px; padding: 0 15px }
dl dd>:first-child { margin-top: 0px }
dl dd>:last-child { margin-bottom: 0px }
pre,code,tt { font-size: 12px; font-family: Consolas, "Liberation Mono", Courier, monospace }
code,tt { margin: 0 0px; padding: 0px 0px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8 }
pre>code { margin: 0; padding: 0; white-space: pre; border: none; background: transparent }
pre { background-color: #f8f8f8; border: 1px solid #ccc; font-size: 13px; line-height: 19px; overflow: auto; padding: 6px 10px }
pre code,pre tt { background-color: transparent; border: none }
kbd { background-color: #DDDDDD; background-image: linear-gradient(#F1F1F1, #DDDDDD); background-repeat: repeat-x; border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD; border-style: solid; border-width: 1px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; line-height: 10px; padding: 1px 4px }
blockquote { border-left: 4px solid #DDD; padding: 0 15px; color: #777 }
blockquote>:first-child { margin-top: 0px }
blockquote>:last-child { margin-bottom: 0px }
hr { clear: both; margin: 15px 0; height: 0px; overflow: hidden; border: none; background: transparent; border-bottom: 4px solid #ddd; padding: 0 }
table th { font-weight: bold }
table th,table td { border: 1px solid #ccc; padding: 6px 13px }
table tr { border-top: 1px solid #ccc; background-color: #fff }
table tr:nth-child(2n) { background-color: #f8f8f8 }
img { max-width: 100% }

课程回顾:Servlet技术(重点)

Servlet技术的简介

1.做什么工作:一个小的java程序,运行在服务器端,接收和响应从客户端发送过来的请求,使用HTTP协议。
2.开发Servlet步骤:
    * 实现Servelt接口
    * 在web.xml的文件中编写配置文件
        * 配置Servlet的信息
            <servlet>
                <servlet-name>xxx</servlet-name>
                <servlet-class>cn.itcast.servet.xxx</servlet-class>
            </servlet>
            <servlet-mapping>
                <servlet-name>xxx</servlet-name>
                <url-pattern>/demo1</url-pattern>
            </servlet-mapping>

Servlet的生命周期

1.Servlet服务器创建的,第一次访问的时候创建的,调用init方法进行初始化,客户端发送请求,服务器调用service方法处理。每一次调用该方法,关闭服务器或者移除项目,销毁Servlet,调用destroy的方法,调用一次。

Servlet开发的细节

1.继承HttpServlet
2.重写doGet和doPost方法
3.在web.xml中编写配置文件

配置Servlet自动加载

1.服务器一启动,创建实例。
2.配置 <serlvet>标签的中间配置
3. <load-on-startup>
4. 中间的值是正整数,值越小,优先级越高。

url-pattern的配置

1.完全路径匹配    /demo   访问:localhost/day09/demo
2.目录匹配      /*      访问:localhost/day09/demo
3.扩展名匹配     *.do    访问:localhost/day09/demo.do
4.优先级:完全 > 目录 > 扩展名

在WEB开发中路径的编写

1.相对路径
    * 找到关系
2.绝对路径
    * 正常的写法:http://localhost/day09/demo
    * 简便的写法:/day09/demo
3.客户端绝对路径
    * /day09/demo
4.服务器端绝对路径
    * /demo

ServletConfig对象

1.获取初始化参数
2.获取servlet配置文件的名称

ServletContext对象

1.一个WEB项目只有一个ServeltContext对象
2.在N个Servlet来传递数据
3.与天地同寿

获取ServletContext对象

1.通过ServletConfig来获取ServletContext
2.在GenericServlet有一个方法,getServletContext();

域对象

1.在servlet可以传递数据。
2.setAttribute("xx","yy");      设置属性的值(如果之前已经有了,产生覆盖的效果)
3.getAttribute("xx");           获取属性的值
4.removeAttribute("xx")         删除属性的值

ServletContext的作用

1.获取全局的初始化参数
2.共享数据
3.读取资源文件
    * getResourceAsStream(String path);
    * getRealPath(String path);

路径的写法

1.整个WEB项目发布到服务器端。
2.编写绝对路径(以/开头),客户端的绝对路径(包含项目名称)和服务器端路径(不包含项目名称)

* getResourceAsStream(String path); 值的写法不包含项目名称     /WEB-INF-classes/xxxx
* getRealPath(String path); 值的写法不包含项目名称             /xxxx

缺省的Servlet(了解)

1.在Tomcat服务器中,提供一个类。
2.在tomcat/conf/web.xml中,配置DefaultServlet。访问的路径配置的是 <url-pattern>/</url-pattern>
3.默认去处理静态的资源。
4.如果自己编写的配置文件   <url-pattern>/</url-pattern>     千万不要配置成/

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>true</param-value>         --   改成true
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

ServletRequest和ServletResponse

1.服务器来创建request和response对象。(浏览器是创建的这两个对象吗?必须错)
2.request请求的对象(从客户端发送过来的请求,都给我找该对象)
3.response响应的对象(在服务器端编写代码,向客户端做出响应,找该对象)

ServletResponse响应的对象(从服务器端向客户端响应的)

介绍一些方法

void setHeader(String name, String value)       设置响应头的信息
void setIntHeader(String name, int value)       值是int类型
void setDateHeader(String name, long date)      值是日期类型,参数是long 毫秒值
void addHeader(String name, String value)       设置响应头的信息
addIntHeader(String name, int value)
addDateHeader(String name, long date)

* 一般的情况下,一个头对应一个值.(重要)
    * setHeader(String name, String value)
        * setHeader("xx","yy")
        * setHeader("xx","zz")
        * 结果:xx:zz
* 特殊的情况下,一个头对应多个值
    * addHeader(String name, String value)
        * addHeader("xx","yy")
        * addHeader("xx","zz")
        * 结果:xx:yy,zz

void setStatus(int sc)                          设置状态码(200 302 )
void setCharacterEncoding(String charset)       设置response缓冲区的编码
void setContentType(String type)
void sendRedirect(String location)              可以完成重定向的功能

ServletOutputStream getOutputStream()           获取输出的字节流
PrintWriter getWriter()                         获取输出的字符流

案例

重定向(登陆页面)               使用302和location头完成重定向
页面定时刷新(页面读秒操作)  有一个定时刷新的头 refresh
禁用浏览器缓存(三个头信息)  有三个头(不要记)
向页面输出中文(乱码问题)
实现文件下载                  头Content-Dispositon
实现验证码

重定向的例子(值的写法就包含项目名称)

1.特点:访问的是demo2,但是地址栏变成了demo3。记住:两次请求,两次响应。
2.需求:登陆的html页面,用户名和密码。判断用户名和密码是否都是admin,如果都是,登陆成功,如果都不是,登陆失败(重定向到登陆页面)。

3.掌握的知识
    * 重定向先理解(借钱)
    * 会编写重定向的代码(302 location)
    * location的值的路径写法:(包含项目名称)
    * 重定向的应用

4.response对象提供了一个方法,可以直接完成重定向的功能。
    * 设置状态码302  提供地址

    * void sendRedirect(String location)

页面定时刷新(refresh)

1.知道refresh完成的功能
2.refresh的值的写法。
    * response.setHeader("refresh","5;url=/day10/html/sucess.html");
3.前台的知识。
    * span标签获取文本内容
    * 加载事件  onload
    * 定时器

禁用浏览器的缓存

1.知道有三个头。
2.头值的写法必须知道。
3.知道禁用浏览器缓存有什么?
    * 网银系统
    * 页面的数据一直发生变化。(现在的浏览器避免了这个问题)
4.头信息
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Pragma", "no-cache");
    // 第三个头是日期类型
    response.setDateHeader("Expires", -1);

向页面输出中文乱码的问题

1.向页面输出中文有乱码问题。
    * ServletOutputStream getOutputStream()         获取输出的字节流
    * PrintWriter getWriter()                       获取输出的字符流

2.解决字节输出中文乱码的问题
    *.设置浏览器打开文件时采用的编码。(编码一)
            response.setHeader("Content-Type", "text/html;charset=UTF-8");
    *.获取中文的字节数组也采用固定的编码。(编码二)
            "哈罗我的".getBytes("UTF-8")
    *.只需要编码一和编码二保证一致就不会乱码。

3.解决字符的中文乱码
    *.设置response缓冲区的编码(默认是ISO-8859-1)。
        response.setCharacterEncoding("UTF-8");
    *.设置浏览器的默认打开文件的编码
        response.setHeader("Content-Type", "text/html;charset=UTF-8");

4.字符的中文乱码可以有简单的写法
    response.setContentType("text/html;charset=UTF-8");

5.总结:使用respone对象向浏览器输出中文的。
    * 子节(response.getOutputStream().write())
        * 设置浏览器打开文件时所采用的编码
            * response.setHeader("Content-Type", "text/html;charset=UTF-8");
        * 获取中文的字节数组的时候,提供一个编码。
            * "哈罗我的".getBytes("UTF-8")

    * 字符(response.getWriter().write())
        * 设置浏览器打开文件时所采用的编码
            * response.setHeader("Content-Type", "text/html;charset=UTF-8");
        * 设置response缓冲区的编码。
            * response.setCharacterEncoding("UTF-8");

文件下载

1.了解头信息 Content-Dispositon  值的写法:attachment;filename=文件的名称  我是作为附件形式打开。
2.先准备一个文件,下载的文件。
3.输入流(获取文件的输入流)和输出流(向浏览器端输出)
4.知道下载的头信息的作用。

验证码分析

/**
 * 1.获取画布对象(纸)
 * 2.获取画笔的对象
 *  2.1 画一个实心的矩形,大小和画布的大小。产生了覆盖。
 *  2.2 画一个有边框,画一个空心的矩形,
 * 3.提前准备好数据(大小写字母和数字)  ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890
 *  3.1 随机的4个获取数据
 *  3.2 把随机获取的数据画到画布上
 * 4.画干扰线
 * 5.把内存中验证码输出客户端
 *
 * 6.如果向要完成旋转的效果使用  Graphics2D对象  void rotate(double theta, double x, double y)
 *      double theta :代表的是弧度
 *      弧度 = 角度 * Math.PI / 180;
 *      随机获取正负30之间的角度 = random.nextInt(60) - 30;
 */

验证码

1.先知道画布的对象(BufferedImage) 画笔对象(Graphics) 把内存中的图片输出到客户端(ImageIO)
2.相关类的一些方法,也知道。
3.提前准备好一些数据(英文和中文也提前准备好的),随机能获取到这些字符(Random随机类)

ServletRequest请求的对象(从客户端来的)

* String getParameter(String name)              获取请求的参数(文本框,密码框)
* String[] getParameterValues(String name)      获取请求的参数(复选框)
* Map<String,String[]> getParameterMap()        获取请求参数(封装数据,使用该方法)

* Object getAttribute(String name)
* void setAttribute(String name, Object o)
* void removeAttribute(String name) 

* String getHeader(String name)                 获取请求头   referer  user-agent

获取客户端的一些信息

1.重点:getContextPath()  -- 获取虚拟路径的名称(默认和项目名称相同)
http://localhost:8080/day10/AServlet?username=xxx&password=yyy

    > String getScheme():获取协议,http     > String getServerName():获取服务器名,localhost     > String getServerPort():获取服务器端口,8080     > *****String getContextPath():获取项目名,/day10     > String getServletPath():获取Servlet路径,/AServlet     > String getQueryString():获取参数部分,即问号后面的部分。username=xxx&password=yyy     > String getRequestURI():获取请求URI,等于项目名+Servlet路径。/day10/AServlet     > String getRequestURL():获取请求URL,等于不包含参数的整个请求路径。http://localhost:8080/day10/AServlet

获取请求头的信息

1.String getHeader(String name)     获取头信息
2.请求头
    * if-modified-since     控制缓存
    * referer               记住当前网页的来源(防止盗链)
    * user-agent                判断浏览器的版本

获取请求的参数(表单)

* String getParameter(String name)              获取请求的参数(文本框,密码框)
* String[] getParameterValues(String name)      获取请求的参数(复选框)
* Map<String,String[]> getParameterMap()        获取请求参数(封装数据,使用该方法)

1.注意:getParameter获取是一个key对应一个value的情况。(文本框、密码框)
2.注意:getParameterValues获取第一个key对应多个value的情况。(复选框)
3.注意:getParameter(参数:表单的name属性的值)

4.总结:request对象获取中文乱码的问题
    * post提交
        * 设置request缓冲区的编码(注意:放在获取参数的方法之前)
        * request.setCharacterEncoding("UTF-8");
    * get提交
        * 先获取请求参数
        * username = new String(username.getBytes("ISO-8859-1"),"UTF-8");

request域对象

1.ServletContext对象:代表整个WEB应用。服务器一启动,就创建一个ServletContext对象。
2.request域对象:就是一次请求的范围内。(重定向是两次请求,可不可以使用request域在重定向中进行传递数据呢?)

* Object getAttribute(String name)              获取属性的值
* void setAttribute(String name, Object o)      设置属性值
* void removeAttribute(String name)             删除属性值

转发和重定向的区别(面试题)

1.重定向:借钱。
2.转发:也是借钱。

3.想完成转发的操作
    * RequestDispatcher getRequestDispatcher(String path)
    * request.getRequestDispatcher(path);返回是RequestDispatcher的对象。在这个对象有两个方法,
    * void forward(ServletRequest request, ServletResponse response)  就是转发的方法

4.转发和重定向的区别
    * 重定向的地址栏发生变化,转发地址栏不会发生变化。
    * 重定向是两次请求和响应,转发是一次请求和响应。
    * 重定向不能使用request域对象传值,转发可以使用request域对象传值。
    * 重定向的路径(/day10/request2),转发的路径(/request2)
    * 重定向可以定向到任何页面(网络上的资源),转发只能在web应用内部。

细节

1.字节流和字符流互斥的,不能一起使用。
2.在完成的时候,会把response的缓冲区清空。

RequestDispatcher类

1.void forward(ServletRequest request, ServletResponse response)  转发(重点)
2.void include(ServletRequest request, ServletResponse response)  包含(了解) 可以把几个页面包含到一起,完成页面的布局工作。

request.getParameter() 获取参数列表(和form表单或者超链接提交有关的)

request.getAttribute() 获取request域对象中的值的

路径的问题

1.ServletContext域对象有两个方法
    * getResourceAsStream("路径的写法不包含项目名称  /WEB-INF/classes/xxx ")
    * getRealPath("路径的写法不包含项目名称   /WEB-INF/classes/xxx")

2.重定向
    * 路径的写法:必须包含项目名称    response.setHeader("location","包含项目名称   /day10/demox");

3.转发的路径
    * 路径的写法:不包含项目名称 request.getRequestDispatcher("不包含项目名称   /demox").forward(request, response);

4.refresh定时刷新路径
    * response.setHeader("refresh","5;url=/day10/demox");

<url-pattern>/AServlet</url-pattern> localhost:8080/day10/AServlet

String str = "username=xxx&password=yyy";

原文地址:https://www.cnblogs.com/chyxOne/p/9831358.html

时间: 2024-11-09 00:35:24

java web之requestrespone的相关文章

java web环境搭建

1. 根据自己电脑版本下载对应的tomcat和eclipse安装包 2. 在eclipse中找到preferences 找到 runtime environments 找到add 3. 选择tomcat的版本 next 4. 选择browse  tomcat解压的地方选择对应的版本,最后finsih 5. 数据库方面 只需要下载Mysql的安装包即可. 最后完成了java web环境的搭建.

Java Web -- Servlet(1) 必备知识

学习Java WEB开发必备的基本概念: 1.WEB 本意是蜘蛛网和网的意思,在网页设计中我们称为网页的意思.现广泛译作网络.互联网等技术领域.表现为三种形式,即超文本(hypertext).超媒体(hypermedia).超文本传输协议(HTTP)等. 2.静态网页(可简单理解为html) 是指网页的内容是固定的,不会根据浏览器者的不同需求而改变.(实实在在保存在服务器上的文件) 3.动态网页 是指在接到用户访问要求后动态生成的页面,页面内容会随着访问时间和访问者发生变化(并不是独立存在于服务

[Java Web]2\Web开发中的一些架构

1.企业开发架构: 企业平台开发大量采用B/S开发模式,不管采用何种动态Web实现手段,其操作形式都是一样的,其核心操作的大部分都是围绕着数据库进行的.但是如果使用编程语言进行数据库开发,要涉及很多诸如事务.安全等操作问题,所以现在开发往往要通过中间件进行过渡,即,程序运行在中间件上,并通过中间件进行操作系统的操作,而具体一些相关的处理,如事务.安全等完全由中间件来负责,这样程序员只要完成具体的功能开发即可. 2.Java EE架构: Java EE 是在 Java SE 的基础上构建的,.NE

在java web项目中集成webservice

公司要求在项目中加入webservice服务,因为项目中使用了spring框架,所以在这里使用与spring兼容性较好的cxf来实现 cxf所需jar包 spring的jar包就不贴了 一:创建webservice服务器 1)创建一个服务接口 package com.service; import javax.jws.WebParam; import javax.jws.WebService; @WebService public interface IHelloWorld { public S

Java Web项目中缺少Java EE 6 Libraries怎么添加

具体步骤如下: 1.项目名称上点击鼠标右键,选择"Build Path-->Configure Build Path-->Java Build Path" 2.单击"Add Library..." 3.选择"User Library",单击"Next" 4.单击"User Libraries...",选择需要的Java EE 6 Libraries Java Web项目中缺少Java EE 6

java web 程序---购物车选商品,购买,付款

虚函数使用的时机 为什么虚函数不总是适用? 1. 虚函数有事会带来很大的消耗: 2. 虚函数不总是提供所需的行为: 3. 当我们不考虑继承当前类时,不必使用虚函数. 必须使用虚函数的情况: 1. 当你想删除一个表面上指向基类对象,实际却是指向派生类对象的指针,就需要虚析构函数. java web 程序---购物车选商品,购买,付款,布布扣,bubuko.com

使用Struts框架的Java Web项目中的两个Session的区别和常见的Session取值为空的错误

我的百度知道回答,感觉这个知识很有意义,专门贴出来. 不过还有待验证的地方,就是 ActionContext.getContext().getSession("name", "Tom"); //如果在JSP中通过 EL 或者 Struts2 标签怎么显示? 以下是回答正文. 很多初学Java Web的同学因为使用 Strut2框架而分不清两个 Session的区别. 1.   JSP/Servlety有个原生的 session 对象,这是9大内置对象中的一个,书上写

java Web(2)

Servlet与web容器的配合: 1)客户端向Web服务器发起一个HTTP请求. 2)HTTP请求被Web服务器接受,如果请求的是静态页面,则由Web服务器负责处理.如果请求的是Java Web组件(Servlet或者JSP),则移交给Web容器.Web容器可以在主               机的同一个进程.不同的进程或其他的Web服务主机的进程中启动. 3)Web容器根据Servlet的配置文件确定调用的具体Servlet类,并把request对象.response对象传给它. 4)Ser

java web 数据库开发1

一个完整的数据库部署架构通常由客户端和服务器端两部分组成.客户端封装数据库请求将其发送给服务器端,服务器端执行完毕将其及结果返回给服务器端. 以mysql为例 介绍java应用程序对数据库的访问 JDBC意义:应用程序通过调用统一接口实现对任意数据库的访问,为我们屏蔽了客户端与服务器端交互协议的实现细节. 对java而言,JDBC是一个类库,对数据库而言,JDBC是接口规范. 有了JDBC,应用程序变得更加简单,提高了程序开发的效率,使java web面向不同的数据库时,具有跨平台性,基于JDB