程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> SSH框架網上商城項目第18戰之過濾器完成購物登錄功效的斷定

SSH框架網上商城項目第18戰之過濾器完成購物登錄功效的斷定

編輯:關於JAVA

SSH框架網上商城項目第18戰之過濾器完成購物登錄功效的斷定。本站提示廣大學習愛好者:(SSH框架網上商城項目第18戰之過濾器完成購物登錄功效的斷定)文章只能為提供參考,不一定能成為您想要的結果。以下是SSH框架網上商城項目第18戰之過濾器完成購物登錄功效的斷定正文


上一節我們做完了購物車的根本操作,然則有個成績是:當用戶點擊結算時,我們應當做一個登錄的斷定,斷定用戶有無登錄,沒有登錄的話,得起首讓用戶登錄。這就用到了過濾器的技巧了,過濾器是專門攔阻頁面要求的,它與攔阻器的道理差不多,攔阻器是專門攔阻Action要求的,所以各有所用,假如直接是頁面的跳轉,不經由Action的話,我們只需寫一個攔阻器便可,假如須要跳轉到一個Action處置,那末我們就得寫一個攔阻器。
1. 登錄跳轉的道理
先說一下完成道理:寫一個過濾器,在web.xml中設置裝備擺設一下須要攔阻的url,如許的話,當用戶的要求url中知足設置裝備擺設的話,就會履行我們本身寫的過濾器,在過濾器中,我們起首檢討session中有無登錄過的user,假如沒有解釋沒有登錄,然後拿到用戶想要拜訪的頁面url和參數,從新拼接成url放到session中,然後重定向到上岸頁面,登錄後跳轉到Action處置,處置完後跳轉到session中保留的url,即本來用戶想去的處所。如許就完成了上岸的跳轉了。

2. 登錄跳轉的完成
當實際購物車頁面後,我們點擊結賬,它會主動跳轉到定單確認的頁面,以下:

然則此時假如用戶沒登錄,我們確定不克不及直接跳到定單確認頁面,所以我們要用過濾器攔上去斷定一下,上面寫過濾器:
2.1 過濾器的完成
過濾器的完成要完成Filter接口,並覆寫三個辦法便可,其實我們重要要覆寫個中一個辦法便可。以下:

public class UserFilter implements Filter { 
 
 @Override 
 public void destroy() { 
  // TODO Auto-generated method stub 
 
 } 
 
 @Override 
 public void doFilter(ServletRequest request, ServletResponse response, 
   FilterChain chain) throws IOException, ServletException { 
  HttpServletRequest req = (HttpServletRequest) request; 
  HttpServletResponse res = (HttpServletResponse) response; 
  // 斷定以後session能否有效戶信息 
  if(req.getSession().getAttribute("user") == null) { 
   //保留以後客戶想要去的url地址 
   String goURL = req.getServletPath();//取得用戶想要去的地址 
   String param = req.getQueryString(); //取得地址中攜帶的參數 
   if(param != null) { 
    goURL = goURL + "?" + param; //從新拼好要求地址+參數 
   } 
   //把以後客戶想要拜訪的地址,存儲到session中 
   req.getSession().setAttribute("goURL", goURL); 
    
   //不法要求,跳轉到上岸頁面 
   req.getSession().setAttribute("error", "不法要求,請登錄!"); 
   res.sendRedirect(req.getContextPath() + "/ulogin.jsp"); 
  } else { 
   //假如有下一個過濾器則跳轉,不然直接到目的頁面 
   chain.doFilter(request, response); 
  } 
 } 
 
 @Override 
 public void init(FilterConfig config) throws ServletException { 
  // TODO Auto-generated method stub 
 
 } 
} 

從完成的代碼來看,重要腹瀉了doFilter辦法,在辦法裡,起首斷定以後session中能否有效戶的信息,假如沒有,解釋沒有登錄,那末要先將用戶想要去的url地址和地址中的參數保留上去,拼成新的url存到session中,然後重定向到上岸頁面,讓用戶上岸。假如session中有效戶信息,解釋曾經登錄過了,直接放行到用戶想去的頁面。
寫好了Filter,別忘了在web.xml中設置裝備擺設要過濾的url,設置裝備擺設以下:

所以會過濾下面的${shop}/user/confirm.jsp。接上去我們看看上岸頁面,其實就是兩個框框,用戶名和暗碼,重要看它跳到哪一個Action去:

我們看到,它跳轉到了userAction中的login辦法去履行邏輯。上面我們完成userAction:
2.2 Action的完成
在userAction中,我們起首停止上岸的斷定,即在數據庫中查找有無該用戶名和暗碼的用戶,假如勝利,則將user存到session中,然後前往一個成果,交給struts2處置,代碼以下:

@Controller("userAction") 
@Scope("prototype") 
public class UserAction extends BaseAction<User> { 
 public String login() { 
  //停止上岸的斷定 
  model = userService.login(model); 
  if(model == null) { 
   session.put("error", "上岸掉敗"); 
   return "login"; 
  } else { 
   //登錄勝利,先將用戶存儲到session中 
   session.put("user", model); 
   //依據session中goURL能否有值而決議頁面的跳轉 
   if(session.get("goURL") == null) { 
    return "index"; //跳到首頁 
   } else { 
    return "goURL"; 
   } 
  } 
 } 
} 

我們看看struts.xml中的設置裝備擺設:

由於我們把goURL存在session中了,然則在struts.xml中我們不克不及像在java代碼裡去拿session,然後拿參數,然則我們可以從值棧中取,下面是從值棧中取數據的辦法。
2.3 Service層的上岸斷定
Service層重要就是下面Action頂用到的login辦法,完成比擬簡略,以下:

//userService接口 
public interface UserService extends BaseService<User> { 
 //用戶上岸,勝利前往該User 
 public User login(User user); 
} 
 
//userServiceImpl完成類 
@Service("userService") 
public class UserServiceImpl extends BaseServiceImpl<User> implements 
  UserService { 
 
 @Override 
 public User login(User user) { 
  String hql = "from User u where u.login=:login and u.pass=:pass"; 
  return (User) getSession().createQuery(hql) // 
   .setString("login", user.getLogin()) // 
   .setString("pass", user.getPass()) // 
   .uniqueResult(); 
 } 
 
} 

好了,如許我們用過濾器完成了用戶登錄的斷定與跳轉,上岸事後,就可以跳轉到定單確認頁面了,後果以下:

全部流程測試終了,功效正常。其實這裡還可以再完美一點,我們其實應當在參加購物車之前就應當要停止登錄斷定,也就是說,購物車頁面的時刻曾經是登錄狀況了,這裡是定單確認頁面斷定登錄的。不外在購物車頁眼前停止斷定的話,我們就欠好用過濾器了,我們得用攔阻器,由於跳轉到購物車頁面要求的是Action,不是通俗頁面,要求Action的時刻我們得用攔阻器攔阻來斷定,前期再來完美這裡吧,如今先把這裡的功效根本完成了再說~好了,登錄斷定與跳轉就做好了。

原文地址:http://blog.csdn.net/eson_15/article/details/51425010

以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved