struts2
1.Struts2 是一个基于MVC的设计模式,的WEB应用层的框架啊,本质上就是一个Servlet
2.在MVC的设置模式中,Struts2处于控制层,来进行建立模型与视图的数据交互,
3.Struts2以WEBWork来为核心作为基础,进行运行的
创建工程加载对应的jar包
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-lang3-3.2.jar
freemarker-2.3.22.jar
javassist-3.11.0.GA.jar
log4j-api-2.2.jar
log4j-core-2.2.jar
ognl-3.0.6.jar
struts2-core-2.3.24.jar
xwork-core-2.3.24.jar
在SRC目录创建 .xml文件
导入 dtd文件头
}
进行配置Struts的xml文件
<package extends="struts-default" name="hello" namespace="/hello">
<action class="com.java.struts.action.Test_Action_01" method="execute" name="Test_Action_01">
<result name="success">/success.jsp</result>
</action>
</package>
进行配置WEB.xml文件
<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>
配置文件的描述
<struts>
</struts>
<!-- package Action 的进行封装。可以进行配置多个action name 取名称,不要重复 namespace 给action 的访问路径定义的一个名称空间 extends 继承默认一个拦截器 的一个名称 abstract="" 包是否为抽象的,标识。属性,此包不能直接运行,只能继承 ture 抽象 false 非抽象(默认的) 如 <package name=,"struts-default" abstract="true"> --> <package name="hello" namespace="/hello" extends="struts-default"> <!-- 可以进行定义全局的结果集--> <global-results> <!-- result 执行返回的结果集的 name="outLogin" 名称 type = 跳转的类型 重定向 或者 转发 --> <result name="outLogin" type="redirect">/login.jsp</result> </global-results> <!-- 当出现异常的时候进行跳转到错误的页面的 --> <global-exception-mappings> <!-- exception="`" 异常的包路径如:java.long.Exception result="" 跳转的页面的名称 如 error --> <exception-mapping exception="`" result=""></exception-mapping> </global-exception-mappings> <!-- name="Test_Action_01" 名称-路径访问的地址名称 class= action完整的类路径 method= 调用action类中的方法 ,处理请求的方法 --> <action name="Test_Action_01" class="com.java.struts.action.Test_Action_01" method="execute"> <!-- 进行处理结果的 name="success" 标识结果处理的名称(执行某个方法返回的值,必须是一致) type = 跳转的类型 重定向 或者 转发(默认) 标签体:编写就是页面的路径 /success.jsp --> <result name="success" >/success.jsp</result> <result name="success01">/success.jsp</result> </action> </package> <!--可以进行引入其他的struts.xml文件--> <include file="com\java\struts\action\struts.xml"></include>
常用的配置
struts.i18n.encoding=UTF-8 格式化字符集编码
方式一:
进行配置
<struts>
方式二
<context-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>utf-8</param-value>
</context-param>
常用配置的使用</struts>
<!--进行配置格式化字符集的--> <constant name="struts.i18n.encoding" value="utf-8"></constant> <!-- 指定请求路径地址的action 的后缀名 --> <constant name="struts.action.extension" value="action,,"></constant> <!--进行配置开发模式--> <constant name="struts.devMode" value="false"></constant> <!--进行配置动态方法进行调用 是否开启 默认false--> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
动态的加载
方式一
<!--进行配置格式化字符集的--> <constant name="struts.i18n.encoding" value="utf-8"></constant> <!--进行配置动态方法进行调用 是否开启 默认false--> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <package name="hello" namespace="/hello" extends="struts-default"> <action name="Test_Action01" class="com.test.struts.action.Test_Action01" > <result name="success" >/success.jsp</result> </action> </package>
页面执行
</form>
方式二:
<package extends="struts-default" name="hello" namespace="/hello">
<action class="com.test.struts.action.Test_Action01" method="{1}" name="Test_Action01_*">
<result name="success">/success.jsp</result>
</action>
</package>
--
<form action="hello/Test_Action01_getAdd" method="post">
</form>
转发和重定向
<action class="com.java.struts.action.Test_Action_01" name="Test_Action_01">
<!–转发–>
<result name="success" type="dispatcher">/success.jsp</result>
<!–重定向–>
<result name="del" type="redirect">/success.jsp</result>
</action>
action 和action之间的转发
<action class="com.java.struts.action.Test_Action_01" method="getAdd" name="Test_Action_01">
<result name="success" type="dispatcher">/success.jsp</result>
</action>
<action name="Test_Action_02" class="com.java.struts.action.Test_Action_02" > <!--转发 到 action中 Test_Action_02 准发到 Test_Action_01--> <interceptor-ref name="basicStack" /> <result name="success" type="chain">Test_Action_01</result> </action>
action 和action之间的重定向
<action class="com.java.struts.action.Test_Action_01" method="getAdd" name="Test_Action_01">
<result name="success" type="dispatcher">/success.jsp</result>
</action>
<action class="com.java.struts.action.Test_Action_03" name="Test_Action_03">
<result name="success" type="redirectAction">
<object>Test_Action_01
/hello
</object></result>
</action>
Struts2 中获取Servlet的API
public String getAdd(){
ActionContext.getContext().put("name","RequestName");//相当于Servlet中的request域 //session Map<String, Object> session = ActionContext.getContext().getSession(); session.put("lastName","sessionName"); //appliaction Map<String, Object> application = ActionContext.getContext().getApplication(); application.put("lastAge","application"); return "success"; }
<action name="Test_Action_04_Servlet" class="com.java.struts.action.Test_Action_04_Servlet" > <result name="success" >/success.jsp</result> </action>
---
\{requestScope.name}
\{sessionScope.lastName}
\{applicationScope.lastAge}
获取页面数据对象了
方式一:
*/
public class Users {
private Integer id; private String name; private Date date; //get set 方法 public class Test_Action_05_User extends ActionSupport { //获取页面的数据 private Users users; //对应的get set 方法 public String getAdd(){ System.out.println("页面的数据信息::"+users); return "success"; } ----- <action name="Test_Action_05_User" class="com.java.struts.action.Test_Action_05_User" > <result name="success" >/success.jsp</result> </action> 页面的提交 <FORM ACTION="hello/Test_Action_05_User!getAdd" method="post" > <%--是属性名称 get set 方法的名称 去掉get set 首字母小写--%> <input TYPE="text" NAME="users.name" VALUE="小王"><br/> <input TYPE="text" NAME="users.id" VALUE="123"><br/> <input TYPE="text" NAME="users.date" VALUE="2019-12-12"><br/> <INPUT TYPE="submit" VALUE="提交"><BR/> </FORM>
方式二:
public class Test_Action_06_User extends ActionSupport implements ModelDriven<users> {
//获取页面的数据
private Users users=new Users();</users>
public String getAdd(){ System.out.println("页面的数据信息::"+users); return "success"; } @Override public Users getModel() { return users; }
}
------------
<action class="com.java.struts.action.Test_Action_06_User" name="Test_Action_06_User">
<result name="success">/success.jsp</result>
</action>
----------- <FORM ACTION="hello/Test_Action_06_User!getAdd" method="post" > <input TYPE="text" NAME="name" VALUE="小王"><br/> <input TYPE="text" NAME="id" VALUE="123"><br/> <input TYPE="text" NAME="date" VALUE="2019-12-12"><br/> <INPUT TYPE="submit" VALUE="提交"><BR/>
获取集合数据 public class Test_Action_07_List extends ActionSupport{ private List<String> list; public String getAdd(){ for (String o : list) { System.out.println(o); } return "success"; } public List<String> getList() { return list; } public void setList(List<String> list) { this.list = list; }
}----------
<action name="Test_Action_07_List" class="com.java.struts.action.Test_Action_07_List" > <result name="success" >/success.jsp</result> </action> ---------页面<form action="hello/Test_Action_07_List!getAdd" method="post"> <%--是属性名称 get set 方法的名称 去掉get set 首字母小写--%>
获取map数据 public class Test_Action_08_Map extends ActionSupport{ private HashMap<String,Object> map; public String getAdd(){ System.out.println(map); return "success"; } public HashMap<String, Object> getMap() { return map; } public void setMap(HashMap<String, Object> map) { this.map = map; }
}
xml的编写
<action name="Test_Action_08_Map" class="com.java.struts.action.Test_Action_08_Map" > <result name="success" >/success.jsp</result> </action>
<%--是属性名称 get set 方法的名称 去掉get set 首字母小写--%>
</form>