一、Requset 继承体系
二、Requset 获取请求数据
1.请求行: GET /request-demo/req1?username=zhangsan HTTP/1.1
String getMethod(): 获取请求方式 : GET
String getContextPath(): 获取虚拟目录(项目访问路径): /requset-demo
StringBuffer getRequsetURL() :获取URL(统一资源定位符):http://localhost:8080/requset-demo/req1
String getRequsetURL(): 获取URL(统一资源标识符) : /requset-demo/req1
String getQueryString(): 获取请求参数(GET方式):username=zhangsan&password=123
2.请求头:
String getHeader(String name): 根据请求头名称,获取值
3.请求体:POST
ServletInputStream getInputStream(): 获取字节输入流
BufferedReader getReader(): 获取字符输入流
4.post或get调用相互的方法 this.doPost(req.resp)
三、Requset 通用方式获取请求参数
Map<String,String[]> getParameterMap(): 获取所有参数Map集合
String[] getParameterValues(String name) : 根据名称获取参数值(数组)
String getParamter(String name): 根据名称获取参数值(单个值)
四、Idea模板创建Servlet(网上找)
五、请求参数中文乱码问题-POST解决方案
req.setCharactorEncoding("UTF-8")
package com.itheima.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/demo5")
public class ServletDemo5 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
System.out.println("哈哈哈"+req.getParameter("username"));
}
}
六、请求参数中文乱码问题-GET解决方法
通用方法get/post: new String(username.getBytes("ISO-8859-1"),"UTF-8")
package com.itheima.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@WebServlet("/demo6")
public class ServletDemo6 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String regStr = new String(req.getParameter("username").getBytes("ISO-8859-1"), "UTF-8");
System.out.println("哈哈哈"+regStr);
}
}
七、Request请求转发
实现方式:req.getRequsetDispatcher("资源B路径").forward(req,resp);
请求转发资源间共享数据:使用Requset对象
Void setAttribute(String name,Object o): c存储数据到requset域中
Object getAttribute(String name):根据key,获取值
void removeAttribute(String name):根据Key,删除该键值对
@WebServlet("/demo7")
public class ServletDemo7 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("demo7");
//存储数据
req.setAttribute("msg","hello");
//请求转发
req.getRequestDispatcher("/demo8").forward(req,resp);
}
}
@WebServlet("/demo8")
public class ServletDemo8 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("demo8");
//获取数据
System.out.println("demo8"+req.getAttribute("msg"));
}
}
八、Response设置响应数据功能介绍&完成重定向
相应行:HTTP/1.1 200 OK
响应头:Content-Type:text/html
响应体:<html><h1></h1></html>
九、Response完成重定向
实现方式一:resp.setStatus(302) resp.setHeader("Location","资源B的路径")
简化:resp.sendRedirect("资源B的路径")
@WebServlet("/demo9")
public class ServletDemo9 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("demo9");
//方式一
// resp.setStatus(302);
// resp.setHeader("Location","/web-demo/demo1");
//简化
resp.sendRedirect("/web-demo/demo1");
}
}
十、路径问题
明确路径谁使用?
1.浏览器使用:需要加虚拟目录(项目访问路径)
2.服务端使用:不需要加虚拟目录
练习:
<a href="路径" > 加虚拟目录
<form action="路径" >加虚拟目录
req.getRequestDispatcher("路径") 不加虚拟目录
resp.sendRedirect("路径") 加虚拟目录
因为pom.xml可以修改虚拟目录名字,所以我们需要动态获取虚拟目录:
String contextPath = requset.getContextPath() responce.sendRedirect(contextPath+"/resp2")
十一、Responce响应字符数据
1.通过Responce对象获取字符输出流 PrintWriter writer = resp.getWriter(); 2.写数据 writer.write("aaa")
2.返回结果中文乱码 resp.setContentType("text/html;charset=utf-8")
十二、Response响应字节数据