Struts2学习笔记(一)--入门常见配置
Struts2框架的学习路线
l 第一天:Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写
l 第二天:Struts2的数据的封装、结果页面配置
l 第三天:Struts2的值栈和OGNL表达式
l 第四天:Struts2的标签库
Struts2的概述
Struts2是一个基于MVC设计模式的WEB层框架。
Struts2的内核相对于Struts1来讲已经发生巨大变化。
常见的web层框架
Struts2
Struts1
Webwork
SpringMVC
Web层框架基于前端控制器模型设计
下载Struts2的开发环境 http://struts.apache.org/
解压Struts2开发包
apps :Struts2提供的应用,war文件:web项目打成war包。直接放入到tomcat可以允许。
docs :Struts2的开发文档和API
lib :Strtus2框架的开发的jar包
src :Struts2的源码
创建web项目,引入jar包
引入jar包
struts-blank项目下找jar包
创建一个JSP页面
<body> <h1>Struts2的入门</h1>
<!--点击连接会触发相应的反应--> <h3><a href="hello.action">Struts2的入门</a></h3> </body>
编写Action的类
对Action进行配置
在src下创建(提供)名称叫做struts.xml的配置文件。注意名字不可以改变,src目录下的是主要的
配置前端控制器(核心过滤器)
这是web.xml中的配置
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 配置Struts2的核心过滤器 --> <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>
改写Action中的方法的返回值
public class HelloAction { public String execute(){ System.out.println("HelloAction执行了......"); return "sucess"; } }
改写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为了管理Action的配置,通过包进行管理 --> <!-- 配置Struts2的包============================== --> <!-- package中的名字随意,但是在配置文件中不可以重复 --> <package name="demo1" extends="struts-default" namespace="/"> <!-- 配置Action==action中的名字必须是刚刚页面中的xxx.action==class部分是对应的的类的路径地址 --> <action name="hello" class="com.zyz.struts.HelloAction"> <!-- 配置跳转页面===当类中返回的是sucess那么就会设定跳转到相应的界面==== --> <result name="sucess">/demo1/sucess.jsp</result> </action> </package> </struts>
编写sucess.jsp
分析Struts2的执行流程
当用户访问某一个Action的时候,先经过核心过滤器,在核心过滤器中执行一组拦截器(这组拦截器实现部分功能),执行目标Action,根据Action的返回值,进行页面跳转。
Struts2的常见配置
Struts2的配置文件的加载顺序(了解)
init_DefaultProperties() ----加载default.properties
init_TraditionalXmlConfigurations(); ----加载struts-default.xml、struts-plugin.xml、struts.xml
init_LegacyStrutsProperties(); ----加载struts.properties
init_CustomConfigurationProviders(); ----加载配置提供类
init_FilterInitParameters() ; // [6] ----加载web.xml中过滤器初始化参数
init_AliasStandardObjects() ; // [7] ----加载Bean对象
加载顺序
default.properties
struts-default.xml
struts-plugin.xml
struts.xml
struts.properties
web.xml
注意:后配置的常量的值会覆盖先配置的常量的值。
Action的配置
package相关配置
package标签称为包,这个包与Java中的包的概念不一致。包为了更好管理action的配置。
package标签的属性
name :包的名称,只有在一个项目中不重名即可。
extends :继承哪个包,通常值为struts-default
namespace :名称空间,与<action>标签中的name属性共同决定访问路径。
名称空间有三种写法:
带名称的名称空间 :namespace=”/aaa”
跟名称空间 :namespance=”/”
默认名称空间 :namespace=””
abstract :抽象的,用于其他包的继承。
action相关配置:
action标签配置Action类。
action标签的属性
- name :与namespace共同决定访问路径
- class :Action类的全路
- method :执行Action中的哪个方法的方法名,默认值execute
- converter :用于设置类型转换器
常量的配置
struts2的常量配置
在Struts2的框架中,提供了非常多的常量:(在default.properties)
- struts.i18n.encoding=UTF-8 ----Struts2中所有的post请求的中文乱码不用处理。
- struts.action.extension=action,, ----Struts2请求的默认的扩展名。默认扩展名是.action或者什么都不写。在Struts2中修改一些常量的值:
- 修改常量的值,可以有三个位置进行修正
struts.xml中进行修改
struts.properties中进行修改
web.xml中进行修改
分模块开发设置
include的配置
经测试可以正常的运行
首先在包的目录下建一个struts_demo1.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为了管理Action的配置,通过包进行管理 --> <!-- 配置Struts2的包============================== --> <!-- package中的名字随意,但是在配置文件中不可以重复 --> <package name="demo1" extends="struts-default" namespace="/"> <!-- 配置Action==action中的名字必须是刚刚页面中的xxx.action==class部分是对应的的类的路径地址 --> <action name="hello" class="com.zyz.struts.HelloAction"> <!-- 配置跳转页面===当类中返回的是sucess那么就会设定跳转到相应的界面==== --> <result name="sucess">/demo1/sucess.jsp</result> </action> </package> </struts>
然后在src目录下的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> <include file="com/zyz/struts/struts_demo1.xml"></include> </struts>
其他的不变。网页依然可以正常的进行访问
Action的访问问题
Action类是POJO的类
Action类实现一个Action的接口
Action类继承ActionSupport类
Action的三中访问方式:
通过method设置
<body> <h1>Struts2的入门</h1> <h3><a href="hello.action">入门</a></h3> <h3><a href="find.action">查看信息</a></h3> <h3><a href="update.action">修改信息</a></h3> <h3><a href="delete.action">删除信息</a></h3> <h3><a href="add.action">添加信息</a></h3> </body>
配置文件
<struts> <!-- Struts2为了管理Action的配置,通过包进行管理 --> <!-- 配置Struts2的包============================== --> <!-- package中的名字随意,但是在配置文件中不可以重复 --> <package name="demo2" extends="struts-default" namespace="/"> <!-- 配置Action==action中的名字必须是刚刚页面中的xxx.action==class部分是对应的的类的路径地址 --> <action name="find" class="com.learn.struts.demo1.Demo1" method="find"></action> <action name="update" class="com.learn.struts.demo1.Demo1" method="update"></action> <action name="delete" class="com.learn.struts.demo1.Demo1" method="delete"></action> <action name="add" class="com.learn.struts.demo1.Demo1" method="add"></action> </package> </struts>
通过通配符的方式进行配置(*****)
更加抽象的通配设置
动态方法访问
开启动态方法访问
编写访问路径
唯一区别就是他用的是感叹号!