原理
继承体系
获取请求行数据_方法
其中比较重要的为2.获取虚拟目录和5.获取请求URI
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getMethod();
System.out.println(method);
String contextPath = request.getContextPath();
System.out.println(contextPath);
String servletPath = request.getServletPath();
System.out.println(servletPath);
String queryString = request.getQueryString();
System.out.println(queryString);
String requestURI = request.getRequestURI();
StringBuffer requestURL = request.getRequestURL();
System.out.println(requestURI);
System.out.println(requestURL);
String remoteAddr = request.getRemoteAddr();
System.out.println(remoteAddr);
String protocol = request.getProtocol();
System.out.println(protocol);
}
获取请求头数据
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String value = request.getHeader(name);
System.out.println(name + "-----" + value);
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String agent = request.getHeader("user-agent");
if(agent.contains("Firefox")) {
System.out.println("火狐来了...");
}else if(agent.contains("Chrome")) {
System.out.println("谷歌来了");
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String referer = request.getHeader("referer");
if(referer != null) {
if(referer.contains("/day14")) {
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("播放");
}else {
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("不给");
}
}
}
通过创建两个tomcat并修改虚拟目录,一个没有/day14,一个有即可验证
获取请求体数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/demo4" method="post">
<input name="username">
<input type="submit" value="提交">
</form>
</body>
</html>
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.BufferedReader;
import java.io.IOException;
@WebServlet("/requestDemo5")
public class RequestDemo5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
BufferedReader reader = request.getReader();
String str = null;
while((str = reader.readLine()) != null) {
System.out.println(str);
}
}
}
获取请求参数通用方式
get和post都可以使用
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;
@WebServlet("/requestDemo6")
public class RequestDemo6 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
System.out.println("get");
System.out.println(username);
String[] hobbies = request.getParameterValues("hobby");
for (String hobby : hobbies) {
System.out.println(hobby);
}
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
String name = parameterNames.nextElement();
String value = request.getParameter(name);
System.out.println(value);
}
System.out.println("----------");
Map<String, String[]> parameterMap = request.getParameterMap();
Set<String> strings = parameterMap.keySet();
for (String name : strings) {
System.out.println(name);
String[] value = parameterMap.get(name);
for (String va : value) {
System.out.println(va);
}
System.out.println("------------");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
中文乱码
post在input输入的是中文的时候,输出相应的输入数据的时候会乱码,解决方法就是request.setCharacterEncoding(“utf-8”);
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
System.out.println(username);
}
请求转发
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo8被访问了...");
request.getRequestDispatcher("/requestDemo9").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo9被访问了...");
}
共享数据(域对象)
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("msg","hello");
request.getRequestDispatcher("/requestDemo9").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object name = request.getAttribute("msg");
System.out.println(name);
System.out.println("demo9被访问了...");
}
getServletContext
没讲