前一篇blog寫了關於struts2的簡單入門,為了更好的知道對應關係,跟著書寫一個簡單的使用者登陸的一個東東~~~
開發環境:tomcat7+MyEclipse10+struts2.3
首先準備要用的包:
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1424403526-0.jpg" title="捕獲.JPG" alt="140547644.jpg" />
1)配置web.xml檔案通過項目右鍵MyEclipse的add struts capabilities方法也可以快速地產生)
<filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class></filter><filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern></filter-mapping></web-app>
2)登陸頁面login.jsp,註冊成功跳轉頁面registUsrWelcome.jsp和管理員成功登陸頁面adminWelcome.jsp
/anli/login.jsp
<!-- 如果是/test.action,會尋找根命名空間"/"中尋找名為test的action --><form action="usrLoginAction.action" method="post"><!--這裡是一個table,放使用者名稱,密碼,提交按鈕--></form>
/anli/registUsrWelcom.jsp和/anli/adminWelcome.jsp放不同的提示成功登入資訊~
Usr.java
private Integer id;private String username;private String password;//放它們的get和set方法
DBConn.java
static Connection getConnection(){ Connection conn = null; try{ Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/anli"; String username="root"; String password=""; conn = DriverManager.getConnection(url, username, password); }catch(ClassNotFoundException e){ System.out.println("==========驅動找不到==========="); }catch(SQLException e){ System.out.println("==========獲得資料庫連接失敗============"); } return conn;} //dbClose(Connection conn,Statement st,ResultSet rs)方法只要不為空白close
UsrDAO.java
public class UsrDAO { private Connection conn; private PreparedStatement ps; private ResultSet rs; /** * 根據使用者名稱 密碼 查詢使用者 登陸方法 */ public Usr checkUsr(String username, String password){ Usr u = null; String sql="select * from user u where u.username=? and u.password=?"; try{ conn = DBConn.getConnection(); ps = conn.prepareStatement(sql); ps.setString(1, username); ps.setString(2, password); rs = ps.executeQuery(); while(rs.next()){ u = new Usr(); u.setId(rs.getInt("id")); u.setUsername(rs.getString("username")); u.setSuperuser(rs.getString("superuser")); } }catch(SQLException e){ e.printStackTrace(); }finally{ DBConn.dbClose(conn, ps, rs); } return u; }}
UsrLoginAction.java
頁面展現使用者列表的處理結果集合:private ArrayList dataList;
主要的是execute()方法
public String execute()throws Exception{ UsrDAO dao = new UsrDAO(); Usr u = dao.checkUsr(username, password); if(u == null)return "anli_error"; else{//登陸成功,這裡開始判斷許可權 ,將使用者儲存到session ActionContext.getContext().getSession().put("usr", u); String superuser = u.getSuperuser(); if(superuser.equals("1"))//普通註冊使用者 return "anli_success_1"; else if(superuser.equals("2"))//分配了能看到某些藥品價格的使用者 return "anli_success_2"; else//admin因為第一次來此頁面,設定頁面數為1 return "anli_success_3"; }}
最後在struts.xml中配置Action
<struts><!-- struts2使用包來組織Action。 --> <package name="struts2" extends="struts-default"> <!-- struts2的action名字就是它所處理的URL的前半部分。name屬性既是該Action的名字頁式它需要處理的URL的一部分,class指定實作類別 --> <action name="login" class="com.ascent.struts2.action.LoginAction"> <result name="error">/error.jsp</result><!-- 配置邏輯視圖和物理視圖之間的一次映射 --> <result name="sucess">/welcome.jsp</result> </action> <action name="usrLoginAction" class="com.ascent.action.UsrLoginAction"> <result name="anli_success_1">/anli/registUsrWelcome.jsp</result> <result name="anli_success_2">/anli/registUsrWelcome.jsp</result> <result name="anli_success_3">/anli/adminWelcome.jsp</result> <result name="anli_error">/anli/login.jsp</result> </action> </package> </struts>
===================================================
補充一下,結合c標籤庫的用法
查詢所有使用者
/anli/adminWelcome.jsp
<a href="findAllusrManagerAction.action">使用者管理</a>
UsrDAO.java
public List<Usr> findAllUsr(){ List<Usr>list = new ArrayList<Usr>(); Usr u = null; String sql = "select * from user"; try{ conn = DBConn.getConnection(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ u = new Usr(); u.setId(rs.getInt("id")); u.setUsername(rs.getString("username")); u.setSuperuser(rs.getString("superuser")); list.add(u); } }catch(SQLException e){ e.printStackTrace(); }finally{ DBConn.dbClose(conn, ps, rs); } return list;}
UsrManagerAction.java中查詢所有使用者findAll功能方法
public String findAll(){ UsrDAO dao = new UsrDAO(); //查詢所有使用者的方法,返回使用者集合 List<Usr> list = dao.findAllUsr(); //將使用者集合儲存在ActionContext ActionContext.getContext().put("allUsr", list); return "anli_showusr";}
struts.xml配置
<!-- 如果這裡寫錯了會配置不成功 --><action name="*usrManagerAction" class="com.ascent.action.UsrManagerAction" method="{1}"> <result name="anli_showusr">/anli/admin_showusr.jsp</result></action>
admin_showusr.jsp
<c:forEach items="${allUsr}" var="list"> <tr> <td>${list.id}</td> <td>${list.username}</td> <td> <c:if test="${list.superuser=='1'}">普通使用者</c:if> <c:if test="${list.superuser=='2'}">進階使用者</c:if> <c:if test="${list.superuser=='3'}">管理員</c:if> </td> </tr></c:forEach>
記得加上下面的,引入c標籤庫
<%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core" %><%@ page isELIgnored="false" %>
再來分析一下struts.xml的配置和整個跳轉的關係:
首先admin進入adminWelcom.jsp後,可以點擊“使用者管理”,
然後跳轉到action="findAllusrManagerAction"
這時應該怎麼跳轉呢?通過尋找struts.xml的設定檔,這時發現*usrManagerAction可以將這個action抓取下來感覺這樣說。。。)這時action到了這步,找到對應的class進行載入,調用的method為"{1}",{1}對應*號的內容,也就是尋找這個class下對應的findAll方法。
findAll方法調用dao層和資料庫jdbc串連相關的層)的findAllUsr方法得到list。將這個list放到session中ActionSupport.put("allUsr",list)
這時返回anli_showusr,struts.xml設定檔尋找該Action的返回結果,頁面跳轉到/anli/admin_showusr.jsp.
^_^。。。大概就這樣吧~~~估計自己還得再複習幾次,不多複習幾次肯定又得忘了。。。
本文出自 “再累也要開心D” 部落格,請務必保留此出處http://zhangzhang.blog.51cto.com/6250085/1303070