Struts2框架整理(HelloWorld环境搭建)

Posted Nothing_doit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2框架整理(HelloWorld环境搭建)相关的知识,希望对你有一定的参考价值。

Struts2简介       Struts2是一个工作在表现层的MVC的流程框架,它本质上相当于一个Servlet在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。      Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开。Struts相对于WebWork差别不大,相对于Struts1差别很大
MVC设计模式      M(Model):模型包含数据模型和业务模型(JavaBean,业务逻辑)      V(View):视图,将不同的数据展示到页面上      C(Controller):控制请求处理(接收请求,处理请求,响应结果)它作为数据库与视图之间的一个媒介存在,将对数据库的操作和结果的显示分离。
MVC模式流程: 请求与响应的过程 【1】提交请求,提交数据             方式:
 地址栏:http://ip:port/contextPath/index.jsp  表单:收集客户端数据  链接:<a href="/contextPath/userServlet?username=xiaoma&age=22">请求</a>            异步JS:ajax 【2】接收请求,接收数据             方式:
          String value = request.getParameter("key");           将接收的数据封装成模型对象 【3】视图跳转,传递数据              跳转方式:
          转发:                request.getRequestDispatcher("资源路径").forWard(requeset,response);           重定向:                response.sendRedirect("资源路径");   将数据保存到域对象中进行传递             常用域对象                 request (HttpServletRequest ), session(HttpSession ) ,application(ServletContext ) 【4】展示数据           使用JSTL/EL在JSP页面展示保存在域对象中的数据
原生webMVC【2】【3】都是由Servlet完成
 框架 将通用代码封装起来,提供程序员开发使用,可以大大提高开发效率。 程序员只需要将开发重点放在业务逻辑的实现上,不用再去花费精力解决公共的问题了。 重复性,扩展性,稳定性...

Struts2具备核心功能      ①可以将请求数据封装模型对象      ②拦截器 文件上传 国际化 表单数据验证 类型转换 表单重复提交 ...      ③Action 处理请求,作用相当于Servlet      ④Result 封装跳转方式      ⑤支持多种视图技术:JSP , Freemarker      ⑥ValueStack 存储数据      ⑦Ognl 类似EL,用于操作数据         ...
框架整体核心结构      
apps框架给我们提供的学习案例 docs框架文档 lib框架类库 src框架源码

国际惯例---HelloWorld(使用Struts2框架)      1.框架环境搭建           ①导入 jar                参考案例:\\struts-2.3.15.3\\apps\\struts2-blank...                 asm-3.3.jar asm-commons-3.3.jar asm-tree-3.3.jar commons-fileupload-1.3.jar commons-io-2.0.1.jar commons-lang3-3.1.jar commons-logging-1.1.3.jar freemarker-2.3.19.jar javassist-3.11.0.GA.jar log4j-1.2.17.jar ognl-3.0.6.jar struts2-core-2.3.15.3.jar xwork-core-2.3.15.3.jar
          ②新建一个conf专门放配置文件,文件名为struts.xml                               配置信息 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>   <constant name="struts.devMode" value="true" />   <package name="default" namespace="/" extends="struts-default">           <!--这里在完成helloworld的时候写-->   </package> </struts>
         ③在web.xml中配置核心控制器 <!-- 核心控制器 --> <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>
     2.完成HelloWorld ①index.jsp(发送请求)           <%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body>     <!-- 使用绝对路径访问 -->     <a href="$pageContext.request.contextPath/hello">Hello</a> </body> </html>
               ②HelloWorldAction(处理请求) package com.atguigu.action.hello;
