Servlet練習:java
訪問PictrueServlet跳轉一張圖片:web
package com.oracle.demo01; import java.io.FileInputStream; import java.io.IOException; import javax.servlet.ServletContext; 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 PictrueServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //客戶端顯示圖片是一個文件複製的過程! //明確數據源: ServletContext servletContext=this.getServletContext(); String Path=servletContext.getRealPath("WhatTheFuck.jpg"); FileInputStream fis=new FileInputStream(Path); //明確目的地: ServletOutputStream sos=response.getOutputStream(); //複製文件: int len=0; byte[] bytes=new byte[1024]; while((len=fis.read(bytes))!=-1){ sos.write(bytes,0,len); } fis.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
重要練習Servlet練習:瀏覽器
package com.oracle.demo02; import java.io.FileInputStream; import java.io.IOException; import java.net.URLEncoder; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import sun.misc.BASE64Encoder; public class DownLoadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //建立ServletContext域對象: ServletContext ServletContext=this.getServletContext(); //獲取Web.xml傳過來的filename對象(封裝在request對象中,用getParameter方法調用); String filename=request.getParameter("filename"); //解決txt文件是中文名稱問題,加入這句話你好.txt文件能夠下載了,可是沒有名稱,因此加入一下的話: filename=new String(filename.getBytes("ISO8859-1"),"UTF-8"); //瀏覽器兼容性調教: //首先拿到用戶瀏覽器型號: String agent=request.getHeader("User-Agent"); String filenameEncoder=""; if (agent.contains("MSIE")) { // IE瀏覽器 filenameEncoder = URLEncoder.encode(filename, "utf-8"); filenameEncoder = filenameEncoder.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐瀏覽器 BASE64Encoder base64Encoder = new BASE64Encoder(); filenameEncoder= "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else { // 其它瀏覽器 filenameEncoder= URLEncoder.encode(filename, "utf-8"); } //一下兩句話告知瀏覽器客戶端區分文件類型,不然.zip和.wmv文件會下載成「文件」! response.setContentType(getServletContext().getMimeType(filename)); //告知客戶端文件的打開方式(下載) response.setHeader("Content-Disposition","attachment;filename="+filenameEncoder); //獲取文件絕對路徑: String Path=ServletContext.getRealPath("DownLoad/"+filename); //明確數據源: FileInputStream fis=new FileInputStream(Path); //明確目的地: ServletOutputStream sos=response.getOutputStream(); //複製文件: int len=0; byte[] bytes=new byte[1024]; while((len=fis.read(bytes))!=-1){ sos.write(bytes,0,len); } //關流: fis.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
生成驗證碼示例代碼:緩存
package com.oracle.demo03; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 驗證碼生成程序 * 複製進來的不是本身建立的,因此要先寫web.xml信息 */ public class CheckImgServlet extends HttpServlet { // 集合中保存全部成語 private List<String> words = new ArrayList<String>(); @Override public void init() throws ServletException { // 初始化階段,讀取new_words.txt // web工程中讀取 文件,必須使用絕對磁盤路徑 String path = getServletContext().getRealPath("/WEB-INF/new_words.txt"); try { BufferedReader reader = new BufferedReader(new FileReader(path)); String line; while ((line = reader.readLine()) != null) { words.add(line); } reader.close(); } catch (IOException e) { e.printStackTrace(); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 禁止緩存 // response.setHeader("Cache-Control", "no-cache"); // response.setHeader("Pragma", "no-cache"); // response.setDateHeader("Expires", -1); int width = 120; int height = 30; // 步驟一 繪製一張內存中圖片 BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 步驟二 圖片繪製背景顏色 ---經過繪圖對象 Graphics graphics = bufferedImage.getGraphics();// 獲得畫圖對象 --- 畫筆 // 繪製任何圖形以前 都必須指定一個顏色 graphics.setColor(getRandColor(200, 250)); graphics.fillRect(0, 0, width, height); // 步驟三 繪製邊框 graphics.setColor(Color.WHITE); graphics.drawRect(0, 0, width - 1, height - 1); // 步驟四 四個隨機數字 Graphics2D graphics2d = (Graphics2D) graphics; // 設置輸出字體 graphics2d.setFont(new Font("宋體", Font.BOLD, 18)); Random random = new Random();// 生成隨機數 int index = random.nextInt(words.size()); String word = words.get(index);// 得到成語 // 定義x座標 int x = 10; for (int i = 0; i < word.length(); i++) { // 隨機顏色 graphics2d.setColor(new Color(20 + random.nextInt(110), 20 + random .nextInt(110), 20 + random.nextInt(110))); // 旋轉 -30 --- 30度 int jiaodu = random.nextInt(60) - 30; // 換算弧度 double theta = jiaodu * Math.PI / 180; // 得到字母數字 char c = word.charAt(i); // 將c 輸出到圖片 graphics2d.rotate(theta, x, 20); graphics2d.drawString(String.valueOf(c), x, 20); graphics2d.rotate(-theta, x, 20); x += 30; } // 將驗證碼內容保存session request.getSession().setAttribute("checkcode_session", word); // 步驟五 繪製干擾線 graphics.setColor(getRandColor(160, 200)); int x1; int x2; int y1; int y2; for (int i = 0; i < 30; i++) { x1 = random.nextInt(width); x2 = random.nextInt(12); y1 = random.nextInt(height); y2 = random.nextInt(12); graphics.drawLine(x1, y1, x1 + x2, x2 + y2); } // 將上面圖片輸出到瀏覽器 ImageIO graphics.dispose();// 釋放資源 //將圖片寫到response.getOutputStream()中 ImageIO.write(bufferedImage, "jpg", response.getOutputStream()); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } /** * 取其某一範圍的color * * @param fc * int 範圍參數1 * @param bc * int 範圍參數2 * @return Color */ private Color getRandColor(int fc, int bc) { // 取其隨機顏色 Random random = new Random(); if (fc > 255) { fc = 255; } if (bc > 255) { bc = 255; } int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b); } }
Request初級練習:session
package com.oracle.demo04; 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 LineServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //獲取請求方式: String method=request.getMethod(); System.out.println("method"+method); //獲取請求資源的相關內容: String requestURI=request.getRequestURI(); System.out.println("requestURI:"+requestURI); StringBuffer requestURL=request.getRequestURL(); System.out.println("requestURL:"+requestURL); String ContextPath=request.getContextPath(); System.out.println("ContextPath:"+ContextPath); //獲取get方式提交URL後的參數信息: String queryString=request.getQueryString(); System.out.println("queryString:"+queryString); //獲取客戶端的訪問者的IP地址: String ip=request.getRemoteAddr(); System.out.println("ip:"+ip); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
多練習!必定會成功禿頂的!加油!!!oracle
package com.oracle.demo03;dom
import java.awt.Color;ide
import java.awt.Font;字體
import java.awt.Graphics;this
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 驗證碼生成程序
* 複製進來的不是本身建立的,因此要先寫web.xml信息
*/
public class CheckImgServlet extends HttpServlet {
// 集合中保存全部成語
private List<String> words = new ArrayList<String>();
@Override
public void init() throws ServletException {
// 初始化階段,讀取new_words.txt
// web工程中讀取 文件,必須使用絕對磁盤路徑
String path = getServletContext().getRealPath("/WEB-INF/new_words.txt");
try {
BufferedReader reader = new BufferedReader(new FileReader(path));
String line;
while ((line = reader.readLine()) != null) {
words.add(line);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 禁止緩存
// response.setHeader("Cache-Control", "no-cache");
// response.setHeader("Pragma", "no-cache");
// response.setDateHeader("Expires", -1);
int width = 120;
int height = 30;
// 步驟一 繪製一張內存中圖片
BufferedImage bufferedImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 步驟二 圖片繪製背景顏色 ---經過繪圖對象
Graphics graphics = bufferedImage.getGraphics();// 獲得畫圖對象 --- 畫筆
// 繪製任何圖形以前 都必須指定一個顏色
graphics.setColor(getRandColor(200, 250));
graphics.fillRect(0, 0, width, height);
// 步驟三 繪製邊框
graphics.setColor(Color.WHITE);
graphics.drawRect(0, 0, width - 1, height - 1);
// 步驟四 四個隨機數字
Graphics2D graphics2d = (Graphics2D) graphics;
// 設置輸出字體
graphics2d.setFont(new Font("宋體", Font.BOLD, 18));
Random random = new Random();// 生成隨機數
int index = random.nextInt(words.size());
String word = words.get(index);// 得到成語
// 定義x座標
int x = 10;
for (int i = 0; i < word.length(); i++) {
// 隨機顏色
graphics2d.setColor(new Color(20 + random.nextInt(110), 20 + random
.nextInt(110), 20 + random.nextInt(110)));
// 旋轉 -30 --- 30度
int jiaodu = random.nextInt(60) - 30;
// 換算弧度
double theta = jiaodu * Math.PI / 180;
// 得到字母數字
char c = word.charAt(i);
// 將c 輸出到圖片
graphics2d.rotate(theta, x, 20);
graphics2d.drawString(String.valueOf(c), x, 20);
graphics2d.rotate(-theta, x, 20);
x += 30;
}
// 將驗證碼內容保存session
request.getSession().setAttribute("checkcode_session", word);
// 步驟五 繪製干擾線
graphics.setColor(getRandColor(160, 200));
int x1;
int x2;
int y1;
int y2;
for (int i = 0; i < 30; i++) {
x1 = random.nextInt(width);
x2 = random.nextInt(12);
y1 = random.nextInt(height);
y2 = random.nextInt(12);
graphics.drawLine(x1, y1, x1 + x2, x2 + y2);
}
// 將上面圖片輸出到瀏覽器 ImageIO
graphics.dispose();// 釋放資源
//將圖片寫到response.getOutputStream()中
ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
/**
* 取其某一範圍的color
*
* @param fc
* int 範圍參數1
* @param bc
* int 範圍參數2
* @return Color
*/
private Color getRandColor(int fc, int bc) {
// 取其隨機顏色
Random random = new Random();
if (fc > 255) {
fc = 255;
}
if (bc > 255) {
bc = 255;
}
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
}