框架(frameWork):某一种应用的半成品
  struts2: 表现层 处理与页面进行交互的相关功能 
  hibernate: 持久层 负责业务逻辑数据的持久化 
  spring: 业务层 负责复杂的业务逻辑  
  mybatis: 持久层 负责业务逻辑数据的持久化 跟数据库做交互

struts1 与 struts2 的区别:
  1.struts2 是在webwork2的基础上发展而来的,他不依赖于struts API 和 servlet API
  2.struts2提供了拦截器,利用拦截器可以进行AOP(切面)编程
  3.struts2提供了类型转换器,可以使用转换器把参数转化成我们需要的类型
  4.struts2提供了多种表现层技术
  5.struts2的输入校验可以对指定的方法进行校验
  6.struts2提供了全局范围,包范围、action范围 的国际化资源文件管理
  ※struts2太灵活,不易控制

搭建 struts2 的开发环境:
  1.导入jar包:找到所需的jar包:发行包的lib目录中

  2.在工程 src 下编写struts2的配置文件  struts2.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"></constant> <package name="ly" namespace="/" extends="struts-default">
<action name="helloWorld" class="cn.gs.ly.HelloAction" method="sayHello">
<result name="success" type="dispatcher">/1.jsp</result>
</action>
</package>
</struts>

  3. 配置核心控制器,就是一个过滤器  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_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Struts2</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> <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>

如果TOmcat启动成功,没有报错,证明环境搭建成功!

注解方式 

1.导入asm等相关jar包

2.web.xml 添加struts 2 核心过滤器

3.src目录下新建com.yzpc.action包,并在该包下创建LoginAction类继承ActionSupport类

开发一个Struts2案例

1、编写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><!--这是Struts2配置文件的根元素-->
<constant name="struts.devMode" value="true"></constant><!-- 指定容器自动加载 --> <package name="ly" namespace="/test" extends="struts-default">
<!--
pageckage:方便管理动作元素
name:必须有包的名称,配置文件中必须保证唯一。
namespace:该包的名称空间,一般是以"/"开头
extends:继承的父包的名称。struts-default名称的包是struts2框架已经命名好的一个包。(在struts2-core.jar的struts-default.xml中)
abstract:是否是抽象包。没有任何action元素的包就是抽象包(java类)
-->
<action name="helloWorld" class="cn.gs.ly.HelloAction" method="sayHello">
<!--
action:代表一个请求动作
name:动作的名称,同包中必须唯一。
class:负责处理的JavaBean的类全名。动作所对应的处理类,包全名.类名
method:JavaBean类中的对应处理方法。(动作方法:特点是,public String 方法名(){})
-->
<result name="success" type="dispatcher">/1.jsp</result>
<!--
result:结果类型
type:跳转的方式
name:动作方法返回的字符串
主体内容:跳转的具体地址
-->
</action>
</package>
</struts>

2. 根据配置文件,创建需要的javabean和对应的动作方法, 在动作方法中完成逻辑调用。

 package cn.gs.ly;

 import com.opensymphony.xwork2.ActionSupport;

 public class HelloAction extends ActionSupport{
private String message; public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public String sayHello(){
message = "hello nice to meet you!";
return "success";
} @Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return "success";
} }

※struts 2  中预定义的ResultType

3、编写网页文件,显示结果

 <%@ page language="java" contentType="text/html"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${message}
<h1>1.jsp</h1>
</body>
</html>

4、访问helloworld动作的方式:

http://localhost:8080/struts2/test/helloworld 应用名称/包的名称空间/动作的名称

搜索顺序

 http://localhost:8080/struts2day01/test/a/b/c/helloworld
/test/a/b/c:名称空间
helloworld:动作名称 搜索顺序:名称空间
/test/a/b/c 没有helloworld
/test/a/b 没有helloworld
/test/a 没有helloworld
/test 有了,调用执行
struts.xml 中的各项默认值
package如果没有namespace 默认namespace="/";
action如果没有class,就会找 com.opensymphony.xwork2.ActionSupport
action如果没有method,就会找 public String execute(){} result name的常量值:
SUCCESS:success;
NONE:none;
ERROR:error;
INPUT:input;
LOGIN:login;
result如果没有 type,默认是dispatcher
<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
<result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" />
</result-types> dispatcher:普通转发到某个页面
chain:普通抓发到某个动作
redirect:重定向到某一页面
redirectAction:重定向到某一动作
plainText:以纯文本的形式输出jsp的内容 动态设置action属性
<action name="helloWorld6" class="cn.gs.wwg.HelloAction" >
<param name="message">i am best cool</param>
<result name="success" >/5.jsp</result>
</action>
取得action属性
<result name="success" type="dispatcher">/6.jsp?msg=${message}</result>
---6.jsp中取值 : ${param.msg} 控制action的后缀名:指定需要struts2处理的请求后缀
<constant name="struts.action.extension" value="do"></constant>
开发中配置文件的更改,在访问时让框架自动重新加载:指定容器自动加载
<constant name="struts.devMode" value="true"></constant>

各种result使用示例

 <?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"></constant>
