Struts(一)

===============================MVC====================================
MVC(Model View Controller)
    1.Model:封裝數據,進行業務處理,返回處理結果
    2.View:展現界面
    3.Controller:接受用戶端請求,將模型和視圖聯繫在一塊兒以實現用戶請求的功能

思路:javascript



==============================Struts===============================
介紹:
    1.Struts2是一個MVC框架。Struts1 + WebWork
    2.Struts2兼容性好
    3.http://struts.apache.org

步驟:
    1.加載類庫
    2.配置Web.xml文件
    3.開發視圖層頁面
    4.開發控制層Action
    5.配置struts.xml文件
    6.部署、運行項目
    
    a.加載的基本jar包:
        struts2-core-xxx.jar        Struts 2框架的核心類庫
        xwork-core-xxx.jar            XWork類庫,Struts 2的構建基礎
        ognl-xxx.jar                Struts 2使用的一種表達式語言類庫
        freemarker-xxx.jar            Struts 2的標籤模板使用類庫
        javassist-xxx.GA.jar        對字節碼進行處理
        commons-fileupload-xxx.jar    文件上傳時須要使用
        commons-io-xxx.jar            Java IO擴展
        commons-lang-xxx.jar        包含了一些數據類型的工具類
        
    b.配置Web.xml css

 1 <filter>
 2         <filter-name>struts2</filter-name>
 3         <filter-class>
 4             org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
 5         </filter-class>
 6 </filter>
 7         
 8 <filter-mapping>
 9         <filter-name>struts2</filter-name>
10         
11         <!--  將所有請求定位到指定的Struts2過濾器中 -->
12         <url-pattern>/*</url-pattern>
13 </filter-mapping>        


Struts2訪問Servlet API -- (即,登陸成功後,使用session保存用戶信息)
    訪問方式:
        1.解耦
            a.對Servlet API進行封裝
                提供了三個Map對象訪問request、session、application做用域
            b.經過ActionContext類獲取這三個Map對象
                1)Object get("request")
                2)Map getSession()
                3)Map getApplication()

        2.耦合
            a.經過ServletActionContext類獲取Servlet API對象
                 1)ServletContext getServletContext()
                 2)HttpServletResponse getResponse()
                 3)HttpServletRequest  getRequest()
                 4)經過request.getSession()獲取session對象
            b.經過xxx.setAttribute()和xxx.getAttribute() 功能,在不一樣的頁面或Action中傳遞數據

數據校驗:
    1.繼承ActionSupport類來完成Action開發
        validate()方法
    2.ActionSupport類不只對Action接口進行簡單實現,同時增長了驗證、本地化等支持

範例:
1.index.jsphtml

 1 <%-- 引入JSP頁面PAGE指令 --%>
 2 <%@ page language="java" contentType="text/html; charset=UTF-8"
 3     pageEncoding="UTF-8"%>
 4 <%-- 引入JSTL標籤指令 --%>
 5 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 6 <!DOCTYPE html>
 7 <html language="zh-CN">
 8 <head>
 9     <meta charset="utf-8">
10     <!-- 設置瀏覽器渲染的引擎  -->
11     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
12     <!-- 設置支持移動設備  -->
13     <meta name="viewport" content="width=device-width, initial-scale=1">
14     <title>網頁標題</title>
15     <!-- 引用bootstrap樣式 -->
16     <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/bootstrap.min.css">
17 </head>
18 <body>
19     <!-- 從session中讀取數據 -->
20     ${sessionScope.loginUser }
21     
22     ${msg }
23     <div class="container-fluid">
24         <form action="hello" method="post">
25             請輸入內容:<input name="msg" type="text" />
26             請輸入內容:<input name="address" type="text" />
27             <input type="submit" value="提交"/>
28         </form>
29     </div>
30     
31     <!-- 引用外部JS文件  -->
32     <script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-2.2.4.js"></script>
33     <script type="text/javascript" src="<%=request.getContextPath() %>/js/bootstrap.min.js"></script>
34 
35 </body>
36 </html>


2.HelloJspAction類java

 1 package com.Elastic.StrutsDemo1.ivy.action;
 2 import com.opensymphony.xwork2.Action;
 3 public class HelloJspAction implements Action{
 4     //與jsp中的屬性name的值同樣
 5     private String msg;
 6     private String address;
 7     
 8     public String getMsg() {
 9         return msg;
10     }
11 
12     public void setMsg(String msg) {
13         this.msg = msg;
14     }
15 
16     public String getAddress() {
17         return address;
18     }
19 
20     public void setAddress(String address) {
21         this.address = address;
22     }
23 
24     /* (non-Javadoc)
25      * @see com.opensymphony.xwork2.Action#execute()
26      */
27     @Override
28     public String execute() throws Exception {
29         System.out.println(msg);
30         System.out.println(address);
31         return "success";
32     }
33 }


3.struts.xmljquery

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     <!-- /:根目錄 -->
 7     <package name="default" namespace="/" extends="struts-default">
 8     
 9         <!-- action中name的值與表單的action屬性值對應  -->
