package com.request_response;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.Map;
import java.util.Map.Entry;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RR extends HttpServlet {
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//重要的参数方法
try {
importantFun(request, response);
} catch (Exception e) {
e.printStackTrace();
}
/**
* request对象相关
*
*/
// 1. 获取请求方式 post get
String method = request.getMethod();
// 2. 获取协议
String protocol = request.getProtocol();
// 3. 获取请求资源
String requestUrl = request.getRequestURL().toString();
// 4. 获取工程名
String projectName = request.getContextPath();
// 5. 获取请求资源路径
String projectResource = request.getRequestURL().substring(request.getContextPath().length());
// 6. 获取请求的IP地址
String requestIp = request.getRemoteAddr();
// 7. 获取请求的端口
int requestPort = request.getRemotePort();
// 8. 获取请求的主机
String requestHost = request.getRemoteHost();
// 9.
String requestUser = request.getRemoteUser();
System.out.println("\n\n\nRemoteUser = " + requestUser);
/*response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();*/
}
/**
* 重要的方法
* @param request
* @param response
* @throws Exception
*/
public void importantFun(HttpServletRequest request, HttpServletResponse response) throws Exception{
//response对象常用方法
//1. 设置状态码
response.setStatus(302); //重定向状态码
//2. 设置响应头信息
response.setHeader("Location", request.getContextPath()+"/login.html"); //配合方法1 设置重定向路径
//3. 重定向
try {
response.sendRedirect(request.getContextPath()+"/login.html"); //方法1 和 方法2的综合
} catch (IOException e) {
e.printStackTrace();
}
//4. 通过response对象设置响应头信息, 设置5秒中自动跳转到新页面
response.setHeader("refresh", "5; url="+request.getContextPath()+"/login.html");
response.setHeader("content-type", "text/html;charset=utf-8");
//5. response获取字符输出流
PrintWriter out = response.getWriter();
//6. response获取字节输出流
ServletOutputStream outputStream = response.getOutputStream();
//7. 设置响应文件类型 MIME
response.setContentType("text/html;charset=utf-8"); //代替 response.setCharacterEncoding("utf-8");
//8. 设置输入编码方式
response.setCharacterEncoding("utf-8");
//request对象的常用方法
//1. 获取页面传值
String name = request.getParameter("name");
//2. 获取多选框传过来的值
String[] values = request.getParameterValues("interest");
//3. 获取页面上所有的数据
Map<String, String[]> parameterMap = request.getParameterMap();
for (Entry<String, String[]> string : parameterMap.entrySet()) {
//将数组转换为字符串
Arrays.toString(string.getValue());
}
//4. 获取请求方式
String method = request.getMethod();
//5. 获取协议
String protocol = request.getProtocol();
//6. 获取请求资源路径
StringBuffer requestURL = request.getRequestURL();
String requestURI = request.getRequestURI();
String requestResource = request.getRequestURI().substring(request.getContextPath().length());
//7. 获取主机ip
String ip = request.getRemoteAddr();
//8. 获取工程虚拟路径名
String contextPath = request.getContextPath();
//9. 获取执行的请求头信息, 获取请求头信息
String referer = request.getHeader("referer"); //防盗链设置, 可以跟去头信息是否以服务器ip作为请求头信息来判断、该请求的链接地址
if(referer != null && referer.startsWith("http://localhost")){
//有效
}
//10. 获取客户端浏览器类型
String agent = request.getHeader("User-Agent");
//11. post方式请求乱码处理
request.setCharacterEncoding("utf-8");
//12. get方式请求乱码处理 编码转换/ 服务器默认解码类型为 iso-8859-1
String parameter = request.getParameter("name");
// 方法1
parameter = URLEncoder.encode(parameter, "iso-8859-1"); //先编码
parameter = URLDecoder.decode(parameter, "utf-8"); //再按照utf-8解码
//方法2 利用字符串提供的编码设置**********************
parameter = new String(parameter.getBytes("iso-8859-1"), "utf-8");
request.setAttribute("key", "value");
request.getRequestDispatcher("url").forward(request, response);
//转发可以通过request携带数据, 重定向为什么不能携带数据?
//因为重定向response是通知浏览器,进行的二次访问服务器。此时请求对象已经销毁了。
/**
* 转发:属于服务器内部跳转 路径不需要写工程名
* 重定向:属于二次请求,请求路径需要添加工程名
*/
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.Map;
import java.util.Map.Entry;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RR extends HttpServlet {
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//重要的参数方法
try {
importantFun(request, response);
} catch (Exception e) {
e.printStackTrace();
}
/**
* request对象相关
*
*/
// 1. 获取请求方式 post get
String method = request.getMethod();
// 2. 获取协议
String protocol = request.getProtocol();
// 3. 获取请求资源
String requestUrl = request.getRequestURL().toString();
// 4. 获取工程名
String projectName = request.getContextPath();
// 5. 获取请求资源路径
String projectResource = request.getRequestURL().substring(request.getContextPath().length());
// 6. 获取请求的IP地址
String requestIp = request.getRemoteAddr();
// 7. 获取请求的端口
int requestPort = request.getRemotePort();
// 8. 获取请求的主机
String requestHost = request.getRemoteHost();
// 9.
String requestUser = request.getRemoteUser();
System.out.println("\n\n\nRemoteUser = " + requestUser);
/*response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();*/
}
/**
* 重要的方法
* @param request
* @param response
* @throws Exception
*/
public void importantFun(HttpServletRequest request, HttpServletResponse response) throws Exception{
//response对象常用方法
//1. 设置状态码
response.setStatus(302); //重定向状态码
//2. 设置响应头信息
response.setHeader("Location", request.getContextPath()+"/login.html"); //配合方法1 设置重定向路径
//3. 重定向
try {
response.sendRedirect(request.getContextPath()+"/login.html"); //方法1 和 方法2的综合
} catch (IOException e) {
e.printStackTrace();
}
//4. 通过response对象设置响应头信息, 设置5秒中自动跳转到新页面
response.setHeader("refresh", "5; url="+request.getContextPath()+"/login.html");
response.setHeader("content-type", "text/html;charset=utf-8");
//5. response获取字符输出流
PrintWriter out = response.getWriter();
//6. response获取字节输出流
ServletOutputStream outputStream = response.getOutputStream();
//7. 设置响应文件类型 MIME
response.setContentType("text/html;charset=utf-8"); //代替 response.setCharacterEncoding("utf-8");
//8. 设置输入编码方式
response.setCharacterEncoding("utf-8");
//request对象的常用方法
//1. 获取页面传值
String name = request.getParameter("name");
//2. 获取多选框传过来的值
String[] values = request.getParameterValues("interest");
//3. 获取页面上所有的数据
Map<String, String[]> parameterMap = request.getParameterMap();
for (Entry<String, String[]> string : parameterMap.entrySet()) {
//将数组转换为字符串
Arrays.toString(string.getValue());
}
//4. 获取请求方式
String method = request.getMethod();
//5. 获取协议
String protocol = request.getProtocol();
//6. 获取请求资源路径
StringBuffer requestURL = request.getRequestURL();
String requestURI = request.getRequestURI();
String requestResource = request.getRequestURI().substring(request.getContextPath().length());
//7. 获取主机ip
String ip = request.getRemoteAddr();
//8. 获取工程虚拟路径名
String contextPath = request.getContextPath();
//9. 获取执行的请求头信息, 获取请求头信息
String referer = request.getHeader("referer"); //防盗链设置, 可以跟去头信息是否以服务器ip作为请求头信息来判断、该请求的链接地址
if(referer != null && referer.startsWith("http://localhost")){
//有效
}
//10. 获取客户端浏览器类型
String agent = request.getHeader("User-Agent");
//11. post方式请求乱码处理
request.setCharacterEncoding("utf-8");
//12. get方式请求乱码处理 编码转换/ 服务器默认解码类型为 iso-8859-1
String parameter = request.getParameter("name");
// 方法1
parameter = URLEncoder.encode(parameter, "iso-8859-1"); //先编码
parameter = URLDecoder.decode(parameter, "utf-8"); //再按照utf-8解码
//方法2 利用字符串提供的编码设置**********************
parameter = new String(parameter.getBytes("iso-8859-1"), "utf-8");
request.setAttribute("key", "value");
request.getRequestDispatcher("url").forward(request, response);
//转发可以通过request携带数据, 重定向为什么不能携带数据?
//因为重定向response是通知浏览器,进行的二次访问服务器。此时请求对象已经销毁了。
/**
* 转发:属于服务器内部跳转 路径不需要写工程名
* 重定向:属于二次请求,请求路径需要添加工程名
*/
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}