zoukankan      html  css  js  c++  java
  • struts 2读书笔记-----struts2的开发流程

        一、将struts 2的lib文件夹下地commons-fileupload.jar、commons-io.jar、freemarker.jar、javassist.jar、ognl.jar、struts2-core.jar和xwork-core.jar必需类复制到web应用的WEB-INF/lib路径下。如果需要在web应用中使用struts 2的更多特性,则需要将相应的JAR文件复制到web应用的WEB-INF/lib路径下。

       

              二、编辑Web应用的web.xml配置文件,配置Struts 2 的核心Filter。在web.xml中定义核心Filter是来拦截用户请求。

                     由于Web应用是基于请求/响应构建的应用,所以不管哪个MVC Web框架,都需要在web.xml中配置该框架的核心filter或者servlet,这样才可以让该框架介入Web应用中。

                    下面是struts 2 在web.xml文件中的配置片段:

    1. <?xml version="1.0" encoding="GBK"?>  
    2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"  
    3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
    5.     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">  
    6.     <!-- 定义Struts 2的核心Filter -->  
    7.     <filter>  
    8.         <filter-name>struts2</filter-name>  
    9.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
    10.     </filter>  
    11.       
    12.     <!-- 让Struts 2的核心Filter拦截所有请求 -->  
    13.     <filter-mapping>  
    14.         <filter-name>struts2</filter-name>  
    15.         <url-pattern>/*</url-pattern>  
    16.     </filter-mapping>  
    17. </web-app>  
    <?xml version="1.0" encoding="GBK"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    	<!-- 定义Struts 2的核心Filter -->
    	<filter>
    		<filter-name>struts2</filter-name>
    		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    	</filter>
    	
    	<!-- 让Struts 2的核心Filter拦截所有请求 -->
    	<filter-mapping>
    		<filter-name>struts2</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    </web-app>

          

              三、如果需要以POST方式提交请求,则需定义包含表单数据的jsp页面。若果仅仅只是以GET方式放送请求,则不需要。

         

              四、定义处理用户请求的Action类

                   这是所有MVC框架中必不可少的。因为Action就是MVC框架中的控制器。该控制器负责调用model里的方法来处理请求。

                   MVC框架的底层机制是:核心servlet或者Filter接收到用户的请求后,通常会对用户请求进行简单的预处理,例如解析、封装参数等,然后通过反射来创建Action实例,并调用Action的指定方法来处理用户的请求。

                  但是当Servlet或Filter拦截请求后,它如何知道创建那个Action的实例?这里一般有两种方法可以解决

                  1:利用配置文件。如:我们可以配置login.action对应使用LoginAction类。这样就可以让MVC框架知道创建那个Action的实例了。

                   2:利用约定。如:我们可以约定xxx.action总是对应XxxAction类。如果核心控制器收到请求后,将会调用相应的Action类来处理用户请求。

             

              五、配置Action

                    配置Action就是指定哪个请求对应哪个、Action进行处理,从而让核心控制器根据配置来创建合适的Action实例,并调用该Action 的业务控制方法。               

    1. <?xml version="1.0" encoding="GBK"?>  
    2. <!DOCTYPE struts PUBLIC  
    3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"  
    4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
    5.     <!-- 指定struts 2的配置文件的跟元素  -->  
    6. <struts>    
    7.     <!-- 所有的Action定义都应该放在package下 -->  
    8.     <package name="mystruts" extends="struts-default">  
    9.         <action name="login" class="com.action.LoginAction" method="execute">  
    10.         </action>  
    11.     </package>  
    12. </struts>   
    <?xml version="1.0" encoding="GBK"?>
    <!DOCTYPE struts PUBLIC
    	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
    	<!-- 指定struts 2的配置文件的跟元素  -->
    <struts>	
    	<!-- 所有的Action定义都应该放在package下 -->
    	<package name="mystruts" extends="struts-default">
    		<action name="login" class="com.action.LoginAction" method="execute">
    		</action>
    	</package>
    </struts> 
    
    

              六、配置处理结果和物理视图资源之间的对应关系

                   当Action处理用户请求结束后,通常会返回一个处理结果。我们可以认为该名称是逻辑视图名,这个罗建视图名需要和指定物理视图资源关联才有价值。所以我们还需要配置处理结果之间的对应关系。 

    1. <action name="login" class="com.action.LoginAction" method="execute">  
    2.     <!-- 定义三个逻辑视图和物理资源之间的映射 -->  
    3.     <result name="input">/login.jsp</result>  
    4.     <result name="error">/error.jsp</result>  
    5.     <result name="success">/success.jsp</result>  
    6. </action>  
    <action name="login" class="com.action.LoginAction" method="execute">
    	<!-- 定义三个逻辑视图和物理资源之间的映射 -->
    	<result name="input">/login.jsp</result>
    	<result name="error">/error.jsp</result>
    	<result name="success">/success.jsp</result>
    </action>


              七、编写视图资源

                经过这个几个步骤,我们基本可以完成一个struts 2 的配置

             下面一个完整的struts 2 的实例

              1、配置核心Filter

                   代码和上面的一样

              2、编写jsp页面:命名为login.jsp;实现基本的登陆功能

    1. <%@ page language="java" import="java.util.*"  pageEncoding="utf-8"%>  
    2. <html>  
    3.   <head>  
    4.     <title>用户登陆</title>  
    5.   </head>  
    6.     
    7.   <body>  
    8.     <form action="login">               
    9.           用户名:<input type="text" name="username" />              
    10.           密  码:<input type="password" name="password" />             
    11.           <input type="submit" value="登陆">         
    12.     </form>  
    13.   </body>  
    14. </html>  
    <%@ page language="java" import="java.util.*"  pageEncoding="utf-8"%>
    <html>
      <head>
        <title>用户登陆</title>
      </head>
      
      <body>
    	<form action="login">             
    	      用户名:<input type="text" name="username" />            
    	      密  码:<input type="password" name="password" />           
    	      <input type="submit" value="登陆">       
    	</form>
      </body>
    </html>


            3、配置Action  。命名为struts.xml  并放在src的目录下

    1. <?xml version="1.0" encoding="GBK"?>  
    2. <!DOCTYPE struts PUBLIC  
    3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"  
    4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
    5.     <!-- 指定struts 2的配置文件的跟元素  -->  
    6. <struts>    
    7.     <!-- 所有的Action定义都应该放在package下 -->  
    8.     <package name="mystruts" extends="struts-default">  
    9.         <action name="login" class="com.action.LoginAction" method="execute">  
    10.             <!-- 定义三个逻辑视图和物理资源之间的映射 -->  
    11.             <result name="input">/login.jsp</result>  
    12.             <result name="error">/error.jsp</result>  
    13.             <result name="success">/success.jsp</result>  
    14.         </action>  
    15.     </package>  
    16. </struts>  
    <?xml version="1.0" encoding="GBK"?>
    <!DOCTYPE struts PUBLIC
    	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
    	<!-- 指定struts 2的配置文件的跟元素  -->
    <struts>	
    	<!-- 所有的Action定义都应该放在package下 -->
    	<package name="mystruts" extends="struts-default">
    		<action name="login" class="com.action.LoginAction" method="execute">
    			<!-- 定义三个逻辑视图和物理资源之间的映射 -->
    			<result name="input">/login.jsp</result>
    			<result name="error">/error.jsp</result>
    			<result name="success">/success.jsp</result>
    		</action>
    	</package>
    </struts>


              4、编写处理用户请求的Action类

    1. package com.action;  
    2.   
    3. public class LoginAction{  
    4.     private String username;  
    5.     private String password;  
    6.     public String getUsername() {  
    7.         return username;  
    8.     }  
    9.     public void setUsername(String username) {  
    10.         this.username = username;  
    11.     }  
    12.     public String getPassword() {  
    13.         return password;  
    14.     }  
    15.     public void setPassword(String password) {  
    16.         this.password = password;  
    17.     }  
    18.       
    19.     //定义处理用户请求的login方法  
    20.     public String execute(){  
    21.         //通过ActionContext()设置session范围的属性  
    22.         ActionContext.getContext.getSession().put("user", getUsername());  
    23.           
    24.         if(getUsername().equals("chentmt")&&getPassword().equals("chenssy")){  
    25.             //通过ActionContext()设置reque范围的属性  
    26.             return "success";  
    27.         }  
    28.         else {  
    29.             return "error";  
    30.         }  
    31.     }  
    32. }  
    package com.action;
    
    public class LoginAction{
    	private String username;
    	private String password;
    	public String getUsername() {
    		return username;
    	}
    	public void setUsername(String username) {
    		this.username = username;
    	}
    	public String getPassword() {
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
    	
    	//定义处理用户请求的login方法
    	public String execute(){
    		//通过ActionContext()设置session范围的属性
    		ActionContext.getContext.getSession().put("user", getUsername());
    		
    		if(getUsername().equals("chentmt")&&getPassword().equals("chenssy")){
    			//通过ActionContext()设置reque范围的属性
    			return "success";
    		}
    		else {
    			return "error";
    		}
    	}
    }



              配置这些资源后,我们就可以通过浏览器来访问了:http://localhost:8080/struts2_01/login.jsp可以看到如下界面

               读李刚《轻量级java EE企业应用实战(第三版)—struts 2+Spring 3+Hibernate整合开发》

    ---- 动动手指关注我!或许下次你又能在我这里找到你需要的答案!ZZZZW与你一起学习,一起进步!
  • 相关阅读:
    JavaScript操作符instanceof揭秘
    Linux打开txt文件乱码的解决方法
    Working copy locked run svn cleanup not work
    poj 2299 UltraQuickSort 归并排序求解逆序对
    poj 2312 Battle City 优先队列+bfs 或 记忆化广搜
    poj2352 stars 树状数组
    poj 2286 The Rotation Game 迭代加深
    hdu 1800 Flying to the Mars
    poj 3038 Children of the Candy Corn bfs dfs
    hdu 1983 Kaitou Kid The Phantom Thief (2) DFS + BFS
  • 原文地址:https://www.cnblogs.com/zzzzw/p/4581033.html
Copyright © 2011-2022 走看看