10         
11         <!-- 請求地址:hello  class:action(servlet)地址-->
12         <action name="hello" class="com.Elastic.StrutsDemo1.ivy.action.HelloJspAction">
13             <result name="success">/index.jsp</result>
14         </action>
15         
16         <action name="login" class="com.Elastic.StrutsDemo1.ivy.action.LoginAction">
17             <!-- result中name的與Action中的execute()返回的值同樣  -->
18             <result name="success">/success.jsp</result>
19             
20             <!-- 登陸失敗 -->
21             <result name="error">/error.jsp</result>
22             
23             <!-- 驗證失敗。不會返回validate -->
24             <result name="input">/login.jsp</result>
25         </action>
26         
27     </package>
28 </struts>


4.web.xmlweb

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
 3   <display-name>StrutsDemo1_ivy</display-name>
 4   <welcome-file-list>
 5     <welcome-file>index.html</welcome-file>
 6     <welcome-file>index.htm</welcome-file>
 7     <welcome-file>index.jsp</welcome-file>
 8     <welcome-file>default.html</welcome-file>
 9     <welcome-file>default.htm</welcome-file>
10     <welcome-file>default.jsp</welcome-file>
11   </welcome-file-list>
12  
13   <!-- 配置Struts2的核心過濾器{Controller} -->
14   <!-- 將所有請求定位到指定的Struts2過濾器中  -->
15   <filter>
16       <filter-name>Struts2</filter-name>
17       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class>
18   </filter>
19   <filter-mapping>
20       <filter-name>Struts2</filter-name>
21       <url-pattern>/*</url-pattern>
22   </filter-mapping>
23 </web-app>


5.index.jspchrome

 1 <%-- 引入JSP頁面PAGE指令 --%>
 2 <%@ page language="java" contentType="text/html; charset=UTF-8"
 3     pageEncoding="UTF-8"%>
 4 <%-- 引入JSTL標籤指令 --%>
 5 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 6 <!DOCTYPE html>
 7 <html language="zh-CN">
 8 <head>
 9     <meta charset="utf-8">
10     <!-- 設置瀏覽器渲染的引擎  -->
11     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
12     <!-- 設置支持移動設備  -->
13     <meta name="viewport" content="width=device-width, initial-scale=1">
14     <title>網頁標題</title>
15     <!-- 引用bootstrap樣式 -->
16     <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/bootstrap.min.css">
17 </head>
18 <body>
19     <!-- 從session中讀取數據 -->
20     ${sessionScope.loginUser }
21     
22     ${msg }
23     <div class="container-fluid">
24         <form action="hello" method="post">
25             請輸入內容:<input name="msg" type="text" />
26             請輸入內容:<input name="address" type="text" />
27             <input type="submit" value="提交"/>
28         </form>
29     </div>
30     
31     <!-- 引用外部JS文件  -->
32     <script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-2.2.4.js"></script>
33     <script type="text/javascript" src="<%=request.getContextPath() %>/js/bootstrap.min.js"></script>
34 
35 </body>
36 </html>


6.LoginAction類apache

 1 package com.Elastic.StrutsDemo1.ivy.action;
 2 
 3 import java.util.Map;
 4 
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpSession;
 7 
 8 import org.apache.struts2.ServletActionContext;
 9 
10 import com.Elastic.StrutsDemo1.ivy.entity.User;
11 import com.opensymphony.xwork2.ActionContext;
12 import com.opensymphony.xwork2.ActionSupport;
13 //ActionSupport:數據驗證    override:valid()
14 public class LoginAction extends ActionSupport{
15     /*private String userName;
16     private String userPwd;
17 
18     public String getUserName() {
19         return userName;
20     }
21 
22     public void setUserName(String userName) {
23         this.userName = userName;
24     }
25 
26     public String getUserPwd() {
27         return userPwd;
28     }
29 
30     public void setUserPwd(String userPwd) {
31         this.userPwd = userPwd;
32     }*/
33     
34     //使用hibernate框架,建實體類
35     private User user;
36 
37     public User getUser() {
38         return user;
39     }
40 
41     public void setUser(User user) {
42         this.user = user;
43     }
44 
45     /* (non-Javadoc)
46      * @see com.opensymphony.xwork2.Action#execute()
47      */
48     @Override
49     public String execute() throws Exception {
50         if ("admin".equals(user.getUserName().trim()) && "123456".equals(user.getUserPwd().trim())) {
51             //登陸成功後,登陸信息須要保存在session中
52             
53             //方法1.解耦方式(Map 對象)--推薦使用
54             //從ActionContext中獲取session
55             Map<String, Object> session = ActionContext.getContext().getSession();
56             //以key/value形式保存數據
57             session.put("loginUser", user.getUserName());
58             
59             //方法2.耦合方式(原生Servlet API)--特殊功能
60             /*HttpServletRequest request = ServletActionContext.getRequest();
61             HttpSession session = request.getSession();
62             //setAttribute()的方式保存數據
63             session.setAttribute("loginUser", user.getUserName());*/
64             return SUCCESS;
65         }
66         return ERROR;
67     }
68 
69     @Override
70     public void validate() {
71         if (user.getUserName().trim().length() == 0) {
72             //fieldName:最好是和字段名稱一致
73             this.addFieldError("userName", "用戶名不能爲空!");;
74         }
75     }
76 }


