1.P132例子java
long before = System.currentTimeMillis();web
保存filter類做用開始時間,用來顯示filter類做用範圍瀏覽器
long after = System.currentTimeMillis();安全
保存filter類做用結束時間,用來顯示filter類做用範圍服務器
ServletContext context = this.config.getServletContext();cookie
獲取ServletContext對象,用於記錄日誌session
HttpServletRequest hrequest = (HttpServletRequest)request;app
將ServletRequest請求強制轉換成HttpServletRequest請求異步
System.out.println("Filter已經截獲到用戶的請求的地址: " +hrequest.getServletPath());jsp
經過.getServletPath()方法返回一個URL對象,獲得用戶請求的地址,fliler類只是在用戶發送請求後將用戶請求的地址顯示出來
filter用戶受權例子
LoginFilter.java
public class LoginFilter implements Filter {
private String permitUrls[] = null;
private String gotoUrl = null;
public void destroy() {
// TODO Auto-generated method stub
permitUrls = null;
gotoUrl = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest res=(HttpServletRequest) request;
HttpServletResponse resp=(HttpServletResponse)response;
if(!isPermitUrl(request)){
if(filterCurrUrl(request)){
System.out.println("--->請登陸");
resp.sendRedirect(res.getContextPath()+gotoUrl);
return;
}
}
System.out.println("--->容許訪問");
chain.doFilter(request, response);
}
public boolean filterCurrUrl(ServletRequest request){
boolean filter=false;
HttpServletRequest res=(HttpServletRequest) request;
User user =(User) res.getSession().getAttribute("user");
if(null==user)
filter=true;
return filter;
}
public boolean isPermitUrl(ServletRequest request) {
boolean isPermit = false;
String currentUrl = currentUrl(request);
if (permitUrls != null && permitUrls.length > 0) {
for (int i = 0; i < permitUrls.length; i++) {
if (permitUrls[i].equals(currentUrl)) {
isPermit = true;
break;
}
}
}
return isPermit;
}
//請求地址
public String currentUrl(ServletRequest request) {
HttpServletRequest res = (HttpServletRequest) request;
String task = request.getParameter("task");
String path = res.getContextPath();
String uri = res.getRequestURI();
if (task != null) {// uri格式 xx/ser
uri = uri.substring(path.length(), uri.length()) + "?" + "task="
+ task;
} else {
uri = uri.substring(path.length(), uri.length());
}
System.out.println("當前請求地址:" + uri);
return uri;
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
String permitUrls = filterConfig.getInitParameter("permitUrls");
String gotoUrl = filterConfig.getInitParameter("gotoUrl");
this.gotoUrl = gotoUrl;
if (permitUrls != null && permitUrls.length() > 0) {
this.permitUrls = permitUrls.split(",");
}
}
}
Web.xml
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>filter.LoginFilter</filter-class>
<init-param>
<param-name>ignore</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>permitUrls</param-name>
<param-value>/,/servlet/Loginservlet?task=login,/public.jsp,/login.jsp</param-value>
</init-param>
<init-param>
<param-name>gotoUrl</param-name>
<param-value>/login.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
引用地址:http://www.jb51.net/article/38730.htm
2.session
定義:具體到Web中的Session指的就是用戶在瀏覽某個網站時,從進入網站到關閉瀏覽器所通過的這段時間,也就是用戶瀏覽這個網站所花費的時間。所以從上述的定義中咱們能夠看到,Session其實是一個特定的時間概念。
用途:Session 對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序的 Web 頁之間跳轉時,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。
session in JEE:
Java Servlet API引入session 機制來跟蹤客戶的狀態,session指的是在一段時間內,單個客戶和web服務器之間一連串的交互過程,在一個session中,一個客戶可能會屢次請求同一個網頁,也可能請求多個不一樣服務器資源,例如:在一個郵件系統應用中,從一個客戶登陸到郵件系統,到寫信,收信和發信等,到最後退出郵件系統,整個過程爲一個session;再例如:你們在網上購物的時候,從購物到最後的付款,整個過程也是一個session 。
session對像是jsp中的內置對象,能夠直接使用;在Servlet中使用session時,必須先建立出該對象,Servlet中建立session的方法:
HttpSession session=request.getSession();或 HttpSession session=request.getSession(boolean value);
在服務器上,經過session ID來區分每個請求服務器的用戶,用戶只要一鏈接到服務器,服務器就會爲之分配一個惟一的不會重複的session ID,session ID由服務器統一管理,人爲不能控制
session中的主要方法:
session.getId();//獲取session ID,長度爲32位
session.isNew();//判斷是不是新創建的session
session.getCreationTime();//獲取session建立的時間
session.getLastAccessedTime();//獲取用戶最後操做時間
sesson.setAttribute(String key,Object value);//將對象存到session中
session.getAttribute(String key);//獲取session中存的Object對象
session.removeAttribute(String key);//將鍵值爲key的對象從session中刪除
session的銷燬
web容器關閉或重啓,session會死亡
調用session.invalidate();方法,強制session死亡
先後兩次請求超過了session指定的生命週期時間,默認爲30分鐘,咱們能夠經過在web.xml文件中進行以下配置:
Xml代碼
<session-config>
<session-timeout>5</session-timeout>
</session-config>
也能夠調用session.setMaxInactiveInterval(int intelval);方法來設置,單位爲秒
轉載地址: https://blog.csdn.net/u013510614/article/details/50480993
session與cookie的區別:1.Session將信息保存在服務器上,而Cookie保存在客戶端上。2.Session比Cookie更安全,Session比Cookie更佔資源。3.session使用cookie的機制,若是cookie被禁用,那麼session也沒法使用,由於session ID是以cookie的形式保存在客戶端的內存當中
3.JEETT
異步例子區別:
1.註釋時asyncSupported=true,顯式指定開啓異步調用
2.
request.startAsync()
致使請求被異步處理; 在服務方法結束時,響應不會發送到客戶端。
3.acontext.start(new Runnable() {…})
從容器中獲取新線程。
4.run()
內部類的方法內的代碼在新線程中執行。內部類能夠訪問異步上下文以從請求讀取參數並寫入響應。調用complete()
異步上下文的 方法將提交響應並將其發送給客戶端。
運行效果不一樣之處:使用異步處理後的例子在大負載的狀況下響應速度變快,服務器吞吐量變大