===============================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標籤來完成這些功能】