一、struts2简介
struts2是一个用来开发MVC应用程序的框架。它提供了Web应用程序开发过程中的一些常见问题的解决方案。
1.struts2的作用域范围:三层架构当中的第一层,相当于MVC层,其出现的作用就是标准化MVC,让程序员在某个标准阿下进行程序的开发。
2.struts2的下载:http://struts.apache.org/download.cgi#struts2324
jar包、源码、文档一应俱全。
3.发展历史:Struts1是世界上第一个MVC的框架,在2001年发布;Struts2不是Struts1的升级,是由WebWork发展起来的,吸收了Struts1和WebWork的优点。
4.Struts2能够解决的问题:
(1)页面导航活动的开始
(2)用户输入数据的合法性验证
(3)统一的布局
(4)可扩展性
(5)国际化和本地化
(6)支持Ajax
(7)解决表单的重复提交问题
......
5.struts2的工作原理:写到这里突然想到了王建老师,之前王健老师教我们的东西突然发现和struts2极其相似,真的非常感谢王健老师。不赘述。见之前的BaseServlet原理。
6.struts2的第一个小项目:Hello,World!
(1)应当加入的基础包包括:asm-3.3.jar、asm-commons-3.3.jar、asm-tree-3.3.jar、commons-fileupload-1.3.1.jar、commons-io-2.2.jar、commons-lang-2.4.jar、commons-lang3-3.2.jar、commons-logging-1.1.3.jar、freemarker-2.3.22.jar、javassist-3.11.0.GA.jar、ognl-3.0.6.jar、struts2-core-2.3.24.jar、xwork-core-2.3.24.jar 一共13个包。
(2)修改index.jsp页面:
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 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 10 <body> 11 <a href="<c:url value=‘/myaction/helloWorldAction.action‘/>">hello,world</a> 12 </body> 13 </html>
index.jsp
(3)新建类:HelloWorldAction,该类实现了com.opensymphony.xwork2.Action接口。
1 /** 2 * 3 */ 4 /** 5 * @author kdyzm 6 * 7 */ 8 package com.kdyzm.action; 9 10 import com.opensymphony.xwork2.Action; 11 12 public class HelloWorldAction implements Action 13 { 14 @Override 15 public String execute() throws Exception { 16 System.out.println("Hello,World!"); 17 return "success"; 18 } 19 20 }
HelloWorldAction.java
(4)在src目录下新建文件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> 6 <!-- namespace的书写必须加上/ --> 7 <package name="firstpackage" namespace="/myaction" extends="struts-default"> 8 <action name="helloWorldAction" class="com.kdyzm.action.HelloWorldAction"> 9 <result name="success">/information/success.jsp</result> 10 </action> 11 </package> 12 </struts>
struts.xml
(5)配置过滤器
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 <filter> 4 <filter-name>strutsFilter</filter-name> 5 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 6 </filter> 7 <filter-mapping> 8 <filter-name>strutsFilter</filter-name> 9 <url-pattern>*.action</url-pattern> 10 </filter-mapping> 11 </web-app>
web.xml
(6)测试
请求结果:
(7)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> 6 <!-- namespace的书写必须加上/ --> 7 <package name="firstpackage" namespace="/myaction" extends="struts-default"> 8 <action name="helloWorldAction" class="com.kdyzm.action.HelloWorldAction"> 9 <result name="success">/information/success.jsp</result> 10 </action> 11 </package> 12 </struts>
<!DOCTYPE>标签节点是需要遵循的规范,这里有一个dtd文件,我们需要遵循该dtd的标准在struts.xml文件中进行修改!
struts标签是根节点标签;
package标签是包标签,其name属性自定义,但是其namespace属性却是个非常重要的属性,该属性必须和index.jsp中a标签定义的完全相同才行;extends指明了继承了哪个包,这里是默认的包struts-default,该包是非常重要的包,如果没有该包,就没有了使用struts2的意义。
action标签对应着处理jsp页面请求的一个方法,默认方法是Action接口的execute()方法,而class属性指明了使用的类的路径。
result标签对应着实现了Action接口的类调用方法之后返回的结果,name属性必须和返回结果相一致,这里可以有多个result标签以应对不同的处理结果;result标签中的文本节点标志着需要转发或者重定向到某个页面的页面路径。默认的方法是转发。这些都可以查看底层源代码查看到。
(8)小练习源代码:https://github.com/kdyzm/day34_struts_HelloWorld
二、