框架(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

1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 <struts> 6 <constant name="struts.devMode" value="true"></constant> 7 8 <package name="ly" namespace="/" extends="struts-default"> 9 <action name="helloWorld" class="cn.gs.ly.HelloAction" method="sayHello"> 10 <result name="success" type="dispatcher">/1.jsp</result> 11 </action> 12 </package> 13 </struts>
3. 配置核心控制器,就是一个过滤器 web.xml

1 <?xml version="1.0" encoding="UTF-8"?> 2 <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"> 3 <display-name>Struts2</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 13 <filter> 14 <filter-name>struts2</filter-name> 15 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 16 </filter> 17 <filter-mapping> 18 <filter-name>struts2</filter-name> 19 <url-pattern>/*</url-pattern> 20 </filter-mapping> 21 22 23 </web-app>
如果TOmcat启动成功,没有报错,证明环境搭建成功!
注解方式
1.导入asm等相关jar包
2.web.xml 添加struts 2 核心过滤器
3.src目录下新建com.yzpc.action包,并在该包下创建LoginAction类继承ActionSupport类
开发一个Struts2案例
1、编写struts.xml配置文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 <struts><!--这是Struts2配置文件的根元素--> 6 <constant name="struts.devMode" value="true"></constant><!-- 指定容器自动加载 --> 7 8 <package name="ly" namespace="/test" extends="struts-default"> 9 <!-- 10 pageckage:方便管理动作元素 11 name:必须有包的名称,配置文件中必须保证唯一。 12 namespace:该包的名称空间,一般是以"/"开头 13 extends:继承的父包的名称。struts-default名称的包是struts2框架已经命名好的一个包。(在struts2-core.jar的struts-default.xml中) 14 abstract:是否是抽象包。没有任何action元素的包就是抽象包(java类) 15 --> 16 <action name="helloWorld" class="cn.gs.ly.HelloAction" method="sayHello"> 17 <!-- 18 action:代表一个请求动作 19 name:动作的名称,同包中必须唯一。 20 class:负责处理的JavaBean的类全名。动作所对应的处理类,包全名.类名 21 method:JavaBean类中的对应处理方法。(动作方法:特点是,public String 方法名(){}) 22 --> 23 <result name="success" type="dispatcher">/1.jsp</result> 24 <!-- 25 result:结果类型 26 type:跳转的方式 27 name:动作方法返回的字符串 28 主体内容:跳转的具体地址 29 --> 30 </action> 31 </package> 32 </struts>
2. 根据配置文件,创建需要的javabean和对应的动作方法, 在动作方法中完成逻辑调用。
1 package cn.gs.ly; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 5 public class HelloAction extends ActionSupport{ 6 private String message; 7 8 public String getMessage() { 9 return message; 10 } 11 12 public void setMessage(String message) { 13 this.message = message; 14 } 15 16 public String sayHello(){ 17 message = "hello nice to meet you!"; 18 return "success"; 19 } 20 21 22 @Override 23 public String execute() throws Exception { 24 // TODO Auto-generated method stub 25 return "success"; 26 } 27 28 }
※struts 2 中预定义的ResultType
3、编写网页文件,显示结果
1 <%@ page language="java" contentType="text/html" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 ${message} 11 <h1>1.jsp</h1> 12 </body> 13 </html>
4、访问helloworld动作的方式:
http://localhost:8080/struts2/test/helloworld 应用名称/包的名称空间/动作的名称
搜索顺序
1 http://localhost:8080/struts2day01/test/a/b/c/helloworld 2 /test/a/b/c:名称空间 3 helloworld:动作名称 4 5 搜索顺序:名称空间 6 /test/a/b/c 没有helloworld 7 /test/a/b 没有helloworld 8 /test/a 没有helloworld 9 /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使用示例
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 <struts> 6 <constant name="struts.devMode" value="true"></constant> 7 <constant name="struts.action.extension" value="do,,action"></constant> 8 9 <!-- result 元素写法,方式一。 --> 10 <package name="ly" namespace="/" extends="struts-default"> 11 <action name="helloWorld" class="cn.gs.ly.HelloAction" method="sayHello"> 12 <result name="success" type="dispatcher">/1.jsp</result> 13 </action> 14 </package> 15 16 <!-- result 元素写法,方式二。 --> 17 <package name="ly2" namespace="/test2" extends="struts-default"> 18 <action name="helloWorld2" class="cn.gs.ly.HelloAction" method="sayHello"> 19 <result name="success" type="chain">helloWorld21</result> 20 </action> 21 <action name="helloWorld21"> 22 <result name="success" type="dispatcher">/2.jsp</result> 23 </action> 24 </package> 25 26 <package name="ly3" namespace="/test3" extends="struts-default"> 27 <action name="helloWorld3" class="cn.gs.ly.HelloAction" method="sayHello"> 28 <result name="success" type="redirectAction"> 29 <param name="actionName">helloWorld31</param> 30 <param name="namespace">/test31</param> 31 </result> 32 </action> 33 </package> 34 <package name="ly31" namespace="/test31" extends="struts-default"> 35 <action name="helloWorld31"> 36 <result name="success" type="dispatcher">/3.jsp</result> 37 </action> 38 </package> 39 40 <package name="ly4" namespace="/test4" extends="struts-default"> 41 <action name="helloWorld4" > 42 <result name="success" type="plainText">/4.jsp</result> 43 </action> 44 </package> 45 46 <!-- 动态的给Action类的属性赋值 --> 47 <package name="ly5" namespace="/test5" extends="struts-default"> 48 <action name="helloWorld5" class="cn.gs.ly.HelloAction"> 49 <param name="message">what is your name</param> 50 <result name="success" >/5.jsp</result> 51 </action> 52 </package> 53 54 <!-- 获取action的值 --> 55 56 <package name="ly6" namespace="/test6" extends="struts-default"> 57 <action name="helloWorld6" class="cn.gs.ly.HelloAction" method="sayHello"> 58 <result name="success" type="dispatcher">/6.jsp?msg=${message}</result> 59 </action> 60 </package> 61 62 63 </struts> 64