天天看點

Java Servlet 開發實踐 開發環境: Filter Session開發實踐

鏈瘒璇寸殑鏄渶鍩虹鐨凧ava Web寮€鍙戯紝涔熷氨鏄函Servlet锛屼笉鍖呭惈妗嗘灦銆丣SP銆? Servlet绫誨簱鏄疛2EE涓渶閲嶈鐨勯儴鍒嗭紝鍏朵富瑕佺殑鎺ュ彛鏈夛細

Filter聽

FilterChain聽

FilterConfig聽

RequestDispatcher聽

Servlet聽

ServletConfig聽

ServletContext聽

ServletContextAttributeListener聽

ServletContextListener聽

ServletRequest聽

ServletRequestAttributeListener聽

ServletRequestListener聽

ServletResponse聽

SingleThreadModel

鏈枃娑夊強鍒扮殑鏈塖ervlet锛孎ilter锛孲ession銆?

寮€鍙戠幆澧冿細

1銆乀omcat鏈嶅姟鍣紝浣滀負Servlet Container鍜學eb Container锛屾垜浣跨敤鐨勬槸7.0鐗堟湰銆俉eb瀹瑰櫒灏卞儚鏄劇ず鍣紝Servlet瀹瑰櫒灏卞儚鎾斁鍣紝Servlet灏卞儚鎴戜滑鍋氱殑涓€涓棰戙€傝鎾斁涓€涓棰戯紝涓や釜瀹瑰櫒缂轟竴涓嶅彲銆? 2銆丒clipse锛岃兘鎶婃垜鍐欑殑浠g爜鎸夌収Servlet鐨勮鑼冪紪璇戞垚class銆? 涓轟簡璋冭瘯鏂歸潰锛屾垜鎶奣omcat鐨勯粯璁ら」鐩礬寰勬敼涓轟簡鎴戠殑Eclipse椤圭洰鐨勭洰褰曚笅銆?

Filter

杩欎釜鎺ュ彛鏄負浜嗗鐢ㄦ埛璇鋒眰鐨剈rl杩涜澶勭悊銆傛瘮濡傜壒瀹氱殑璺寵漿銆佹潈闄愮殑鎺у埗銆佸叧閿瘝鐨勬嫤鎴€傚綋涓€涓敤鎴瘋姹傝Filter鎷︽埅鍚庯紝浼氭牴鎹竴瀹氱殑鏉′歡鍐沖畾濡備綍澶勭悊銆傝璁ilter涓昏鍋氫袱浠朵簨锛?

1銆佺紪鍐檍ava绫誨疄鐜癋ilter鎺ュ彛锛屽苟瀹炵幇鍏禿oFilter鏂規硶銆偮? 2銆佸湪 web.xml 鏂囦歡涓嬌鐢?lt;filter>鍜?lt;filter-mapping>鍏冪礌瀵圭紪鍐欑殑filter绫昏繘琛屾敞鍐岋紝骞惰缃畠鎵€鑳芥嫤鎴殑url銆?

Session

浼氳瘽鏄負浜嗙粰鏈韓鏃犵姸鎬佺殑HTTP鍗忚鎻愪緵鐘舵€侊紝杩欐牱灏卞彲浠ュ湪鏈嶅姟鍣ㄧ璁闆綍鏌愪竴鐗瑰畾鐢ㄦ埛鐨勭櫥褰曠姸鎬佹垨璁塊棶鐘舵€併€傚畠鏈川涓婃槸鏈嶅姟鍣ㄧ鐨勪竴涓搱甯岃〃锛堟垨瀛楀吀锛夈€傞€氳繃request.getSession()鑾峰緱Session瀵矽薄锛屽叧閿瓧Key灏辨槸浼犻€掔粰鐢ㄦ埛娴忚鍣ㄧ殑鍚嶄負 jsessionid 鐨?Cookie 鍊箋€傞€氳繃Session瀵矽薄鐨刧etAttribute鏂規硶銆乻etAttribute鏂規硶銆乺emoveAttribute鏂規硶鏉ユ帶鍒朵細璇濄€?

寮€鍙戝疄璺?/h1> 鎴戠紪鍐欎簡涓€涓畝鍗曠殑妯″瀷锛屼竴涓富椤甸潰銆佷竴涓敤鎴風殑鐧婚檰椤點€佷竴涓敤鎴蜂笓灞為〉闈€? 鍦‥clipse涓嬪垱寤篋ynamic Web Project銆備負姣忎釜Servlet鍒涘緩涓€涓被锛屼負姣忎釜Filter鍒涘緩涓€涓被銆? 鎴戠紪鍐欎簡2涓狥ilter锛屼竴涓敤鏉ヨ褰曟墍鏈夌殑URL璁塊棶鏃ュ織锛屼竴涓敤浜庢帶鍒跺鐢ㄦ埛涓撳睘椤甸潰鐨勮闂潈闄愶紙鍙湁鐧誨綍鐘舵€佹椂鎵嶅彲浠ヨ闂級銆?

