地址栏".jsp"变为".action"的含义

注意地址栏:未提交页面时,是login.jsp:

地址栏".jsp"变为".action"的含义_第1张图片

提交页面后,是Login.action:

 

在Struts.xml文件中有:

<action name="Login"
   class="com.example.struts.action.LoginAction">
   <result name="input">/jsp/login.jsp</result>
   <result name="success">/jsp/success.jsp</result>
  </action>

即,地址栏中Login.action是Action类对应的映射名。

提交的表单中的数据经由Action类处理后跳转到结果页面,地址栏中仍为Action类映射名。

下面我们再来看一个例子:

ErrorAndMessage.jsp:

<%@ page language="java" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
      <s:head />
    </head>
	<body>
	    <s:actionerror />
        <p>
            <s:actionmessage />
	</body>
</html>

ErrorAndMessageAction.java:

package com.example.struts.action;
import com.opensymphony.xwork2.ActionSupport;

public class ErrorAndMessageAction extends ActionSupport{
	public String execute() throws Exception{
		addActionError("Action 的错误信息");
		addActionMessage("Action 的消息信息");
		return SUCCESS;
	}
}

struts.xml:

	<action name="ErrorAndMessage"
            class="com.example.struts.action.ErrorAndMessageAction">            
            <result name="success">/jsp/ErrorAndMessage.jsp</result>
        </action>

 

若在地址栏输入:http://localhost:8080/Tg/jsp/ErrorAndMessage.jsp 则什么都不输出。

若在地址栏输入:http://localhost:8080/Tg/jsp/ErrorAndMessage.action 则输出如下:

原因:之前是直接运行.jsp页面,这样标签<s:actionerror />和<s:actionmessage /> 就什么值都没有;

之后是直接运行.action,这样就通过addActionError和addActionMessage方法初始化了error和message,

接着由struts.xml导航到JSP页面,这时标签<s:actionerror />和<s:actionmessage /> 就有值可取了。

注:直接运行.jsp页面之所以不经过struts.xml导航,是因为它没有经过<form>表单"提交"操作。

你可能感兴趣的:(地址栏".jsp"变为".action"的含义)