httpServletReq: servlet给客户端回写数据:
发送状态码;
resp.setStatus(303);
resp.sendError(404, "老铁,资源下架不要找"); 错误描述
设置响应头信息;
setHeader("aa","bb"); 可以头信息(没有意义)
一般都是设置有意义的头信息:
content-type text/html;charset=utf-8
Refresh 刷新页面
提供一些方法 设置头信息
resp.setCharacterEncoding("utf-8"); //设置响应编码
resp.setContentType("text/html;charset=utf-8"); //设置响应类型
重定向
a 访问 b 不知道结果 告诉a c的地址
a拿到c的地址 访问c c给结果a
设置重定向:
resp.setStatus(302);
resp.setHeader("location","http://www.baidu.com")
简洁方式:
resp.sendRedirect("xxx");
设置响应正文;
// 响应字符串
resp.getWrite().write(string)
resp.getOutputStream().write(byte [] bs);
响应中文乱码
乱码原因:
java中 中文乱码
1. 编码不统一
2. 数据丢失
浏览器 默认是 iso-8859-1 (gbk)
//可以给他制定的编码
byte[] gkb = "华为价格太贵了".getBytes("gbk");
resp.getOutputStream().write(gkb);
可以 通过 可使用 #setCharacterEncoding 和 #setContentType 显式指定 MIME 正文响应的 charset
告诉浏览器 你用指定的编码给我解码
System.out.println("aaa");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
可以直接设置
resp.setContentType("text/html;charset=utf-8");
response对象:
1. 获取请求头信息 的一些方法
getMethod(); 获取请求方法
getContextPath()
getXXX();
2. 可以获取请求的参数:
String getParameter(String name):获取指定名称的参数 获取值
String[] getParameterValues(String name):获取指定名称的参数,返回值是数组
Map getParameterMap():获取所有参数,封装到Map中,key为参数名称,value为参数值。
3.请求转发:
a访问b b不知道结果 转发到 c c给你返回结果
通过 req 拿到请求分发器
req.getRequestDispatcher("/req04").forword(req,resp);
4.req域对象和servletContext 域对象的区别:
1. servletContext 作用范围: 整个项目
2. req域对象 作用范围:一定要是同一个请求
域对象操作方法都是一样
5.req中处理乱码
get 没有乱码 (get编码为页面编码 utf-8 getParter() 获取编码越是utf-8不会出现乱码)
post 有乱码 getParter() 默认方式(iso-8859-1)
解决办法 设置请求体编码 req.setCharsetCoding("utf-8");
1. 数据库问题:
要自己创建库 设置编码utf-8
db 配置文件 读取和 db的mysql的配置
驱动包的添加 WEB-INF/lib
2. 路径问题
请求转发路劲
表单提交路劲
路径问题:
超链接
不以“/”开头的相对路径;相对当前的文件夹路径 如果在根目录下面也是可以的
表单
绝对路径;
以“/”开头的相对路径 / 相对的是 localhost:8080 路径
正确写法: /项目名称/xxx/xxx
不以“/”开头的相对路径;相对当前的文件夹路径
转发 服务器内部操作
如果该路径以 "/" 开头,那么可以相对于当前上下文根解释它
web_day03 (不加/ 也可以 )
req.getRequestDispatcher("/page/demo02.html").forward(req, resp);
重定向 浏览器路劲会发生改变, 浏览器路劲
如果位置是相对的,有一个前导 '/',则容器将相对于 servlet 容器根对其进行解释。
容器根 = localhost:8080
resp.sendRedirect("/web_day03/page/demo02.html");
<url-pattern>
全路径匹配 /demo01 要加 / 相对 /web_day03/下面的路劲
扩展名配置 .do 或者.action 一扩展结尾都可以访问
全匹配 所有都可以访问
ServletContext获取资源
context.getRealPath("/");
真实路径: / 当前项目 webContent目录下面
找WEB-INF/lib 下面路径: getRealPath("/WEB-INF/xxx");
src下面的路劲: web项目 src下面java文件都编译了 放在
/WEB-INF/classes 下面
getRealPath("/WEB-INF/classes/xxx")
Class获取资源
class 获取资源是classes 下面的资源
加 / 获取的是classes 下面的路劲
不加/ 获取的是classes 下面包中的具体内的当前路劲
/classes/com/xxx/xxx
ClassLoader获取资源
只能买获取 资源是classes 下面的资源
web中乱码解决:
编码的原因:
1.编码不统一
2.数据丢失
响应乱码:
原因: 浏览器默认使用iso-8859-1 解码
解决: 告诉浏览器 使用 utf-8解码
resp.setContent("text/html;charset=utf-8");
请求乱码:
原因: getParameter() 默认使用 iso-8859-1 获取参数
解决 : req.setCharacterEncoding() 来指定编码,然后再使用
get请求不需要解决
数据库乱码乱码:
1.url 连接的时候 设置:
useUnicode=true&characterEncoding=utf8
2.数据库创建的时候 utf-8编码
导入别人的项目乱码:
原因: 你和别人项目编码不一致 改成一致
工作空间编码统一设置为utf-8
域对象:
req 作用范围: 同一次请求
session 范围: 同一次会话
servletContext 整个web项目中
servletContext的获取:
config.getServletContext();
getServletContext() 继承servlet抽象类(httpServlet 或者 GenericServlet)
session.getServletContext();
session中存了数据有2中方式清理:
1方式 session.removeAttribute("user");
2.方式 session.invalidate(); session失效