框架(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. 02-第一个Python程序

    第一个HelloPython程序 1.1Python源程序的基本概念 Python源程序是一个特殊格式的文本文件,可以使用任意文本编辑软件做Python的开发 Python程序的文件扩展名通常都是.p ...

  2. jvm slot复用

    如果当前字节码PC计数器的值已经超出了某个变量的作用域,那这个变量对应的Slot就可以交给其他变量使用. 字节码PC计数器就是程序计数器,程序计数器记录当前线程所执行的字节码的偏移地址.如果这个值超出 ...

  3. rsync服务实践

    RSYNC数据备份 RSYNC=Remote Sync 远程同步   高效,一定要结合shell 官方网站:https://rsync.samba.org/ Author:     Andrew Tr ...

  4. RPC vs REST

    RPC vs REST 另外,由于Dubbo是基础框架,其实现的内容对于我们实施微服务架构是否合理,也需要我们根据自身需求去考虑是否要修改,比如Dubbo的服务调用是通过RPC实现的,但是如果仔细拜读 ...

  5. MySQL集群安装与配置

    MySQL集群安装与配置   文章目录 [隐藏] 一.mysql集群安装 二.节点配置 三.首次启动节点 四.测试服务是否正常 五.安全关闭和重启 MySQL Cluster 是 MySQL 适合于分 ...

  6. UVALive 3263: That Nice Euler Circuit (计算几何)

    题目链接 lrj训练指南 P260 //==================================================================== // 此题只需要考虑线 ...

  7. Linux文件及目录查找

    Linux文件及目录查找 一which——显示命令的完整路径 [root@centos71 ~]# which ls alias ls='ls --color=auto' /usr/bin/ls [r ...

  8. 密码技术之密钥、随机数、PGP、SSL/TLS

    第三部分:密码技术之密钥.随机数.PGP.SSL/TLS 密码的本质就是将较长的消息变成较短的秘密消息——密钥. 一.密钥 什么是密钥? (1)密钥就是一个巨大的数字,然而密钥数字本身的大小不重要,重 ...

  9. linux运维、架构之路-nfs网络文件系统

    一.nfs介绍  NFS是Network File System的缩写,是网络文件系统,它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录,主要存储用户上传的图片附件等信息. ...

  10. Javascript获取页面元素相对和绝对位置

    制作网页的过程中,你有时候需要知道某个元素在网页上的确切位置. 下面的教程总结了Javascript在网页定位方面的相关知识. 一.网页的大小和浏览器窗口的大小 首先,要明确两个基本概念. 一张网页的 ...