国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

第28天(就業班) 自定義mvc框架、Struts入門及執行流程、環境搭建

2019-11-08 02:35:24
字體:
來源:轉載
供稿:網友
1.自定義mvc框架寫一個mystruts框架Mvc模式:Model 模型 View 試圖 Control 控制器Control,  控制器Servlet起到控制器作用!----》 獲取請求數據封裝【BeanUtils可以優化,(調用方法?)】----》 調用Service處理業務邏輯        ----》 跳轉(轉發/重定向)              【跳轉代碼寫死】傳統mvc開發總結:1. 跳轉代碼寫死,不靈活2. 每次都去寫servlet,web.xml中配置servlet!

(配置目的: 請求, Servlet處理類)

package com.xp.entity;public class User {	PRivate String name;	private String pwd;	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getPwd() {		return pwd;	}	public void setPwd(String pwd) {		this.pwd = pwd;	}}package com.xp.dao;import com.xp.entity.User;/** * 用戶登陸、注冊 */public class UserDao {	// 模擬登陸	public User login(User user){		if ("tom".equals(user.getName()) && "888".equals(user.getPwd()) ){			// 登陸成功			return user;		}		// 登陸失敗		return null;	}		// 模擬注冊	public void register(User user) {		System.out.println("注冊成功:用戶," + user.getName());	}}package com.xp.service;import com.xp.dao.UserDao;import com.xp.entity.User;public class UserService {	private UserDao ud = new UserDao();	// 模擬登陸	public User login(User user){		return ud.login(user);	}		// 模擬注冊	public void register(User user) {		ud.register(user);	}}package com.xp.framework.action;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.xp.entity.User;import com.xp.service.UserService;/** * Action表示動作類 1. 一個servlet對應一個action 2. action中負責處理具體的請求*  */public class LoginAction {		public Object execute(HttpServletRequest request, HttpServletResponse response)	throws ServletException, IOException {		return null;	}	/**	 * 處理登陸請求	 */	public Object login(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		Object uri = null;		// 1. 獲取請求數據,封裝		String name = request.getParameter("name");		String pwd = request.getParameter("pwd");		User user = new User();		user.setName(name);		user.setPwd(pwd);		// 2. 調用Service		UserService userService = new UserService();		User userInfo = userService.login(user);		// 3. 跳轉		if (userInfo == null) {			// 登陸失敗//			request.getRequestDispatcher("/login.jsp").forward(request,//					response);//			uri = request.getRequestDispatcher("/login.jsp");			uri = "loginFaild";   // loginFaild  = /login.jsp		} else {			// 登陸成功			request.getsession().setAttribute("userInfo", userInfo);			// 首頁//			response.sendRedirect(request.getContextPath() + "/index.jsp");//			uri = "/index.jsp";			uri = "loginSuccess";  // loginSuccess = /index.jsp		}		return uri;	}}package com.xp.framework.action;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.xp.entity.User;import com.xp.service.UserService;public class RegisterAction {	public Object register(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		Object uri;		// 1. 獲取請求數據,封裝		String name = request.getParameter("name");		String pwd = request.getParameter("pwd");		User user = new User();		user.setName(name);		user.setPwd(pwd);		// 2. 調用Service		UserService userService = new UserService();		userService.register(user);		// 3. 跳轉//		request.getRequestDispatcher("/login.jsp").forward(request, response);		//uri = request.getRequestDispatcher("/login.jsp");		return "registerSuccess"; //返回注冊的標記;   registerSuccess = /login.jsp	}}package com.xp.framework.bean;public class Result {	// 跳轉的結果標記		private String name;		// 跳轉類型,默認為轉發; "redirect"為重定向		private String type;		// 跳轉的頁面		private String page;		public String getName() {			return name;		}		public void setName(String name) {			this.name = name;		}		public String getType() {			return type;		}		public void setType(String type) {			this.type = type;		}		public String getPage() {			return page;		}		public void setPage(String page) {			this.page = page;		}	}package com.xp.framework.bean;import java.util.Map;/** * 封裝action節點 *      <action name="login" class="com.xp.framework.action.LoginAction" method="login">			<result name="success" type="redirect">/index.jsp</result>			<result name="loginFaild">/login.jsp</result>		</action>		* */public class ActionMapping {	// 請求路徑名稱	private String name;	// 處理aciton類的全名	private String className;	// 處理方法	private String method;	// 結果視圖集合	private Map<String,Result> results;		public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getClassName() {		return className;	}	public void setClassName(String className) {		this.className = className;	}	public String getMethod() {		return method;	}	public void setMethod(String method) {		this.method = method;	}	public Map<String, Result> getResults() {		return results;	}	public void setResults(Map<String, Result> results) {		this.results = results;	}	}package com.xp.framework.bean;import java.io.InputStream;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;/** * 加載配置文件, 封裝所有的真個mystruts.xml * */public class ActionMappingManager {	// 保存action的集合	private Map<String,ActionMapping> allActions ;		public ActionMappingManager(){		allActions = new HashMap<String,ActionMapping>();		// 初始化		this.init();	}		/**	 * 根據請求路徑名稱,返回Action的映射對象	 * @param actionName   當前請求路徑	 * @return             返回配置文件中代表action節點的AcitonMapping對象	 */	public ActionMapping getActionMapping(String actionName) {		if (actionName == null) {			throw new RuntimeException("傳入參數有誤,請查看struts.xml配置的路徑。");		}				ActionMapping actionMapping = allActions.get(actionName);		if (actionMapping == null) {			throw new RuntimeException("路徑在struts.xml中找不到,請檢查");		}		return actionMapping;	}		// 初始化allActions集合	private void init() {		/********DOM4J讀取配置文件***********/		try {			// 1. 得到解析器			SAXReader reader = new SAXReader();			// 得到src/mystruts.xml  文件流			InputStream inStream = this.getClass().getResourceAsStream("/mystruts.xml");			// 2. 加載文件			Document doc = reader.read(inStream);						// 3. 獲取根			Element root = doc.getRootElement();						// 4. 得到package節點			Element ele_package = root.element("package");						// 5. 得到package節點下,  所有的action子節點			List<Element> listAction = ele_package.elements("action");						// 6.遍歷 ,封裝			for (Element ele_action : listAction) {				// 6.1 封裝一個ActionMapping對象				ActionMapping actionMapping = new ActionMapping();				actionMapping.setName(ele_action.attributeValue("name"));				actionMapping.setClassName(ele_action.attributeValue("class"));				actionMapping.setMethod(ele_action.attributeValue("method"));								// 6.2 封裝當前aciton節點下所有的結果視圖				Map<String,Result> results = new HashMap<String, Result>();								// 得到當前action節點下所有的result子節點				 Iterator<Element> it = ele_action.elementIterator("result");				 while (it.hasNext()) {					 // 當前迭代的每一個元素都是 <result...>					 Element ele_result = it.next();					 					 // 封裝對象					 Result res = new Result();					 res.setName(ele_result.attributeValue("name"));					 res.setType(ele_result.attributeValue("type"));					 res.setPage(ele_result.getTextTrim());					 					 // 添加到集合					 results.put(res.getName(), res);				 }								// 設置到actionMapping中				actionMapping.setResults(results);								// 6.x actionMapping添加到map集合				allActions.put(actionMapping.getName(), actionMapping);			}								} catch (Exception e) {			throw new RuntimeException("啟動時候初始化錯誤",e);		}	}}package com.xp.framework;import java.io.IOException;import java.lang.reflect.Method;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.xp.framework.bean.ActionMapping;import com.xp.framework.bean.ActionMappingManager;import com.xp.framework.bean.Result;/** * 核心控制器,此項目只有這一個servlet * 1. 攔截所有的*.action為后綴的請求 * 2. 請求:http://localhost:8080/mystruts/login.action * 		  http://localhost:8080/mystruts/register.action */public class ActionServlet extends HttpServlet{	private ActionMappingManager actionMappingManager;		// 只執行一次  (希望啟動時候執行)	@Override	public void init() throws ServletException {		System.out.println("1111111111111111ActionServlet.init()");		actionMappingManager = new ActionMappingManager();	}	// http://localhost:8080/mystruts/login.action	@Override	protected void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {				try {			// 1. 獲取請求uri, 得到請求路徑名稱   【login】			String uri = request.getRequestURI();			// 得到 login			String actionName=uri.substring(uri.lastIndexOf("/")+1, uri.indexOf(".action"));						// 2. 根據路徑名稱,讀取配置文件,得到類的全名   【cn..action.LoginAction】			ActionMapping actionMapping = actionMappingManager.getActionMapping(actionName);			String className = actionMapping.getClassName();						// 當前請求的處理方法   【method="login"】			String method = actionMapping.getMethod();						// 3. 反射: 創建對象,調用方法; 獲取方法返回的標記			Class<?> clazz = Class.forName(className);			Object obj = clazz.newInstance();  //LoginAction loginAction = new LoginAction();			Method m = clazz.getDeclaredMethod(method, HttpServletRequest.class,HttpServletResponse.class );			// 調用方法返回的標記			String returnFlag =  (String) m.invoke(obj, request, response);						// 4. 拿到標記,讀取配置文件得到標記對應的頁面 、 跳轉類型			Result result = actionMapping.getResults().get(returnFlag);			// 類型			String type = result.getType();			// 頁面			String page = result.getPage();						// 跳轉			if ("redirect".equals(type)) {				response.sendRedirect(request.getContextPath() + page);			} else {				request.getRequestDispatcher(page).forward(request, response);			}		} catch (Exception e) {			e.printStackTrace();		}	}			@Override	protected void doPost(HttpServletRequest req, HttpServletResponse resp)			throws ServletException, IOException {		doGet(req, resp);	}}package com.xp.servlet;import java.io.IOException;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.xp.framework.action.LoginAction;// 控制器public class LoginServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		// 創建Action對象,調用登陸方法		LoginAction loginAction = new LoginAction();		Object uri = loginAction.login(request, response);		// 跳轉		if (uri instanceof String) {			response.sendRedirect(request.getContextPath() + uri.toString());		} else {			((RequestDispatcher) uri).forward(request, response);		}	}	public void doPost(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		this.doGet(request, response);	}}package com.xp.servlet;import java.io.IOException;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.xp.framework.action.RegisterAction;public class RegisterServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		RegisterAction registerAction = new RegisterAction();		Object uri = registerAction.register(request, response);				// 配置文件---》jsp				// 跳轉		if (uri instanceof String) {			response.sendRedirect(request.getContextPath() + uri.toString());		} else {			((RequestDispatcher)uri).forward(request, response);		}	}	public void doPost(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		this.doGet(request, response);	}}<?xml version="1.0" encoding="UTF-8"?><mystruts>	<package>		<!-- 配置請求路徑,與處理action類的關系 -->		<!-- 			1. 請求路徑與處理Action的關系			     /login = LoginAction                          login			            success = /index.jsp                     登陸成功(重定向)			            loginFaild  = /login.jsp                 登陸失敗		 -->		<action name="login" class="com.xp.framework.action.LoginAction" method="login">			<result name="loginSuccess" type="redirect">/index.jsp</result>			<result name="loginFaild">/login.jsp</result>		</action>				<action name="register" class="com.xp.framework.action.RegisterAction" method="register">			<result name="registerSuccess">/login</result>		</action>	</package></mystruts><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>index</title>	<meta http-equiv="pragma" content="no-cache">	<meta http-equiv="cache-control" content="no-cache">	<meta http-equiv="expires" content="0">    	<meta http-equiv="keyWords" content="keyword1,keyword2,keyword3">	<meta http-equiv="description" content="This is my page">	<!--	<link rel="stylesheet" type="text/CSS" href="styles.css">	-->  </head>  <body>    歡迎你,${sessionScope.userInfo.name }  </body></html><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>        <title>login</title>	<meta http-equiv="pragma" content="no-cache">	<meta http-equiv="cache-control" content="no-cache">	<meta http-equiv="expires" content="0">    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">	<meta http-equiv="description" content="This is my page">	<!--	<link rel="stylesheet" type="text/css" href="styles.css">	-->  </head>    <body>   	<form action="${pageContext.request.contextPath }/login.action" name="frmLogin"  method="post">   	   用戶名: <input type="text" name="name"> <br/>   	 密碼: <input type="text" name="pwd"> <br/>   	   <input type="submit" value="登陸"> <br/>   	</form>  </body></html><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>        <title>login</title>	<meta http-equiv="pragma" content="no-cache">	<meta http-equiv="cache-control" content="no-cache">	<meta http-equiv="expires" content="0">    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">	<meta http-equiv="description" content="This is my page">	<!--	<link rel="stylesheet" type="text/css" href="styles.css">	-->  </head>    <body>   	<form action="${pageContext.request.contextPath }/register.action" name="frmRegister"  method="post">   	   用戶名: <input type="text" name="name"> <br/>   	  密碼: <input type="text" name="pwd"> <br/>   	   <input type="submit" value="注冊"> <br/>   	</form>  </body></html>Web.Xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">  <display-name>mystruts</display-name>  <!-- 核心控制器 -->  <servlet>    <servlet-name>ActionServlet</servlet-name>    <servlet-class>com.xp.framework.ActionServlet</servlet-class>    <!-- 啟動時候執行servlet初始化方法 -->    <load-on-startup>1</load-on-startup>  </servlet>  <servlet-mapping>    <servlet-name>ActionServlet</servlet-name>    <url-pattern>*.action</url-pattern>  </servlet-mapping>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>2.struts第一個案例基于mvc模式的應用框架之strutsStruts就是基于mvc模式的框架!(struts其實也是servlet封裝,提高開發效率!)Struts開發步驟:1. web項目,引入struts - jar包

2. web.xml中,引入struts的核心功能配置過濾器

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">  <display-name>struts20150313</display-name>  <!-- 引入struts核心過濾器 -->  <filter>  	<filter-name>struts2</filter-name>  	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.class</filter-class>  </filter>  <filter-mapping>  	<filter-name>struts2</filter-name>  	<url-pattern>/*</url-pattern>  </filter-mapping>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>3. 開發action

package com.xp.action;import com.opensymphony.xwork2.ActionSupport;//開發action: 處理請求public class HelloAction extends ActionSupport{	// 處理請求		public String execute() throws Exception {			System.out.println("訪問到了action,正在處理請求");			System.out.println("調用service");			return "success";		}}
4. 配置action	src/struts.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts SYSTEM "http://struts.apache.org/dtds/struts-2.0.dtd" PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"><struts>	<package extends="struts-default" name="xxxx">	<action name="hello" method="execute" class="com.xp.action.HelloAction">	<result name="success">/success.jsp</result>	</action>	</package></struts>

3.struts詳解

SSH框架在mvc模式的的位置作用:

框架:軟件中的框架,是一種半成品; 我們項目開發需要在框架的基礎上進行!因為框架已經實現了一些功能,這樣就可以提高開發效率!b. Struts2框架Struts1最早的一種基于mvc模式的框架;Struts2 是在Struts1的基礎上,融合了xwork的功能;也可以說,Struts2 = struts1  +  xworkStruts2框架預先實現了一些功能:1. 請求數據自動封裝2. 文件上傳的功能3. 對國際化功能的簡化4. 數據效驗功能4.Struts2開發流程 引入jar文件commons-fileupload-1.2.2.jar  【文件上傳相關包】commons-io-2.0.1.jarstruts2-core-2.3.4.1.jar           【struts2核心功能包】xwork-core-2.3.4.1.jar           【Xwork核心包】ognl-3.0.5.jar 【Ognl表達式功能支持表】commons-lang3-3.1.jar          【struts對java.lang包的擴展】freemarker-2.3.19.jar            【struts的標簽模板庫jar文件】javassist-3.11.0.GA.jar           【struts對字節碼的處理相關jar】 配置web.xmlTomcat啟動- 加載自身web.xml---加載所有項目的web.xml通過在項目的web.xml中引入過濾器,-Struts的核心功能的初始化,通過過濾器完成 filter 【init/      啟動執行doFilter/   訪問執行destroy】

<!-- 引入struts核心過濾器 -->	<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>struts2-core-2.3.4.1.jarStrutsPrepareAndExecuteFilter  即為核心過濾器注意:使用的struts的版本不同,核心過濾器類是不一樣的! 開發Action注意:1. action類,也叫做動作類; 一般繼承ActionSupport類   即處理請求的類  (struts中的action類取代之前的servlet)2. action中的業務方法,處理具體的請求- 必須返回String  方法不能有參數

public class HelloAction extends ActionSupport {	// 處理請求	public String execute() throws Exception {}}配置struts.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts SYSTEM "http://struts.apache.org/dtds/struts-2.0.dtd" PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"><struts>	<package extends="struts-default" name="xxxx">	<action name="hello" method="execute" class="com.xp.action.HelloAction">	<result name="success">/success.jsp</result>	</action>	</package></struts>

5.Struts2執行流程

c.Struts2執行流程

服務器啟動:

    1.加載項目web.xml

    2.創建Struts核心過濾器對象,執行filter   init()

       struts-default.xml,    核心功能的初始化

struts-plugin.xml,     struts相關插件

struts.xml           用戶編寫的配置文件

訪問:

    3.用戶訪問Action, 服務器根據訪問路徑名稱,找對應的aciton配置, 創建action對象

    4.執行默認攔截器棧中定義的18個攔截器

    5.執行action的業務處理方法

6.struts-default.xml,詳解

 目錄:struts2-core-2.3.4.1.jar/ struts-default.xml

 內容:

    1.bean節點指定struts在運行的時候創建的對象類型

    2.指定struts-default包  【用戶寫的package(struts.xml)一樣要繼承此包】

       package  struts-default  包中定義了:

           a.  跳轉的結果類型

              dispatcher    轉發,不指定默認為轉發

              redirect       重定向

              redirectAction  重定向到action資源

              stream        (文件下載的時候用)

           b.定義了所有的攔截器

                定義了32個攔截器!

                為了攔截器引用方便,可以通過定義棧的方式引用攔截器,

               此時如果引用了棧,棧中的攔截器都會被引用!

             

              defaultStack

                  默認的棧,其中定義默認要執行的18個攔截器!

           c.默認執行的攔截器棧、默認執行的action

<default-interceptor-ref name="defaultStack"/>               <default-class-ref class="com.opensymphony.xwork2.ActionSupport" /><interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/><interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

攔截器(先睹為快):

攔截器功能與過濾器功能類似。

區別:

共同點:都攔截資源!

區別:

過濾器,攔截器所有資源都可以; (/index.jsp/servlet/img/css/js)

攔截器,只攔截action請求。

攔截器是struts的概念,只能在struts中用。

過濾器是servlet的概念,可以在struts項目、servlet項目用。

//面試題: 攔截器什么時候執行?(訪問/啟動)  先執行action類創建,先執行攔截器?

    // --》 1. 用戶訪問時候按順序執行18個攔截器;

    //---》 2. 先執行Action類的創建,再執行攔截器; 最后攔截器執行完,再執行業務方法

package com.xp.b_action;public class User {	private String userName;	private String pwd;	public String getUserName() {		return userName;	}	public void setUserName(String userName) {		this.userName = userName;	}	public String getPwd() {		return pwd;	}	public void setPwd(String pwd) {		this.pwd = pwd;	}}package com.xp.b_action;import java.util.Map;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport{	// 面試題: 攔截器什么時候執行? (訪問/啟動)  先執行action類創建,先執行攔截器?	// --》 1. 用戶訪問時候按順序執行18個攔截器;	//---》 2. 先執行Action類的創建,再執行攔截器; 最后攔截器執行完,再執行業務方法	public UserAction() {		System.out.println("UserAction.enclosing_method()");	}	/**	 * 	private String userName;	private String pwd;	public void setUserName(String userName) {		this.userName = userName;	}	public void setPwd(String pwd) {		this.pwd = pwd;	}	*/	private User user = new User();	public void setUser(User user) {		this.user = user;	}	public User getUser() {		return user;	}		public String login() {		// 獲取用戶名密碼		System.out.println(user.getUserName());		System.out.println(user.getPwd());		// 把數據保存到域		ActionContext ac = ActionContext.getContext();		// 得到代表request的map		Map<String, Object> request = ac.getContextMap();		// 得到代表session的map		Map<String, Object> session = ac.getSession();		// 得到代表servletContext的map		Map<String, Object> application = ac.getApplication();				// 保存		request.put("request_data", "request_data");		session.put("session_data", "session_data");		application.put("application_data", "application_data");		return "login";		}}<action name="login" class="com.xp.b_action.UserAction" method="login">    		<result name="login">/index.jsp</result></action>d.共性問題問題1:Struts.xml配置文件沒有提示解決a:找到struts-2.0.dtd文件,  拷貝到某個目錄:d:/dtd /..  (不要用中文目錄)讓MyEclipse關聯到上面dtd文件, windows preferences - 搜索xml catalog配置:Location:    上面配置的dtd目錄Key:     -//Apache Software Foundation//DTD Struts Configuration 2.0//EN解決b:或者,讓機器連接互聯網,工具會自動下載dtd文件,緩存到MyEclipse中!7.配置詳解
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"          "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>	<!-- 		package   定義一個包。 包作用,管理action。				   (通常,一個業務模板用一個包)		   name  包的名字; 包名不能重復;		   extends 當前包繼承自哪個包		   		   在struts中,包一定要繼承struts-default		   		  struts-default在struts-default.xml中定的包		   abstract  		   		  表示當前包為抽象包; 抽象包中不能有action的定義,否則運行時期報錯		   		 abstract=true  只有當當前的包被其他包繼承時候才用!		   		 如:		   		 	<package name="basePackage" extends="struts-default" abstract="true"></package>   					<package name="user" extends="basePackage">   		   namespace   名稱空間,默認為"/"   		   				作為路徑的一部分   		   			   訪問路徑=  http://localhost:8080/項目/名稱空間/ActionName		action   配置請求路徑與Action類的映射關系		  	   name  請求路徑名稱		  	   class 請求處理的aciton類的全名		  	   method 請求處理方法				result		  	   name  action處理方法返回值 		  	   type  跳轉的結果類型		  	     標簽體中指定跳轉的頁面		 	 -->    <package name="user" extends="struts-default" namespace="/">    	<action name="login" class="cn.itcast.b_execute.UserAction" method="login">    		<result name="login">/index.jsp</result>    	</action>    </package>     </struts>或者引入其他配置文件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"          "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>	<!-- struts在運行時候會加載這個總配置文件: src/struts.xml -->    		<!-- 總配置文件中引入其他所有的配置文件 -->	<include file="com/xp/a_action/hello.xml"></include>	<include file="com/xp/b_execute/config.xml"></include></struts>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉义市| 瑞丽市| 宝应县| 浦江县| 淳安县| 襄樊市| 兴宁市| 鱼台县| 尚志市| 林芝县| 灵寿县| 宁安市| 岱山县| 广平县| 富源县| 满城县| 白玉县| 诸城市| 墨竹工卡县| 满城县| 南乐县| 沁水县| 莱阳市| 井研县| 文水县| 庐江县| 泰宁县| 永安市| 灌云县| 东阳市| 旌德县| 岳西县| 全椒县| 黔南| 霍山县| 大石桥市| 天祝| 嘉荫县| 赣州市| 澄城县| 布尔津县|