public class HelloWorld
    public String hello()         System.out.println("接收到请求");         return "success";     
               ③配置action(就写在 struts.xml的page标签中,这主要完成页面转换 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"     "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>     <constant name="struts.devMode" value="true" />
    <package name="default" namespace="/" extends="struts-default">         <action name="hello" class="com.atguigu.action.hello.HelloWorld" method="hello">             <result>/success.jsp</result>         </action>     </package> </struts>
               ④成功页面success.jsp(切换的页面) <%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body>     <h1>向Struts2的工作者致敬</h1> </body> </html>

Action类定义规则   ①Action程序代替Servlet来处理请求。   ②就是一个普通的JavaBean程序,可以不用继承任何父类,可以不用实现任何接口。   ③多实例。每一次请求都会创建一个新的Action对象。目的:解决线程安全问题。(Action类通过声明成员变量,来获取请求参数,当多个请求共用一个成员变量会发生线程安全问题)   ④Action类中可以存在多个处理请求的方法。至少有一个。   ⑤Action可以提供请求参数名称的set方法来接收请求参数。对于简单类型,可以可以自动的进行类型转换。   ⑥处理请求的方法声明规则:   必须public   必须返回类型String   必须是无参数的   异常声明可以省略的   方法名称,一般与<action>标签的method属性值一致。否则,会查找默认execute方法来处理请求。
ActionSupport(com.opensymphony.xwork2.ActionSupport)    在编写Action类时,可以选择继承框架提供ActionSupport父类。          ActionSupport实现了6个接口               Action, 可以获取5个常量支持,代码编写规范化。               Validateable ,  手动编码验证               ValidationAware,  框架验证(通过框架配置文件来对表单数据进行验证)               TextProvider, 用于操作国际化资源文件               LocaleProvider, 用于获取Locale对象                Serializable    支持可序列化          当需要实现表单验证,国际化,序列化功能时,需要继承ActionSupport来获取框架支持。否则,不需要继承。
Strurts2框架配置解释      1.常量标签解释         常量标签:constant           name=struts.devMode : 开发模式              作用:①开发阶段一般设置为true,便于对问题的解决。                   ②修改配置后,不需要重新启动服务器,框架会自动识别配置文件是否修改过,如果修改过会自动重新加载。       <constant name="struts.devMode" value="true" />

框架核心jar包(struts2-core-2.3.15.3.jar)中含有org/apache/struts2/default.properties属性文件。定义了框架默认用到属性值。 可以使用constant常量标签对框架默认属性值进行修改。
    2.package标签   package标签用于管理action等配置。   name : 设置包的名称。应该具有唯一性。   namespace :名称空间.用于分区不同包下的同名的action.相当于访问的路径。               如果定义了名称空间,那么,在请求的路径中就一定使用名称空间来访问action   namespace+ action的name值就是请求路径
  extends : 用于包之间的继承。   struts-default 包是框架定义的默认父包。我们的包一般都是需要继承这个父包的。否则,无法使用框架提供帮助。              例如:结果类型,拦截器,拦截器栈,默认拦截器引用,默认的Action类引用就都无法使用了。   abstract="true" 表示声明一个抽象的包。抽象包一般是用于给子包做继承使用的。不能定义action配置。
  <package name="default" namespace="/" extends="struts-default">           <!--这里在完成helloworld的时候写-->   </package>
   3.action标签   action标签用于声明action的映射配置。将请求uri和目标Action类关联在一起。写在page标签中        在同一个命名空间下,不能定义同名的action.否则,只执行最后一个。   class : 处理请求Action类的全类名。        class属性可以省略。默认值是com.opensymphony.xwork2.ActionSupport,默认处理请求方法execute        当系统跳转成功页面,不需要进行任何业务逻辑处理时,可以通过默认ActionSupport进行请求处理。   method :如果省略,那么,框架会通过默认的方法名称来执行请求处理,默认方法名称:execute
        <action name="hello" class="com.atguigu.action.hello.HelloWorld" method="hello">             <!--这里写result标签-->         </action>

     4.result标签 result标签用于声明结果映射配置。将Action类方法返回结果字符串,与一个物理视图文件关联在一起 name : 表示结果名称。与Action类方法的返回结果字符串相匹配。 name="success" 默认值,可以省略 type : 表示结果类型。对不同的跳转方式进行封装。 type="dispatcher" : 用于转发。默认值,可以省略。 type="redirect" : 用于重定向
     <result name="success" type="dispatcher">/success.jsp</result>


代码整理:             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>mystruts2_day01_helloword</display-name>     <!-- 配置一个核心控制器 -->     <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> </web-app>
    struts.xml配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"     "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>      <!--配置开发者模式-->      <constant name="struts.devMode" value="true" />     <!--         package         name用来定义包名,         namespace定义请求路径(namespace+action的name属性值共同构成请求路径)         extends="struts-default"必须写,否则不能获取Struts框架支持,例如request的处理,转发,重定向...      -->     <package name="com/atguigu/action/hello" namespace="/" extends="struts-default">         <!--            action标签           name属性设置请求名,与namespace共同构成请求路径(SpringMVC中加在类上@RequestMapping+加在方法上的@RequestMapping共同构成请求路径)           class表示方法所在的全类名,           method定义处理请求的方法名          -->         <action name="hello" class="com.atguigu.action.hello.HelloWorld" method="hello">             <!--                 name属性设置返回值,里面的文本框设置跳转页面                 type设置是重定向还是转发,默认是转发      type="dispatcher"用于转发。默认值,可以省略。      type="redirect"用于重定向                 type类型不能随便设置,必须是struts2-core下struts-default.xml中设置的             -->             <result name="success" type="redirect">/success.jsp</result>             <!--重定向到目标资源                 这里指定目标资源的虚拟路径时,不能包含Web应用的虚拟路径,                 因为Struts2会自动添加,我们再加就是画蛇添足。             -->         </action>     </package> </struts>
               处理请求的Action类 package com.atguigu.action.hello;
public class HelloWorld
    /**      * Struts2通过定义成员变量(属性)来获取请求参数      *  ①设置属性②定义set/get方法(Struts2通过使用setXXX方法给属性赋值,属性的名字不影响赋值操作)      * 若成员变量进行共享会出现线程安全性问题,Struts2通过使用多实例的方式来解决      * Struts2默认请求地址execute(返回成功页面)      *      */
    private int age;
    /**      * 执行请求的方法,同时要在xml中配置      * 何时,如何执行这个请求      * @return      */     public String hello()         System.out.println("接收到请求");         System.out.println("请求参数age=" + age);         return "success";     
    public void setAge(int age)         this.age = age;     

以上是关于Struts2框架整理(HelloWorld环境搭建)的主要内容,如果未能解决你的问题,请参考以下文章

Struts2框架使用之用Struts2写一个HelloWorld

Java Web框架-----------------------struts2(官网教程版HelloWorld)

Struts2_搭建环境及HelloWorld

Struts2初级篇(HelloWorld)

Struts2学习一----------Struts2的工作原理及HelloWorld简单实现

Struts2框架整理(CRUD+运行流程)