7.User類bootstrap

 1 package com.Elastic.StrutsDemo1.ivy.entity;
 2 
 3 import java.io.Serializable;
 4 public class User implements Serializable{
 5     private String userName;
 6     private String userPwd;
 7     public String getUserName() {
 8         return userName;
 9     }
10     public void setUserName(String userName) {
11         this.userName = userName;
12     }
13     public String getUserPwd() {
14         return userPwd;
15     }
16     public void setUserPwd(String userPwd) {
17         this.userPwd = userPwd;
18     }
19 }


8.success.jsp瀏覽器

 1 <%-- 引入JSP頁面PAGE指令 --%>
 2 <%@ page language="java" contentType="text/html; charset=UTF-8"
 3     pageEncoding="UTF-8"%>
 4 <%-- 引入JSTL標籤指令 --%>
 5 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 6 <!DOCTYPE html>
 7 <html language="zh-CN">
 8 <head>
 9     <meta charset="utf-8">
10     <!-- 設置瀏覽器渲染的引擎  -->
11     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
12     <!-- 設置支持移動設備  -->
13     <meta name="viewport" content="width=device-width, initial-scale=1">
14     <title>網頁標題</title>
15     <!-- 引用bootstrap樣式 -->
16     <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/bootstrap.min.css">
17 </head>
18 <body>
19     
20     <div class="container-fluid">
21         <%-- <h1>${sessionScope.loginUser }登陸成功</h1> --%>
22         <div class="panel panel-primary">
23             <div class="panel-heading">提示信息</div>
24             <div class="panel-body text-center">
25                 登陸成功!<span id="time">10</span>秒後頁面自動跳轉到首頁<br>
26                 若是沒有跳轉,請點擊<a href="index.jsp">此處</a>
27             </div>
28         </div>
29     </div>
30     
31     <!-- 引用外部JS文件  -->
32     <script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-2.2.4.js"></script>
33     <script type="text/javascript" src="<%=request.getContextPath() %>/js/bootstrap.min.js"></script>
34     <script type="text/javascript">
35         var time = 10;
36         function returnPage() {
37             time --;
38             if (time <= 0) {
39                 window.location = 'index.jsp';
40             }
41             $('#time').html(time);
42         }
43         
44         $(function() {
45             window.setInterval(returnPage, 1000);
46         });
47     
48     </script>
49 </body>
50 </html>

 


9.error.jsp

 1 <%-- 引入JSP頁面PAGE指令 --%>
 2 <%@ page language="java" contentType="text/html; charset=UTF-8"
 3     pageEncoding="UTF-8"%>
 4 <%-- 引入JSTL標籤指令 --%>
 5 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 6 <!DOCTYPE html>
 7 <html language="zh-CN">
 8 <head>
 9     <meta charset="utf-8">
10     <!-- 設置瀏覽器渲染的引擎  -->
11     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
12     <!-- 設置支持移動設備  -->
13     <meta name="viewport" content="width=device-width, initial-scale=1">
14     <title>網頁標題</title>
15     <!-- 引用bootstrap樣式 -->
16     <link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css">
17 </head>
18 <body>
19     <div class="container-fluid">
20         <h1>登陸失敗</h1>
21     </div>
22     
23     <!-- 引用外部JS文件  -->
24     <script type="text/javascript" src="../js/jquery-2.2.4.js"></script>
25     <script type="text/javascript" src="../js/bootstrap.min.js"></script>
26 
27 </body>
28 </html>

    標籤:1.將Action的錯誤信息在頁面輸出    <%@ taglib prefix="s" uri="/struts-tags"%>        經常使用表單標籤:        標  籤                                說   明        <s:form>…</s:form>                    表單標籤        <s:textfield>…</s:textfield >        文本輸入框        <s:password>…</s:password >            密碼輸入框        <s:textarea>…</s:textarea >            文本域輸入框        <s:radio>…</s:radio >                單選按鈕        <s:checkbox>…</s:checkbox >            多選框        <s:submit />                        提交標籤        <s:reset />                            重置標籤        <s:hidden />                        隱藏域標籤2.使用Struts 2標籤在頁面中實現邏輯控制    a.使用Struts 2的通用標籤    b.條件判斷標籤    c.迭代標籤    經常使用通用標籤:        名稱                        標  籤                            說   明        條件標籤                <s:if>……</s:if>                    根據表達式的值,        判斷將要執行的內容        <s:elseif>……</s:elseif>                                <s:else>……</s:else>        迭代                    <s:iterator>……</s: iterator >    用於遍歷集合【注意:在實際開發中爲了知足用戶日益多變的需求。推薦使用原生的HTML以及EL表達式和JSTL標籤來完成這些功能】

相關文章
相關標籤/搜索