有时无法访问服务器其实是DNS服务器宕机
可以通过访问URL获得解析前的IP直接访问服务器地址
测试代码如下
package cn.aynortechnology.line;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 获得请求行内容
* @author V
*
*/
public class LineServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获得请求方式
String method = request.getMethod();
System.out.println("method:"+method);
//2.获得请求的资源相关的内容
String requestURI = request.getRequestURI();
StringBuffer requestURL = request.getRequestURL();
System.out.println("uri:"+requestURI);
System.out.println("url:"+requestURL);
//获得WEB应用的名称
String contextPath = request.getContextPath();
System.out.println("web应用名称:"+contextPath);
//获得地址后参数的字符串
String queryString = request.getQueryString();
System.out.println("web参数:"+queryString);
//3.获得库户籍的信息--获得访问者IP地址
String remoteAddr = request.getRemoteAddr();
System.out.println("IP:"+remoteAddr);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
package cn.aynortechnology.header;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HeaderServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获得指定的头-------常用---------
String header = request.getHeader("User-Agent");
System.out.println(header);
//2.获得所有头的名字
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()){
String headername = headerNames.nextElement();
String headerValue = request.getHeader(headername);
System.out.println(headername+":"+headerValue);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
防盗链原理
只有请求头referer(请求来源地址)与设定的主页面地址相同才能完成跳转
package cn.aynortechnology.header;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ReferServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//对该新闻的来源进行判断
String header = request.getHeader("referer");
if(header!=null&&header.startsWith("http://localhost")) {
//如果是从我自己的主页跳转过去的,可以看到内容
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("这是一条新闻(防盗链测试)");
}else {
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("你是盗链者,想peach");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/WEB15/header">访问headerServlet资源</a>
<form action="/WEB15/line" method="post">
<input type="text" name="username"><br>
<input type="password" name="password"><br>
<input type="submit" value="提交"><br>
</form>
<hr/>
<form action="/WEB15/content" method="post">
<input type="text" name="username"><br>
<input type="password" name="password"><br>
<input type="checkbox" name="hobby" value="zq">足球<br>
<input type="checkbox" name="hobby" value="pq">排球<br>
<input type="checkbox" name="hobby" value="ppq">乒乓球<br>
<input type="submit" value="提交"><br>
</form>
</body>
</html>
package cn.aynortechnology.content;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ContentServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获得单个表单值
String username = request.getParameter("username");
System.out.println(username);
String password = request.getParameter("password");
System.out.println(password);
//2.获得多个表单值
String[] hobbys = request.getParameterValues("hobby");
for(String hobby:hobbys) {
System.out.println(hobby);
}
//3.获得所有的请求参数的名称
Enumeration<String> parameterNames = request.getParameterNames();
while(parameterNames.hasMoreElements()) {
System.out.println(parameterNames.nextElement());
}
System.out.println("----------------");
//4.获得所有的参数 参数封装到一个Map<String,String[]>
Map<String, String[]> parameterMap = request.getParameterMap();
for(Map.Entry<String, String[]> entry:parameterMap.entrySet()) {
System.out.println(entry.getKey());
for(String str:entry.getValue()) {
System.out.println(str);
}
System.out.println("-----------------");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
此部分代码解析请见此文章-泛型部分
package cn.aynortechnology.forward;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//向request域中存数据
request.setAttribute("name", "aynor");
//servlet1将请求转发给servlet2
RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");
//执行转发方法
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
package cn.aynortechnology.forward;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从request域中取数据 强制转化的前提是知道这个变量是什么类型的
Object attribute = request.getAttribute("name");
response.getWriter().write("hello aynor"+attribute);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
请求转发 请求转发的定义以及请求转发与重定向的区别
package cn.aynortechnology.forward;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//servlet1将请求转发给servlet2
RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");
//执行转发方法
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
(页码SR2.1)HTTP Servlet Request 获得请求行、请求头、请求体、完成防盗链
(页码SR2.2)HTTP Servlet Request 注册和登录的基本实现