struts簡單入門2——用戶登陸

前一篇blog寫了關於struts2的簡單入門,爲了更好的知道對應關係,跟着書寫一個簡單的用戶登陸的一個東東~~~

開發環境:tomcat7+MyEclipse10+struts2.3

首先準備要用的包:

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.

^_^。。。大概就這樣吧~~~估計自己還得再複習幾次,不多複習幾次肯定又得忘了。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章