struts2
主要写一些学习的常见操作,跟着别人的视频学的希望大家喜欢。
一,环境的搭建
1.拷jar包就不用说了,网上下好jar包将里面案例的jar包加载到项目就好
2.配置核心过滤器。配置信息写在WEB-INF的web.xml中。高版本是没有自动建立这个xml文档的,如果没有就自己建一个开头的
写法网上都有实在不行就拷贝。不写在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>
3.建立struts.xml的配置文件,放在应用的类路径的顶端(开发中:src目录下)
<?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>
<constant name="struts.devMode" value="true" />
</struts>
Struts2的配置文件和加载顺序
1、default.properties 该文件保存在 struts2-core-2.3.7.jar 中 org.apache.struts2中
2、struts-default.xml 该文件保存在 struts2-core-2.3.7.jar
3、struts-plugin.xml 该文件保存在struts-Xxx-2.3.7.jar(struts2的插件jar包中)
4、struts.xml 该文件是web应用默认的struts配置文件
5、struts.properties 该文件是Struts的默认配置文件。构建路径的顶端
6、web.xml应用的配置文件
按照从1到6的顺序加载配置文件。后面的内容会覆盖前面的内容。
编写Action类并配置
Action类其实就是一个java实例类,你可以选择直接写也可以选择实现框架的Action接口
一般选择继承ActionSupport它实现了接口而且提供了很多常量和方法。
public class ActionTest extends ActionSupport{
public String test(){
System.out.println("测试");
return SUCCESS;//这些常量就是继承父类而来。
//Action类的方法一般都返回一个字符串,以便在配置信息中查找后续操作。
}
}
//前面的name为访问时的url地址资源 后面的method为访问该类的那个方法
<action name="test" class="com.test.action.ActionTest" method="test">
<result name="success">/success.jsp</result>
//result可以配置多个通过方法的返回值来决定后续操作也可以转向另一个action类也可以转向页面。
</action>
获取Servlet有关的类
public String test1(){
//获取四大域对象信息。
HttpServletRequest requet = ServletActionContext.getRequest();
PageContext page = ServletActionContext.getPageContext();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = ServletActionContext.getRequest().getSession();
ServletContext context = ServletActionContext.getServletContext();
return SUCCESS;
}
自定义结果类型
//实现接口
public class ResultTest implements Result{
@Override
public void execute(ActionInvocation ai) throws Exception {
//功能写在这
System.out.println("这个方法内写你要实行的逻辑,当然是指execute这个方法");
}
}
//声明结果类型
<result-types>
<result-type name="captcha" class="com.test.action.ResultTest></result-type>
</result-types>
//使用结果类型
<action name="captcha">
<result name="success" type="captcha"></result>
</action>
封装请求参数
第一种方法就是讲请求对应的类作为模型对象,直接封装请求参数。
对应的类的字段和请求参数的name一致并提供get和set方法
第二种方法为动作类和模型对象分离。在动作类中提供模型对象的get和set方法。
框架会探测这个模型是否为空,如果为空,注入他的实例,分别调用该对象的属性,注入值。
第三种方法为(模型和动作分开)模型驱动:ModelDriven
动作类实现ModelDriven接口即可,在接口中设置模型对象通过名字为modelDriven拦截器完成的。
该拦截器会在调用动作方法前,调用getModel(),得到模型对象,
他接着把该模型对象压到了值栈的栈顶。表单的username的值,框架就会调用栈顶对象的setUsername方法。