Request请求
请求代表用户通过浏览器访问服务器
开发人员(我们)需要:获取 请求行 请求头 请求体 相关信息
获取请求行
获取请求头
方法
说明
getMethod();
获取请求方法
getContextPath();
获取当前应用发布名称
(发布时写的那个 / ,但是打印是””空)
getRequestURL();
获取请求资源的URL
getRequestURI();
获取请求资源URI
getProtocol();
获取使用的协议
getRemoteAddr();
getRemotePort();
获取来访者信息:地址 端口号
getLocalAddr();
getLocalPort();
获取本地信息:地址 端口号
方法
说明
getHeader("Xxx");
获取消息头的值
getHeaderNames();
获取所有消息头名称的枚举
EnumerationheaderNames = req.getHeaderNames(); //遍历枚举 while (headerNames.hasMoreElements()){ String headerName = headerNames.nextElement(); //取出消息头 String headerValue = req.getHeader(headerName); //根据名称获取值 System.out.println("消息头名称是:"+headerName+",消息头的值是:"+headerValue); } 获取请求参数
解决中文乱码问题:req.setCharacterEncoding("UTF-8");
提取HTML文件中name属性
方法
说明
String getParameter
(String name);
根据参数名获得参数值(单个)
String[] getParameterValues
(String name);
根据参数名获得参数值(数组)
Map
getParameterMap();
获得所有的参数,封装到Map集合
Enumeration
getParameterNames(); 获得所有请求参数名称的枚举
实体类封装
pom.xml导入Beanutils依赖,进行实体类封装,name取值和实体类属性相同
commons-beanutils commons-beanutils1.8.3 @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //解决请求参数中文乱码问题 req.setCharacterEncoding("UTF-8"); //1.创建要封装的对象 User user = new User(); try{ //2.把请求参数的map封装到user对象中 BeanUtils.populate(user,req.getParameterMap()); }catch (Exception e){ e.printStackTrace(); } //3.输出 System.out.println("封装对象是:"+user); }流读取
pom.xml导入hutool依赖,完成读取,服务器会给我们关流
cn.hutool hutool-all5.6.4 @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.获取请求对象的字节输入流 ServletInputStream in = req.getInputStream(); //2.流的操作 String str = IoUtil.read(in, "UTF-8"); System.out.println("用流读到的请求正文是:"+str); }请求转化
一次请求在服务器内部资源之间跳转方式
浏览器 → servlet A → servlet B (A到B达成目的)
1.获取转发对象 RequestDispatcher dispatcher = req.getRequestDispatcher("/Xxx");//参数写的就是转发的目的地 2.真正完成转发 dispatcher.forward(req,resp);共享数据
方法
说明
void setAttribute (String name, Object value)
向request域放入数据
object getAttribute (String name)
根据name从向request域获取数据
void removeAttribute (String name)
根据name从request域删除数据
Response响应
响应代表浏览器对用户的结果反馈
开发人员(我们)需要:设置响应状态码 消息头 正文相关信息
解决中文乱码:原理设置和显示不是一个码表resp.setContentType("text/html;charset=UTF-8");service只能使用一种字节流或者一种字符流//1.使用响应对象获取字节流 ServletOutputStream out = resp.getOutputStream(); //2.使用字节流输出正文 out.write("你好啊!".getBytes("UTF-8"));//1.使用响应对象获取字符流 PrintWriter out = resp.getWriter(); //2.使用字符流输出正文 out.write("你好啊!");使用字节流生成验证码(后面博客铺底)pom.xml导入hutool依赖
@Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.创建验证码对象 LineCaptcha lineCaptcha = new LineCaptcha(200,30,6,10); //2.使用验证码对象中提供的输出把,把字节输出流传递进去 lineCaptcha.write(resp.getOutputStream()); }响应重定向
重定向方法
//1.设置响应消息头 resp.setHeader("Location","/responseDemo5"); //2.设置响应状态码 resp.setStatus(302);简化方法
resp.sendRedirect("/responseDemo5");



