當用戶成功登錄了以後,應該跳轉到他們的主頁,而後在他的主界面進行它可以進行的業務操做。並且應該將他的們的頁面分開,由於我若是不是經過 object-j或者使用javascript動態生成頁面的話,用戶能夠經過查看頁面源代碼來看到頁面全部操做。因此將主頁建成統一主頁是好的,這樣可 以減小建設網站的時間和頁面地址數量。可是缺點一樣明顯,除了上面說的以外,還增長了額外的服務器解析負擔,頁面響應速度慢,代碼穩定性弱。總之,我決定 主頁使用分開的頁面,或許會寫不少重複代碼,調用重複方法,可是是值得的。javascript
那麼先修改登陸界面~修改ManageUserAction.java裏面的login()函數,並將用戶登陸信息存儲到session裏面css
/* * This method is used to the login JSP, include the operations of call * database and do validation. */ public String login() throws Exception { // Put all information of this user saved in the database to // session by key user_login ActionContext.getContext().getSession().put("user_login", this.user); EnumSet<Role> rolesSet = EnumSet.allOf(Role.class); for (Role role : rolesSet) { if(this.user.getRole().equals(role.toString())){ return role.toString().toUpperCase(); } } return INPUT; }
順便修改了validate方法,把對空值的斷定加在了前面,這樣避免了nullpointexception。算是bug修復。java
public void validateLogin() { this.clearActionErrors(); if (null == this.user) { this.addActionError("User name must not be empty"); return; } // Judge the the name input by whether it is empty. if (null == this.user.getName() || this.user.getName() == "") { this.addActionError("User name must not be empty"); } else { // Judge the pre_password input by whether it it empty. if (null == this.user.getPre_password() || this.user.getPre_password().isEmpty()) { this.addActionError("Password must not be empty"); } else { // Change pre_password into password String md5Password; try {md5Password = MD5EncrypterUtil.getMD5( this.user.getPre_password()); this.user.setPassword(md5Password); // Judge the input name and password by whether they are accord // with the database. this.user = this.service.login(this.user); if (null == this.user) { this.addActionError("User name or Password error"); this.user = null; } else { // Do Nothing } } catch (Exception e) { e.printStackTrace(); } } } }
我返回的是角色信息,是一個String類型。由於ACtion的返回值必須是String類型,我調用了一個toUpperCase方法,防止用戶輸入錯誤的角色大小寫。web
在用戶登陸的時候,咱們現實下welcome:***就能夠去session取值,咱們作攔截器,攔截用戶行爲的時候,就經過判斷session裏面存儲 的用戶信息。好比session裏面判斷用戶爲SMS,那麼它想訪問SUP的界面的話,咱們就讓他返回登陸。這就是攔截器的通常使用的小例子。咱們當用戶 登陸10分鐘不動做時候,讓session超時(在配置web.xml裏面寫的),清空session,那麼用戶再進行操做,咱們攔截它,發現沒 session,就讓他返回登陸。等等。。。session能夠理解爲存儲在內存裏面的一個臨時的數據塊。至關於一個記事本。嗯名能夠這麼理解。服務器
而後進入struts.xml,修改LoginAction的響應:session
<action name="login" class="ManageUserAction" method="login"> <result name="input">/WEB-PAGE/Login.jsp</result> <result name="SUP">/WEB-PAGE/SUP-PAGES/Homepage_SUP.jsp</result> <result name="SMM">/WEB-PAGE/SMM-PAGES/Homepage_SMM.jsp</result> <result name="SMS">/WEB-PAGE/SMS-PAGES/Homepage_SMS.jsp</result> <result name="MS">/WEB-PAGE/MS-PAGES/Homepage_MS.jsp</result> <result name="SS">/WEB-PAGE/SS-PAGES/Homepage_SS.jsp</result> </action>
效果如圖jsp
這樣,獲得不一樣角色後就進入不一樣頁面。固然須要在制定的目錄創建jsp頁面,咱們先暫時創建一個幾個空白的頁面,在最後纔會去修改和完善。實際上咱們這樣 跳轉,會存在一個url地址混亂的問題,由於咱們login.jsp是在根目錄,進入action後,會繼續在根目錄。可是咱們跳轉到具體home目錄 後,會將url制定到其所在目錄,那麼,咱們的css樣式和javascript函數就會很差加載。固然我會在後面寫頁面的時候給出解決方案。函數