1. 程式人生 > >javaweb action無法跳轉、表單無法跳轉的解決方法

javaweb action無法跳轉、表單無法跳轉的解決方法

action無法跳轉,表單無法跳轉的解決方法
剛在網上搜索了一下,發現我的這篇文章已被非常多人轉載了去其他站點。暗爽大笑,只是還是希望大家註明出處。

順便說明一下。下面是在struts2中通過測試的


action無法跳轉、表單無法跳轉的原因: 說明 :在確保你專案的其他action、表單能正常跳轉的情況下,查詢下面3個原因。
1、確認action中有無寫錯,struts中有無指定action的class 如:<action name="*User" class="com.login.action.LoginAction" method="{1}">,假設後臺java中沒有這裡class指定的路徑,那麼將無法跳轉

2、表單有沒有後綴,如指定字尾是action,則一定要配置  <url-pattern>*.action</url-pattern>或 <url-pattern>/*</url-pattern>

3、form表單中的action是否可以與struts.xml裡action的name匹配 如:jsp表單<form action="saveUser.action" id="infoForm" method="post">,假設在struts.xml找不到<action name="*User" class=" ####  ">(這裡的*User,*是萬用字元)或<action name="saveUser" class=" ####  ">,將無法跳轉


jsp form表單中的action無法跳轉 假設表單中action中沒有後綴,使用   <url-pattern>*.action</url-pattern> 這樣的配置將無法跳轉,由於匹配不了字尾名。
  使用 <url-pattern>*.action</url-pat tern> 時 如: 1、
<form  action="saveChild.action"
 id="infoForm" method="post">  action有後綴名,這樣的能正常跳轉
2、 <form  action="saveChild"  id="infoForm" method="post">  action沒有後綴名,無法跳轉
但假設使用   <url-pattern>/*</url-pattern> 在表單中即使action中沒有後綴名,即<form  action="saveChild" id="infoForm" method="post">。 也能跳轉
假設表單正常跳轉,控制檯應該會打印出這種方法。如: 2014-05-06 12:11:52,404 DEBUG (org.apache.struts2.interceptor.FileUploadInterceptor:68) -  Bypassing //saveChild 2014-05-06 12:11:52,407 DEBUG (org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor:68) -  Validating //saveChild with method save.
依據我自己的經驗,假設控制檯沒有打印出“Bypassing // action名”,那麼表單的action都是無法正常跳轉到後臺的
 <url-pattern>/*</url-pattern>
使用 <url-pattern>/*</url-pattern>這樣的會將servlet攔截了,假設專案中有單獨建立的servlet。那麼將無法訪問這個servlet,如平時使用servlet建立一個驗證碼的連結
所以假設要使用驗證碼的servlet,那麼就將使用下面這樣的配置了
 <filter-mapping>     <filter-name>struts</filter-name>     <url-pattern>*.action</url-pattern>     <url-pattern>*.jsp</url-pattern>   </filter-mapping>
jsp訪問時,無法訪問 假設僅僅定義了   <url-pattern>*.action</url-pattern>;而未定義 <url-pattern>*.jsp</url-pattern>。那麼jsp也將無法訪問

一個通過測試的web.xml檔案。沒有給出web.xml檔案頭,由於包括了url,部落格不準發url
  <display-name>unionweb</display-name>       <!-- 監聽器,整合spring中使用 -->    <listener>     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>   </listener>     <!-- spring的 applicationContext.xml檔案存放路徑,類路徑-->   <context-param>     <param-name>contextConfigLocation</param-name>     <param-value>classpath:applicationContext.xml</param-value>   </context-param>     <!-- 下面是struts2的過濾器的配置 -->   <filter>     <filter-name>struts</filter-name>     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>   </filter>     <filter-mapping>     <filter-name>struts</filter-name>       <!--     <url-pattern>/*</url-pattern>        -->     <url-pattern>*.action</url-pattern>     <url-pattern>*.jsp</url-pattern>   </filter-mapping>   <welcome-file-list>     <welcome-file>login.jsp</welcome-file>   </welcome-file-list>  
說明:以上所有都是我自己經過測試的,如說的不正確。還望大家指出