鎴戠紪鍐欎簡5涓猄ervlet澶勭悊涓嶅悓鐨勮姹傦紝IndexPage.java鍛堢幇涓婚〉闈紝Login.java鍛堢幇鐧婚檰椤碉紝User1.java鍛堢幇鐢ㄦ埛涓撳睘椤碉紝Login.java銆丩oginOut.java澶勭悊鐧誨綍/鐧誨嚭璇鋒眰銆? 鍦↗ava浠g爜閲岀敓鎴恏tml瀹炲湪澶夯鐑︿簡锛屾墍浠ユ妸鎵€鏈夌殑html鍐欐垚鍗曠嫭鐨勬枃浠訛紝鐢╦ava鍘昏鍙栥€?

涓嬮潰鏄痺eb.xml閰嶇疆鏂囦歡锛屽Filter鐨剈rl鏄犲皠鍜屽Servlet鐨剈rl鏄犲皠閮借鍐欏湪閲岄潰銆?

<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
						 "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

	<filter>
		<filter-name>helloFilter</filter-name>
		<filter-class>demo.HelloFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>helloFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<filter>
		<filter-name>loginfilter</filter-name>
		<filter-class>demo.LoginFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>loginfilter</filter-name>
		<url-pattern>/lucky</url-pattern>
	</filter-mapping>
	

	<servlet> 
		<servlet-name>index_page</servlet-name>
		<servlet-class>demo.IndexPage</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>index_page</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>

	<servlet> 
		<servlet-name>login_page</servlet-name>
		<servlet-class>demo.Login</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>login_page</servlet-name>
		<url-pattern>/login</url-pattern>
	</servlet-mapping>
	
	<servlet> 
		<servlet-name>logincl_page</servlet-name>
		<servlet-class>demo.LoginCL</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>logincl_page</servlet-name>
		<url-pattern>/logincl</url-pattern>
	</servlet-mapping>
	
	<servlet> 
		<servlet-name>user_page</servlet-name>
		<servlet-class>demo.User1</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>user_page</servlet-name>
		<url-pattern>/lucky</url-pattern>
	</servlet-mapping>
	
	<servlet> 
		<servlet-name>loginout_page</servlet-name>
		<servlet-class>demo.LoginOut</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>loginout_page</servlet-name>
		<url-pattern>/loginout</url-pattern>
	</servlet-mapping>
	
</web-app></span>
           
鐧誨綍鐘舵€佹帶鍒剁殑杩囨護鍣細
<span style="font-size:18px;">package demo;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginFilter implements Filter {

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("Filter LoginFilter init");
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 

		throws IOException, ServletException {
        
		// 灏哠ervletRequest杞崲涓篐ttpServletRequest      
        HttpServletRequest request = (HttpServletRequest) req;      
        // 鑾峰彇褰撳墠鐨勮闂礬寰?  
        String actionUrl = request.getServletPath();
        
        // 鑾峰彇HttpSession涓殑淇℃伅 
        HttpSession session = request.getSession();
        String user = (String) session.getAttribute("user");      

        // 濡傛灉session涓湁flag鏍囪锛屽苟涓旀爣璁頒負宸茬櫥褰曪紝鍒欐斁琛?  
        if ( (!actionUrl.equals("/lucky")) || (user != null && user.equals("lucky")) ) 
        {      
            chain.doFilter(req, res); 
        } 
        else 
        {
            // 鍚﹀垯锛屼細璺寵漿鍒版彁绀轟俊鎭〉   
        	res.setContentType("text/html;charset=gbk");  
            PrintWriter out = ((HttpServletResponse)res).getWriter();
            out.print("<script>alert('浣犳病鏈夌櫥褰曪紒');location.href='/login'</script>");
        }      
	}

	@Override
	public void destroy() {
		System.out.println("Filter LoginFilter destroy");
	}
}</span>
           
涓婚〉闈㈢殑鍛堢幇锛?
<span style="font-size:18px;">package demo;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class IndexPage extends HttpServlet{
	
	public void doGet(HttpServletRequest req, HttpServletResponse res)
	
			throws ServletException, IOException {
        res.setContentType("text/html;charset=gbk"); 
        
        PrintWriter pw = res.getWriter(); 
        
        String path = req.getSession().getServletContext().getRealPath(""); //鑾峰彇褰撳墠宸ョ▼鐨勮礬寰?        File f1 = new File(path + "//templates//welcome.html");
        InputStreamReader reader = new InputStreamReader(new FileInputStream(f1)); //寤虹珛涓€涓緭鍏ユ祦瀵矽薄reader  
        BufferedReader br = new BufferedReader(reader); // 寤虹珛涓€涓璞★紝瀹冩妸鏂囦歡鍐呭杞垚璁$畻鏈鴻兘璇繪噦鐨勮瑷€  
        String line = ""; 
        line = br.readLine();
        while (line != null) {  
            pw.println(line);
            line = br.readLine();// 涓€娆¤鍏ヤ竴琛屾暟鎹? 
        } 
	}

	
}
</span>
           
鍏朵粬鐨勪唬鐮佸氨涓嶈創浜嗭紝鍥炲ご鏀懼湪github涓婃柟渚跨戶缁涔犮€?/body>