一、编写动作类的三种方式
1、第一种方式:
创建一个普通的Java类。它就是一个POJO(Plain Old Java Object),原始老的Java对象
public class DemoAction{
public String hello(){
return "success"
}
}
2、第二种方式:
创建一个普通类,实现Action接口,实现接口中的方法
/**
*Action接口中的常量
*SUCCESS "success" 当执行成功后,前往指定的位置
*NONE "none" 不返回任何结果视图,相当于return null
*ERROR "error" 出现异常时,前往指定页面
*INPUT "input" 用于数据回显
*LOGIN "login" 一般用于返回登录页面
*/
public class DemoAction implements Action{
public String execute() throws Exception{
return null;
}
}
3、第三种方式(开发中常用)
创建一个普通类,继承ActionSupport
public class DemoAction extends ActionSupport{
//当我们不写动作方法时,有一个默认的动作方法:execute()
}
二、动作方法
写动作方法要求:方法必须是public类型;必须没有参数;返回值是String类型
public class DemoAction extends ActionSupport{
public String actionMethod(){
return "success"
}
}
三、获取servletAPI
1、获取servletAPI的第一种方式
//动作方法
public String actionMethod(){
HttpServletRequest request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
HttpSession session=request.getSession();
ServletContext application=ServletActionContext.getServletContext();
}
2、获取servletAPI的第二种方式(依赖注入)
private HttpServletRequest request;
private HttpServletResponse response;
private ServletContext application;
public void setServletContext(ServletContext context){
application=context;
}
public void setServletRequest(HttpServletRequest request){
this.request=request;
}
public void setServletResponse(HttpServletResponse response){
this.response=response;
}
四、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>
<!--设置开发者模式-->
<constant name="struts.devMode" value="true"/>
<!--package:是指包,内可以写多个动作;name:包名称(唯一) extends:继承struts默认的配置-->
<package name="p1" extends="struts-default">
<!--action中 name:动作名称(相当于标识) class:动作类的全名 method:方法名称(执行相应方法的名称)-->
<action name="action1" class="com.san.action.Action1" method="actionMethod">
<!--result结果视图(相当于当该方法执行成功,返回success时,跳转到success.jsp页面)-->
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
五、关于struts.xml没有提示的问题
原因:没有找到对应的dtd文件(或者是电脑没有联网或者没有加配置的约束)。
电脑没有联网时:
解决方法:
找到struts-2.3.dtd解压出来(按图中步骤来)
六、struts.xml中结果视图转发和重定向
注意:namespace的默认值是:”“(空字符串),而不是”/”。
<!--转发到同包-->
<action name="动作名" class="动作类全名" method="动作方法名">
<result name="返回名" type="chain"></result>
</action>
<!--重定向到同包-->
<action name="动作名" class="动作类全名" method="动作方法名">
<result name="返回名" type="redirectAction"></result>
</action>
<!--转发到不同的包-->
<action name="" class="" method="">
<result name="" type="chain">
<!--使用注入思想-->
<param name="namespace">另一个包的namespace的值</param>
<param name="actionName">需要转发到的action或者页面</param>
</result>
</action>
<!--重定向到不同的包-->
<action name="" class="" method="">
<result name="" type="redirectAction">
<!--使用注入思想-->
<param name="namespace">另一个包的namespace的值</param>
<param name="actionName">需要转发到的action或者页面</param>
</result>
</action>