request&&response

  1. ServletConfig 的作用
    *getServletName
    *getInitParameter()
    *getInitParameterNames()
    getServletContext()
    5.servlet线程是不安全的。
    因为在服务器中,一个servlet只存在一个实例。所以当有多个请求访问的时候,如果使用成员变量接受线程参数,就会有问题。
    6.url-pattern
    路径匹配: "/"开头 例如:/AServlet
    后缀名匹配: “
    ”开头 例如: *.do
    注意: 1.匹配范围越广优先级越低
    2.两种匹配方式不能同时使用。
    7.load on startup
    该配置可以让servlet在服务器启动时加载
    填入的数字表示优先级.数字越小,优先级越高。
    优先级一样,按配置顺序加载。
    8.servletContext
    范围:一个项目对应一个servletContext
    获取:通过servletConfig获取
    作用:
    1.获取配置文件(web.xml根下的)中的参数
    *getInitPParameter()
    *getInitParameterNames()
    2.域的功能 => application
    增加一个:setAttribute
    删除一个: removeAttribute
    获得一个:getAttribute
    获得所有键:getAttributeNames
    3.获得项目内资源
    getResourceAsStream
    getRealPath
    以上两个方法都是填写

//取得之前记录的数字,从application域取
//取到了 ==> 不是第一次访问
//没有取到了 ==> 当前是第一次访问

//2.将访问次数输出给浏览器
//3.将新的访问次数放回application域

Day08 --- request & response

  1. response 代表响应,可以理解为一个空的箱子,我们在里面填入要发送到浏览器的内容。服务器会把这些内容组装成http响应
    响应首行 协议/版本号 状态码 状态码描述
    添加状态码 和描述
    void setStatus(int sc) 设置状态码
    void setStatus(int sc, String sm) 设置状态码和描述
    void sendError(int sc) 只设置状态码,错误的
    void sendError(int sc, String msg) 设置状态码 和 描述
    响应头
    添加响应头
    void setHeader(String name, String value) A:A
    setIntHeader(String name, int value)
    setDateHeader(String name, long date)
    void addHeader(String name, String value)
    响应空行
    响应正文
    发送字节流
    getOutputStream
    发送字符流
    getWriter
    应用一:
    手动给浏览器发送状态码404

例二:重定向
//1 放回状态吗为302
//2 告诉浏览器哪找新地址,发送一个响应头: Location: http://www.baidu.com
也可以用sendRedirect("")

例三:Refresh头,刷新
//1 .设置响应头为Refresh:5;url=/Day08-response/AServlet
response.setHeader()
//2. 提示字符流发送提示,5秒后跳转

例四:输出字节流
//1 获得输出字节流
//2 输出中文
//3 告诉浏览器使用GBK解码 ==> 乱码
控制 浏览器使用什么码表解码
可以用请求头response.setHeader(" "," ")

例五:字符流发送汉子
// 控制字符流使用的编码,往上放,在获得字符流的时候,会来取这个编码。如果在取完之后设置,没有效果
//告诉浏览器使用什么码来解码
//1. 获得字符流
//2. 发送中文
JAVAEE提供一种方法可以同时解决以上两个方法:setcontenttype

字符流和字节流要注意的一个问题:
字节流和字符流一定不能同时使用。
字节流发送图片:
//0 告诉浏览器 发给你的流的MIME类型。

//1. 获得图片的输入流
getServletContext().getResourceAsStream
//2. 通过response获得输出字节流
OutputStream out = response.getOUtputStream();
//3 两个对接

//3. 两个对接

//使用字节流发送图片
getServletContext().getMimeType(".jar")
告诉Context根据对象去xml里面找

request对象
封装了浏览器发送来的请求信息

请求首行 请求方式 请求路径 协议/版本号
request.getMethod(): GET
request.getRequestURI()
request.getServletPath

请求头
请求空行
请求正文,表单传过来的键值对

获得表单提交的参数:
1.GET http://localhost:8080/Day
乱码:只要确保编码和解码一致,就绝对没有问题。
浏览器负责编码。浏览器使用的码表就是表单所在页面的码表
服务器负责解码,服务器默认使用ISO-8859-1编码,如下配置的URIEndoing来解决编码码表(不太推荐使用)
2.POST

request&&response_第1张图片
image.png
request&&response_第2张图片
image.png

POST解码时机是在解码时,Get是在调用之前。

如上配置会影响整个服务器不推荐:
我们选用如下代码解决:
//获得参数
//因为服务器使用了错误的码表,那么我们按照错误的码表原路返回
//用正确的码表重新解码

2.POST
因为Post解码是在第一次调用getParameter之前,那么解决乱码只需要在调用该方法之前设置编码

涉及到获得表单参数的方法还有哪些呢?
String getParameter 根据键获得值
Map getParameterMap() 获得服务器保存表单参数的容器. 就是map. 泛型:habit=chi&habit=shui&habit=la
String[] getParameterValues(String name) 根据一个键获得多个值得情况

2.request 中请求转发


request&&response_第3张图片
image.png

转发:
一个Servlet处理完毕交给下面的servlet(JSP)继续处理.
作用:
在现实开发中,

//1 获得表单提交的用户名密码
//2 判断是否正确tom 1234才算成功
//成功 ==> 转发到成功页面
//失败 ==> 转发到失败页面
注意问题:
转发的时候,从分工上讲servlet中不要做
servlet中不要做输出正文的动作,没有结果的
如果放到前面会出现乱码
但是响应头是可以的

请求包含


request&&response_第4张图片
image.png

getRequestDispather

3.request域的应用.
原理:
在request对象中含有一个map,这个map就是request域
作用:
//1 获得表单提交的用户名密码
//2 验证
//成功 ==> 成功页面

//失败 ==> 回到登陆页面,并显示错误信息

request域中共享对象
在将来开发中。请求转发时,servlet处理完数据,处理结果要交给jsp显示,可以使用request域将处理结果由servlet带给jsp显示

操作:
1.setAttribute 存入一个键值对
2.getAttribute 通过键取出值
3.getAttributeNames 获得域中所有键
4.removeAttribute 根据键移除一个键值对

路径总结:
以上路径分为两种情况:
1.客户端路径 ==>给浏览器用的路径



response.sendRedirct("")
Refresh:3;url='

路径写法:
带"/" : “/”==> 相对于 主机,例如:表单所在页面路径为==> http://localhost:8080/Day08-request/login.jsp ==> “/”代表 http://localhost:8080
==>http://localhost:8080/Day08-request/login.jsp ==>http://localhost:8080/Day08-request/
不带“ /” 代表从当前目录找

2.服务器端路径

request.getRequestDispatcher(url)
"/":相对于项目. “/”==> http://localhost:8080/Day08-request/

你可能感兴趣的:(request&&response)