JSP:转发问题

时间:2010-10-20 10:42:52

标签: java jsp struts

我刚刚开始进行网络应用开发。我有一个只有一行的index.jsp。

  

< jsp:forward page =“landing.do?”/>

什么是

  
      
  • 以上行吗?

  •   
  • page =“landing.do?”实际上是指?

  •   
  • “landing.do?”旁边的问号“”表示什么?

  •   

正如Bozho正确指出的那样,一个名为“action”的servlet被映射为在我的web.xml中处理“*。do”(如下所示)。

<servlet-mapping>

    <servlet-name>action</servlet-name>

    <url-pattern>*.do</url-pattern>

</servlet-mapping>

现在

  

如何找出“landing.do”对应的servlet“动作”实际上是什么?

感谢。

3 个答案:

答案 0 :(得分:4)

<jsp:forward>将客户端请求转发给page属性上声明的网址。

我还需要提一下,在您的示例中,如果要指定相对URL,则应在/声明中设置page作为第一个字符,即:

实际上,这被转换为重定向到(如果是localhost)

http://localhost:8080/MyAPP/landing.do? (你的翻译成http://localhost:8080/MyAPPLanding.do?)

?允许您将application/x-www-form-urlencoded参数附加到声明中。

更多信息here


要了解landing.do的作用,请执行以下操作:

  • 转到struts-config.xml(位于项目的WEB-INF文件夹中)文件,找到<action>)属性的任何操作(path="/landing")。
  • 找到您的操作后,会有一个名为type的属性(在该操作中)。该类型是Struts调用以执行操作的操作类的类名。类名是完全限定名。
  • 打开该类的java文件(如果存在)并根据操作(ActionDispatchActionLookupDispatchAction),您必须找到其映射并查看方法Struts调用。
  • 在您的示例中,我的假设将基于您的landing.do类型为Action。因此,请阅读execute()方法的作用。实际上,所有行动都是Struts的execute()。其他操作只是Template Method模式,它们知道某些映射要调用的方法。

答案 1 :(得分:1)

此行会将用户转发到该网站的另一个页面,尤其是 landing.do

页= “landing.do?”实际上是指网站 landing.do 的某些页面。我相信这个页面是用Struts框架编写的。 (但可以是其他)

问号是什么?“在“landing.do”旁边在这种情况下毫无意义。一般在“?”之后应该有一个请求参数列表。在这种情况下,将没有参数。

<强>更新 您应该找到映射到该servlet名称的servlet类。之后,您将能够尝试了解该servlet类的功能。另外,请查看Struts教程或规范,以了解Struts框架工作流。

答案 2 :(得分:1)

  • 您可能已将servlet映射到web.xml中的*.do
  • ?在这里没有任何意义 - 通常它标记了get参数的开头(例如?param=value
  • forward使用指定的内容更改当前页面,而客户端不知道发生了更改。