zoukankan      html  css  js  c++  java
  • Struts2学习笔记

    Struts2学习

    第一章 认识Struts2

    第一节:Struts2简介

    官网:http://struts.apache.org/

    Struts2 是目前较为普及和成熟的基于MVC设计模式的web应用程序框架。

    优点:

    • POJO表单及POJO操作 - Struts2 去除掉了Struts框架中的Action Forms部分。在Struts2框架下,你可以用任何一POJO来接收表单输入,同样的,你可以把任一POJO视为一个Action类。
    • 标签支持 - Struts2 改进了标签表单,而新的标签可让开发人员减少代码编写量。
    • AJAX支持 - Struts2 被认可接收进Web 2.0技术,并创建了功能非常类似于标准的Struts2 标签的AJAX标签,把AJAX支持整合进其结果中。
    • 易于整合 - Struts有多种整合方式可使用,现在与其他类型的框架,如Spring、Tiles、SiteMesh之类的,整合更为容易了。
    • 模板支持 - 支持使用模板生成视图。
    • 插件支持 - 有大量的插件可用于Struts2,而使用插件可以增强和扩大Struts2 核心行为。
    • 性能分析 - Struts2 为调试和配置应用程序提供综合的性能分析,此外,Struts也以嵌入调试工具的形式提供集成调试。
    • 易于修改标签 - 在Struts2 中,可使用Freemarker的模板对标签标记进行调整,而修改标签不需要JSP或是Java知识,基本的HTML、XML和CSS知识就足够了。
    • 促进减少配置 - Struts2 使用各种设置的默认值促进减少配置,而你不需要再配置什么除非是偏离了Struts2 设定的默认设置。
    • 视图技术 - Struts2 为多种视图选项(JSP、Freemarker、Velocity、XSLT等)提供支持。

    以上是使Struts2 成为准企业框架的十大优点。

    缺点:

    • 更大的学习曲线 - 使用Struts MVC,你必须要熟悉JSP、Servlet APIs标准以及一个大型、复杂的框架。
    • 文档缺乏 - 相比于Servlet和JSP APIs标准,Struts的在线资源较少,许多初学者会发现Apache在线文档混乱并缺乏整理。
    • 不够透明 - 相比于使用正常的基于Java的Web应用程序,使用Struts的应用程序有许多是进行在后台,这使得框架不易于理解。

    最后说明一点,一个好的框架应该提供各种类型的应用程序都可以使用的通用行为,Struts2 是最好的Web框架之一,并频繁用于RIA(Rich Internet Applications)的发展。

    第二节:Struts2 HelloWorld

    创建Web项目HeadFirstStruts2Chap01

    添加依赖jar包

    配置web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
      <display-name>HeadFirstStruts2Chap01</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
      <!-- 拦截用户的请求交给Struts2处理 -->
      
      <filter>
      	<filter-name>Struts2</filter-name>
      	<filter-class> <!-- Struts2核心处理器 负责分发请求 -->
      		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>
    

    创建HelloWorldAction.java:

    package com.ordinov.action;
    
    import com.opensymphony.xwork2.Action;
    
    public class HelloWorldAction implements Action {
    
    	@Override
    	public String execute() throws Exception {
    		System.out.println("执行了Action的默认方法");
    		return SUCCESS;
    	}
    	
    }
    

    配置struts.xml:

    <?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 name="helloWorld" extends="struts-default" >
         <action name="hello" class="com.ordinov.action.HelloWorldAction">
         	<result name="success">helloWorld.jsp</result>
         </action>
       </package>
    
    </struts>
    

    创建helloWorld.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    Struts2 大爷你好!
    </body>
    </html>
    

    项目结构如下:

    启动Tomcat-->

    访问http://localhost:8080/HeadFirstStruts2Chap01/hello -->

    第三节:Struts2原理介绍

    从一个高水平角度看,Struts2 是一个MVC拉动的(或MVC2)框架,Struts2 的模型-视图-控制器模式是通过以下五个核心部分进行实现的:

    • 操作(Actions)
    • 拦截器(Interceptors)
    • 值栈(Value Stack)/OGNL
    • 结果(Result)/结果类型
    • 视图技术

    而Struts2 与传统的MVC框架略有不同,因为它由Action扮演模型的角色,而不是控制器,虽然这样会有一些重叠。

    上图描述了Struts2 高级系统架构下的模型、视图及控制器。控制器是通过Struts2 分派servlet过滤器以及拦截器进行实现,模型是通过Actions进行实现,而视图则是结果类型和结果的结合。值栈和OGNL提供共同的路线、链接以及与其他组件之间的集成。

    除了上述部分,还有许多组件相关的信息。web应用程序组件、Actions组件、拦截器组件、结果组件等等。

    请求生命周期

    通过上述图片的描述,我们可以依照下面几点解释在Struts2 中用户的请求生命周期:

    • 用户发送一个资源需求的请求到服务器(例如:页面)。
    • 核心控制器查看请求后确定适当的动作。
    • 使用验证、文件上传等配置拦截器功能。
    • 执行选择的动作来完成请求的操作。
    • 另外,如果需要的话,配置的拦截器可做任何后期处理。
    • 最后,由视图显示结果并返回给用户。

    第二章 Struts2核心知识

    第一节:Struts2 get/set自动获取/设置数据

    复制HeadFirstStruts2Chap01并命名为HeadFirstStruts2Chap02

    右键单击项目-->properties-->web Project Settings

    将名称改为HeadFirstStruts2Chap02

    更改HelloWorldAction.java增加name属性并添加get/set方法:

    package com.ordinov.action;
    
    import com.opensymphony.xwork2.Action;
    
    public class HelloWorldAction implements Action {
    	
    	private String name;
    	
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	@Override
    	public String execute() throws Exception {
    		System.out.println("执行了Action的默认方法");
    		return SUCCESS;
    	}
    }
    

    修改helloWorld.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    ${name}大爷你好!
    </body>
    </html>
    

    部署并运行Tomcat-->访问http://localhost:8080/HeadFirstStruts2Chap02/hello?name=Struts2

    结果:

    第二节:ActionSupport类引入

    Strust2必须要有Actions,创建Action时,除了实现Action之外,还可以继承ActionSupport,该类实现了6个接口,其中包括了Action。

    Action的接口如下:

    public interface Action {
       public static final String SUCCESS = "success";
       public static final String NONE = "none";
       public static final String ERROR = "error";
       public static final String INPUT = "input";
       public static final String LOGIN = "login";
       public String execute() throws Exception;
    }
    

    现在来对之前的HelloWorldAction来进行改造。

    在HeadFirstStruts2Chap02的基础上,复制HelloWorldAction.java并命名为HelloWorldAction2.java

    HelloWorldAction2.java:

    package com.ordinov.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class HelloWorldAction2 extends ActionSupport  {
    	
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	
    	private String name;
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	@Override
    	public String execute() throws Exception {
    		System.out.println("执行了HelloWorldAction2 Action的默认方法");
    		return SUCCESS;
    	}
    }
    

    配置struts.xml:

    <?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 name="helloWorld" extends="struts-default" >
           
         <action name="hello" class="com.ordinov.action.HelloWorldAction2">
         	<result name="success">helloWorld.jsp</result>
         </action>
           
       </package>
    
    </struts>
    

    运行tomcat并查看结果,与之前效果一致。

    第三节:Action 设置数据

    第一种方式:属性驱动(Field Driven) A、基本数据类型属性 B、JavaBean类型属性

    第二种方式:模型驱动(Model Driven)

    创建User.java:

    package com.ordinov.model;
    
    public class User {
    
    	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;
    	}
    	
    }
    

    创建UserService.java:

    package com.ordinov.service;
    
    import com.ordinov.model.User;
    
    public class UserService {
    
    	public boolean login(User user) {
    		if("ordinov".equals(user.getUserName()) && "123456".equals(user.getPassword())) {
    			return true;
    		} else {
    			return false;
    		}
    	}
    }
    
    

    属性驱动

    创建UserAction.java:

    package com.ordinov.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.ordinov.model.User;
    import com.ordinov.service.UserService;
    
    public class UserAction extends ActionSupport  {
    	
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	
    	private UserService userService = new UserService();
    	
    	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;
    	}
    
    	@Override
    	public String execute() throws Exception {
    		System.out.println("执行了UserAction的默认方法");
    		User user =  new User();
    		user.setUserName(userName);
    		user.setPassword(password);
    		if(userService.login(user)) {
    			return SUCCESS;
    		} else {
    			return ERROR;
    		}
    	}
    	
    }
    

    创建login.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <form action="user" method="post">
    	用户名:<input type="text" name="userName" />
    	密码:<input type="text" name="password" />
    	<input type="submit" value="登录" /> 
    </form>
    </body>
    </html>
    

    创建success.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    登录成功!
    </body>
    </html>
    

    创建error.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    登录失败!
    </body>
    </html>
    

    配置struts.xml:

    <?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 name="helloWorld" extends="struts-default" >
         <action name="hello" class="com.ordinov.action.HelloWorldAction2">
         	<result name="success">helloWorld.jsp</result>
         </action>
         
         <action name="user" class="com.ordinov.action.UserAction">
         	<result name="success">success.jsp</result>
         	<result name="error">error.jsp</result>
         </action>
         
       </package>
    
    </struts>
    

    部署并运行tomcat访问:http://localhost:8080/HeadFirstStruts2Chap02/login.jsp

    创建UserAction2.java:

    package com.ordinov.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.ordinov.model.User;
    import com.ordinov.service.UserService;
    
    public class UserAction2 extends ActionSupport  {
    	
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	
    	private UserService userService = new UserService();
    	
    	private User user;
    	
    	public User getUser() {
    		return user;
    	}
    
    	public void setUser(User user) {
    		this.user = user;
    	}
    
    	@Override
    	public String execute() throws Exception {
    		System.out.println("执行了UserAction2的默认方法");
    		if(userService.login(user)) {
    			return SUCCESS;
    		} else {
    			return ERROR;
    		}
    	}
    	
    }
    

    配置struts.xml:

    <?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 name="helloWorld" extends="struts-default" >
         <action name="hello" class="com.ordinov.action.HelloWorldAction2">
         	<result name="success">helloWorld.jsp</result>
         </action>
         
         <action name="user" class="com.ordinov.action.UserAction">
         	<result name="success">success.jsp</result>
         	<result name="error">error.jsp</result>
         </action>
         
         <action name="user2" class="com.ordinov.action.UserAction2">
         	<result name="success">success.jsp</result>
         	<result name="error">error.jsp</result>
         </action>
         
       </package>
    
    </struts>
    

    模型驱动

    创建UserAction3.java:

    package com.ordinov.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    import com.ordinov.model.User;
    import com.ordinov.service.UserService;
    
    public class UserAction3 extends ActionSupport implements ModelDriven<User> {
    	
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	
    	private UserService userService = new UserService();
    	
    	private User user = new User();
    
    	@Override
    	public String execute() throws Exception {
    		System.out.println("执行了UserAction3的默认方法");
    		if(userService.login(user)) {
    			return SUCCESS;
    		} else {
    			return ERROR;
    		}
    	}
    
    	@Override
    	public User getModel() {
    		return user;
    	}
    	
    }
    

    配置struts.xml:

    <?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 name="helloWorld" extends="struts-default" >
         <action name="hello" class="com.ordinov.action.HelloWorldAction2">
         	<result name="success">helloWorld.jsp</result>
         </action>
         
         <action name="user" class="com.ordinov.action.UserAction">
         	<result name="success">success.jsp</result>
         	<result name="error">error.jsp</result>
         </action>
         
         <action name="user2" class="com.ordinov.action.UserAction2">
         	<result name="success">success.jsp</result>
         	<result name="error">error.jsp</result>
         </action>
         
         <action name="user3" class="com.ordinov.action.UserAction3">
         	<result name="success">success.jsp</result>
         	<result name="error">error.jsp</result>
         </action>
         
       </package>
    
    </struts>
    

    第四节:Struts2处理传入多个值

    第五节:struts.xml配置

    第六节:动态方法调用

    第七节:Action生命周期

    第八节:result配置

    第三章 Struts2拦截器

    第四章 值栈与OGNL

    第五章 Struts2标签

    第六章 Struts2国际化

    第七章 Struts2验证框架

    第八章 Struts2文件上传和下载

    第九章 Struts2防重复提交

  • 相关阅读:
    python入门19 异常及异常处理 异常捕获
    python入门18 继承和多态
    python入门17 类和对象
    python入门16 递归函数 高阶函数
    接口测试get请求url拼接函数(python)
    python入门15 函数
    ssh tunnel 三种模式
    k8s 容器的生命周期钩子
    对k8s service的一些理解
    windows下使用pyinstaller把python文件打包成exe可执行文件
  • 原文地址:https://www.cnblogs.com/guoyx/p/12507009.html
Copyright © 2011-2022 走看看