<constant name="struts.action.extension" value="do,,action"></constant> <!-- result 元素写法,方式一。 -->
<package name="ly" namespace="/" extends="struts-default">
<action name="helloWorld" class="cn.gs.ly.HelloAction" method="sayHello">
<result name="success" type="dispatcher">/1.jsp</result>
</action>
</package> <!-- result 元素写法,方式二。 -->
<package name="ly2" namespace="/test2" extends="struts-default">
<action name="helloWorld2" class="cn.gs.ly.HelloAction" method="sayHello">
<result name="success" type="chain">helloWorld21</result>
</action>
<action name="helloWorld21">
<result name="success" type="dispatcher">/2.jsp</result>
</action>
</package> <package name="ly3" namespace="/test3" extends="struts-default">
<action name="helloWorld3" class="cn.gs.ly.HelloAction" method="sayHello">
<result name="success" type="redirectAction">
<param name="actionName">helloWorld31</param>
<param name="namespace">/test31</param>
</result>
</action>
</package>
<package name="ly31" namespace="/test31" extends="struts-default">
<action name="helloWorld31">
<result name="success" type="dispatcher">/3.jsp</result>
</action>
</package> <package name="ly4" namespace="/test4" extends="struts-default">
<action name="helloWorld4" >
<result name="success" type="plainText">/4.jsp</result>
</action>
</package> <!-- 动态的给Action类的属性赋值 -->
<package name="ly5" namespace="/test5" extends="struts-default">
<action name="helloWorld5" class="cn.gs.ly.HelloAction">
<param name="message">what is your name</param>
<result name="success" >/5.jsp</result>
</action>
</package> <!-- 获取action的值 --> <package name="ly6" namespace="/test6" extends="struts-default">
<action name="helloWorld6" class="cn.gs.ly.HelloAction" method="sayHello">
<result name="success" type="dispatcher">/6.jsp?msg=${message}</result>
</action>
</package> </struts>

struts2 基础的更多相关文章

  1. Struts2入门1 Struts2基础知识

    Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...

  2. Struts2基础学习2

    Struts2基础学习2 项目结构,测试页面与实体类 <%@ page language="java" contentType="text/html; charse ...

  3. Struts2基础入门

    Struts2基础入门 创建一个web工程 0)导包并且创建一个核心配置文件 <?xml version="1.0" encoding="UTF-8"?& ...

  4. Struts2基础学习总结

    引用自:http://www.cnblogs.com/jbelial/archive/2012/05/10/2486886.html Struts 2是在WebWork2基础发展而来的. 注意:str ...

  5. 经典MVC框架技术-struts2基础知识

    Struts2框架简介 struts2框架是在struts1和webwork技术的基础上,进行合并的全新框架,struts2以Webwork为核心,采用拦截器来处理用户的请求,这样的设计使得业务逻辑控 ...

  6. Struts2框架学习第三章——Struts2基础

    本章要点 —  Struts 1框架的基本知识 — 使用Struts 1框架开发Web应用 —  WebWork框架的基本知识 — 使用WebWork框架开发Web应用 — 在Eclipse中整合To ...

  7. (一)Struts2 基础

    一.Struts简介 1.1 历史 虽然Struts 2号称是一个全新的框架,但这仅仅是相对Struts 1而言.Struts 2与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框 ...

  8. struts2 基础学习

      Struts 2是在WebWork2基础发展而来的. 注意:struts 2和struts 1在代码风格上几乎不一样. Struts 2 相比Struts 1的优点: 1.在软件设计上Struts ...

  9. 2. Struts2 基础

    1. Struts2简介 Struts2是一个WEB端MVC框架.作为比较早的MVC 框架之一,Struts2在使用中还是比较多的.虽然个人感受没有SpringMVC还那么的好用 Struts2 官网 ...

随机推荐

  1. mysql分组函数及其用例

    功能:用作统计使用,又称为聚合函数或统计函数或组函数 分类:sum 求和.avg 平均值.max 最大值 .min 最小值 .count 计算个数 特点: 1.sum.avg一般用于处理数值型,max ...

  2. Spring基础13——Spring表达式语言:SpEL

    1.SpEL简介 Spring表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言.语法上类似于EL:SpEL使用#{...}作为界定符,所有在大框号中的字符都将被认为是Sp ...

  3. php理解递归

    递归有一段时间很让人难已理解,突然发现一个很好的办法来理解,现在跟大家分享一下: <?php function fact(n){ if( n == 1){ return 1; } retrun ...

  4. 使用QT创建系统托盘

    使用QT来创建一个系统托盘,事实上是一件很简单的事.为什么这么说?一是因为QT文档给出了比较详细的例子,二是QT的结构比较优雅,设计风格统一.但是在动手之前,我们要从哪里下手?虽然QT文档给出了一个比 ...

  5. nginx限制文件访问速率

    需求: 一个文件下载功能需要限制文件同时访问的并发数和当个连接的访问速率: 配置: 在http context内增加: limit_conn_zone $binary_remote_addr zone ...

  6. 【NOIP2016提高A组8.12】总结

    惨败!!!! 第一题是一道神奇的期望问题. 第二题,发现"如果两个部门可以直接或间接地相互传递消息(即能按照上述方法将信息由X传递到Y,同时能由Y传递到X),我们就可以忽略它们之间的花费&q ...

  7. hash详细介绍

    转发http://www.cnblogs.com/maybe2030/p/4719267.html (请转步这个网站,写得非常好)

  8. LeetCode--062--不同路径(python)

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 问总共有多 ...

  9. [USACO08FEB]连线游戏Game of Lines

    题目背景 Farmer John最近发明了一个游戏,来考验自命不凡的贝茜. 题目描述 Farmer John has challenged Bessie to the following game: ...

  10. WWDC2017-advanced_animations_with_uikit

    最后修改时间: 2017-12-1 官方视频链接 这个Session主要讲一下的几个内容: Basic(基础的): 动画工作原理 以及 动画如何计时 Interactive and Interrupt ...