http頭協議
凡是以超鏈接登錄的都是doget,表單請求可以設置請求頭協議:doget、dopost
doget請求,可以直接用url帶參數訪問頁面文件,如:http://127.0.0.1:8080/helloWeb_jun/login.jsp?name=aaa&pwd=123123123
而如果在表單中設置了method="post"
的話則不能用上面的方式訪問,必須是通過超鏈接點擊訪問。
瀏覽器的兼容: 我們要設置response.setContentType();用來設置頭協議中的key,value。如:response.setContentType("text/html;charset=utf-8");
來指定編碼、文件類型等屬性。
要做只能從當前頁面跳轉 判斷拿到的referer是否是null,是否是從當前站點跳轉過去的。`String refer=request.getHeader(“Referer”);
String str = "";
if(refer==null){
str = "看點廣告";
}else{
if(refer.contains("helloWeb")){
str = "<img src='./imgs/1.jpg'>";
}else{
str = "請從主頁點擊查看";
}
}`
轉發與重定向:
重定向:相當於做兩次請求 第一次請求是爲了拿到資源的位置,第二次纔是直接訪問資源 沒有第一次請求的request和response了
重定向用到的方法是
String path = "/helloWeb_jun/jsps/result.jsp";
response.sendRedirect(path);
轉發:做一次請求 但是服務器內部會有一次轉發,將請求轉到資源 這時,保留原來的request和response 。
轉發用到的方法是:
String path ="/jsps/result.jsp";
request.getRequestDispatcher(path).forward(request, response);
gzip壓縮
以壓縮格式,要設
response.setContentType("text/html");
response.setHeader("Content-Encoding", "gzip");
response.setHeader("Content-length", ""+dest.length);
這裏可以用setHeader的key,value來設置,也可以用response.setContentLength(dest.length);
來設置。
壓縮
聲明一點,如果是很小的文件,那麼壓縮之後反而會更大,因爲壓縮有開銷。
用
ByteArrayOutputStream array = new ByteArrayOutputStream();
GZIPOutputStream gout= new GZIPOutputStream(array);
gout.write(str);
gout.close();
來壓縮,最後從array返回出去的就是壓縮好的字節數組。
創建Servlet的幾種方法:
1、直接new Servlet。—這種不需要手動配置xml
2、用implements Servlet ,然後補全來寫。–這個需要自己手動去xml文檔中配置
3、用extends HttpServlet 然後覆蓋所需要的函數來寫—這個需要手動去xml文檔中配置
配置類似如下所示:
<servlet>
<servlet-name>imgServlet</servlet-name>
<servlet-class>cn.hncu.imgServlet.imgServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>imgServlet</servlet-name>
<url-pattern>/servlet/imgServlet</url-pattern>
</servlet-mapping>
這個
<url-pattern>/servlet/imgServlet</url-pattern>
裏面的/servlet/imgServlet
就是我們在表單中的action的值。
最後,本文代碼如下:
GzipServlet
package cn.hncu.imgServlet;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.zip.GZIPOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GzipServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String msg = "dfjwoefjalsdjfowejflasjdfiowe放假偶爾發接哦我IQ耳機佛全文見佛千萬IE附件分接歐文積分fjweofjwoefjwofj";
byte[] str = msg.getBytes();
//將字節數組壓到array內存中去
ByteArrayOutputStream array = new ByteArrayOutputStream();
GZIPOutputStream gout= new GZIPOutputStream(array);
gout.write(str);
gout.close();
//將壓縮後的數據從array中拿出
byte[] dest = array.toByteArray();
response.setContentType("text/html");
//response.setContentLength(dest.length);
response.setHeader("Content-Encoding", "gzip");
response.setHeader("Content-length", ""+dest.length);
OutputStream out = response.getOutputStream();
out.write(dest);
out.flush();
out.close();
}
}
DispatcherServlet
package cn.hncu.imgServlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 演示轉發
* @author <a href="mailto:[email protected]">軍街</a>
*
* @version 1.0 2016-7-17
*/
public class DispatcherServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path ="/jsps/result.jsp";
request.getRequestDispatcher(path).forward(request, response);
}
}
RedirectServlet
package cn.hncu.imgServlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 演示重定向
* @author <a href="mailto:[email protected]">軍街</a>
*
* @version 1.0 2016-7-17
*/
public class RedirectServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//法1:
String path = "/helloWeb_jun/jsps/result.jsp";
response.sendRedirect(path);
//法2:
//response.setStatus(302);
//response.setHeader("Location", path);
// response.setCharacterEncoding("utf-8");
// response.setCharacterEncoding("gbk");
//演示狀態碼
// response.setStatus(404);
// response.getWriter().write("not found找不到 ,good job");
}
}
ShowPicServlet
package cn.hncu.imgServlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShowPicServlet implements Servlet{
@Override
public void destroy() {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//String str = "<img src='./imgs/1.jpg'>";
//做只能從主頁點擊才能進入 靠單純的url不能查看圖片
//http://127.0.0.1:8080/helloWeb_jun/pic ----看點廣告
String refer=request.getHeader("Referer");
String str = "";
if(refer==null){
str = "看點廣告";
}else{
if(refer.contains("helloWeb")){
str = "<img src='./imgs/1.jpg'>";
}else{
str = "請從主頁點擊查看";
}
}
out.write(str);
}
}
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<a href="jspDay1/demo1.jsp">導向我的jsp文件</a> <br>
<hr/>
<!--以form表單提交 這種是在url中顯示輸入的-->
<!-- 默認的method是get -->
<!-- http://127.0.0.1:8080/helloWeb_jun/login.jsp?name=aaa&pwd=123123123 -->
<form action="login.jsp">
姓名:<input type="text" name="name"/><br/>
密碼:<input type="text" name="pwd"/><br/>
<input type="submit" value="登錄"/>
</form>
<!--以form表單提交 這種是在url中不顯示輸入的-->
<!-- http://127.0.0.1:8080/helloWeb_jun/login.jsp -->
<form action="login.jsp" method="post">
姓名:<input type="text" name="name"/><br/>
密碼:<input type="text" name="pwd"/><br/>
<input type="submit" value="登錄"/>
</form>
<br/>
<!--以超鏈接方式登錄-->
<a href="http://127.0.0.1:8080/helloWeb_jun/login.jsp?name=cv&pwd=6666">以超鏈接方式登錄</a><br/>
<br/>
<br/>
<hr/>
<a href="pic">查看美女圖</a>
<br/>
<br/>
<hr/>
<h2>下面演示重定向和轉發</h2>
<!-- 重定向:相當於做兩次請求 第一次請求是爲了拿到資源的位置,第二次纔是直接訪問資源 沒有第一次請求的request和response了-->
<!-- 轉發:做一次請求 但是服務器內部會有一次轉發,將請求轉到資源 這時,保留原來的request和response -->
<a href="redirect">重定向</a><br/>
<a href="dispatcher">轉發</a><br/>
<hr/>
<h2>演示壓縮gzip</h2>
<!-- http://127.0.0.1:8080/helloWeb_jun/ -->
<a href="gzip">壓縮gzip</a>
</body>
</html>
result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>這時重定向的最終頁面</h1>
</body>
</html>