Sturts2--入门
Sturts2概述
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
优势:自动封装参数,参数校验,结果的处理(转发|重定向),国际化,显示等待页面,表单的防止重复提交。
执行流程:用户请求访问,先经过核心过滤器,在过滤器里面执行一组拦截器(拦截器实现部分功能),再找struts.xml里面package表对应的action,执行controller层是业务,返回一个action,响应给客户
IDEA MAVEN项目搭建
https://www.cnblogs.com/zhangyongheng/p/11647600.html
简单工程结构图
pom文件
<groupId>com.ruikang</groupId> <artifactId>sturts2demo</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>sturts2demo Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <!--需要手动添加该依赖--> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.18</version> </dependency> </dependencies>
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <body> <h2>Hello World!</h2> <a href="success.jsp">跳转</a></br> <a href="${ pageContext.request.contextPath }/success.jsp">跳转</a></br> <a href="/hello.action">helloAction跳转</a> </body> </html>
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h2>Success</h2> </body> </html>
struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <!--Struts2为了管理action的配置--> <package name="demo01" extends="struts-default" namespace="/"> <!--配置action:name-访问路径去掉action,class全路径--> <action name="hello" class="com.controller.HelloController" method="execute"> <!--配置页面跳转--> <result>success.jsp</result> </action> </package> <package name="demo02" extends="struts-default"> <action name="success"> <result>success.jsp</result> </action> </package> </struts>
web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <!--进行struts过滤器的配置(核心,也称前端控制器)--> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
controller层
package com.controller; public class HelloController { public String execute(){ System.out.println("Mycontroller--执行了"); return "success"; } }
Sturts加载顺序
1.default.properties
2.sturts-default.xml
3.struts-plugin.xml
4.struts.xml
5.sturts.properties
6.web.xml
后配置的常量会覆盖前配置的常量
Sturts文件的标签
1.package
可以有多个,很重要
<package name="demo01" extends="struts-default" namespace="/">
属性:
name:包的名称,名字随意,不重复即可
extends:继承哪个包,一般struts-default
namespace:访问路径前缀,跟<action>中的name属性组成路径,
取值:"/" ; “” ; “/aaa”.
abstract:用于其它包抽象,加了true属性其它包可以继承
1-1.action
<action name="hello" class="com.controller.HelloController" method="execute">
配置Action的类
属性:
name:与namespace共同觉得访问路径
calss:Action类全路径
method:对应的方法,默认execute
converter:用于设置类型转换器,
1-1-1.result
用于接受Action类的结果
属性:
name:对应Action方法返回的值
value:响应的路径
2.Struts2常量两配置--constant标签
位置:org.apache.Struts2.config.default.perproties
struts.i18n.encoding=UTF-8 post请求乱码处理
struts.action.extension=action,, 请求默认的扩展名,后缀是action/空,开发习惯的会加上.action
修改常量有三个位置:
struts.xml: <constant name="struts.action.extension" value="do,,"/>
web.xml:
<filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter </filter-class> <!--web配置初始化参数--> <init-param> <param-name>struts.action.extension</param-name> <param-value>do</param-value> </init-param> </filter>
sturts.properties: key,value进行配置-----struts.i18n.encoding=UTF-8
3.Struts2分模块开发--include标签
<!--模块开发时引入其它模块-->
<include file="struts/struts_user.xml"/>
实现Action接口
/** * 实现Action接口这种方式:提供了五个常量(五个逻辑视图的名称) * SUCDESS 成功 * REEOR 失败 * LOGIN 登录失败跳转的页面 * INPUT 表单校验的时候出错 * NONE 不跳转 */ public class UserController implements Action { public String getUser(){ System.out.println("UserController---getUser---执行了"); return "success"; } @Override public String execute() throws Exception { System.out.println("UserController---execute---执行了"); return "bbb"; } }
继承ActionSupport类
/** * ActionSupport实现了Action接口 * ActionSupport类强大的功能 */ public class Demo02Controller extends ActionSupport { @Override public String execute() throws Exception { System.out.println("DemoController---execute---执行了"); return NONE; } }
Action的访问方式
1.method
2.通配符
主页
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <body> <h2>Hello World!</h2> <a href="user_find.action">查询用户</a> <a href="user_save.action">保存用户</a> <a href="user_delete.action">删除用户</a> <a href="user_update.action">修改用户</a> </body> </html>
struts_user.xml配置文件
struts2 2.4之后需要加入<allowed-methods>方法1,方法2...</allowed-methods>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="demo04" extends="struts-default" namespace="/">
<!--通配符配置的方式-->
<action name="user_*" class="com.controller.UserAction" method="{1}">
<allowed-methods>delete,update,save,find</allowed-methods>
</action>
</package>
</struts>
UserAction
package com.controller;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
public String find(){
System.out.println("查用用户");
return NONE;
}
public String save(){
System.out.println("保存用户");
return NONE;
}
public String update(){
System.out.println("修改用户");
return NONE;
}
public String delete(){
System.out.println("删除用户");
return NONE;
}
}
3.动态访问
主页
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <body> <h2>Hello World!</h2> <H3>动态访问</H3> <a href="/product!find">查询用户</a></br> <a href="/product!save">保存用户</a></br> <a href="/product!delete">删除用户</a></br> <a href="/product!update">修改用户</a></br> </body> </html>
struts_product.xml配置文件
struts2 2.4之后需要加入<allowed-methods>方法1,方法2...</allowed-methods>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <!--开启动态访问action--> <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <package name="demo05" extends="struts-default" namespace="/"> <!--通过动态访问的方式--> <action name="product" class="com.controller.ProductAction"> <allowed-methods>delete,update,save,find</allowed-methods> </action> </package> </struts>
ProductAction.class
package com.controller; import com.opensymphony.xwork2.ActionSupport; public class ProductAction extends ActionSupport { public String find(){ System.out.println("查找商品"); return NONE; } public String save(){ System.out.println("保存商品"); return NONE; } public String delete(){ System.out.println("删除商品"); return NONE; } public String update(){ System.out.println("修改商品"); return NONE; } }