当前位置: 首页 > 知识库问答 >
问题:

Spring MVC 404在某些请求上出错

锺离赤岩
2023-03-14

我正在Apache7.xx应用程序上开发Spring MVC,并且没有任何错误地设置了所有内容。

我有一个应用程序将我的dispatcher servlet映射到HomeController,HomeController为视图“home/view”提供服务,该视图也在工作。

<form action="/UserRegisteration/RegisterForm" method="POST">
                <table width="283" border="1">
  <tr>
    <td width="123"><label for="firstname">First Name</label></td>
    <td width="144"><input type="text" name="firstname" id="firstname"></td>
  </tr>
  <tr>
    <td><label for="lastname">Last Name</label></td>
    <td><input type="text" name="lastname" id="lastname"></td>
  </tr>
  <tr>
    <td><label for="email">Email</label></td>
    <td><input type="text" name="email" id="email"></td>
  </tr>
  <tr>
    <td><label for="phonecontact1">Phone Contact 1</label></td>
    <td><input type="text" name="phonecontact1" id="phonecontact1"></td>
  </tr>
  <tr>
    <td><label for="phonecontact2">Phone Contact 2</label></td>
    <td><input type="text" name="phonecontact2" id="phonecontact2"></td>
  </tr>
  <tr>
    <td><label for="address1">Address 1</label></td>
    <td><input type="text" name="address1" id="address1"></td>
  </tr>
  <tr>
    <td><label for="address2">Address 2</label></td>
    <td><input type="text" name="address2" id="address2"></td>
  </tr>
  <tr>
    <td><label for="industry ">Industry </label></td>
    <td><input type="text" name="industry " id="industry "></td>
  </tr>
  <tr>
    <td><label for="password">Enter Desired Password</label></td>
    <td><input type="text" name="password" id="password"></td>
  </tr>
  <tr>
    <td><input type="reset" name="clear " id="clear " value="Clear Fields"></td>
    <td><input type="submit" name="register" id="register" value="Register"></td>
  </tr>
</table>
</form>
(UserRegisterationController.java)
@Controller
@RequestMapping("/UserRegisteration")
public class UserRegisterationController {
    @Autowired
    private RegisterationService registerationService;
    @Autowired
    private UserAccountService userAccountService;
    @Autowired
    private PasswordService passwordService;
    public UserRegisterationController() {
    }
    public UserRegisterationController(RegisterationService registerationService, UserAccountService userAccountService, PasswordService password) {
        this.registerationService = registerationService;
        this.userAccountService = userAccountService;
        this.passwordService = password;
    }
    //if checked on register link , forward to registeration page
    @RequestMapping(value="/RegisterForm", method=RequestMethod.GET)
    public String serveRegisterationView()
    {
       return  "UserAccount/Register";
    }
    @RequestMapping(value="/RegisterForm", method=RequestMethod.POST)
    public String createUserAccountRegisteration()
    {
     //if submited registeration 
    //check for previous registeration 
    //if registered prompt , forward to sign in 
    //else create registeration , and user account , and password , forward to main user page  
       return  "UserAccount/Register";
    }

}
<web-app metadata-complete="true" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
        /WEB-INF/applicationContext.xml
        /WEB-INF/hibernate-context.xml
        </param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>cmgr</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>cmgr</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout> 
            30 
        </session-timeout>
    </session-config>
</web-app>

spring-servlet相关片段(在我的例子中是cmgr-servlet)

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"     
        p:prefix="/WEB-INF/views/" p:suffix=".jsp" p:viewClass="org.springframework.web.servlet.view.JstlView" />

applicationcontext.xml(相关代码段)

 <!-- Activates various annotations to be detected in bean classes --> 
    <context:annotation-config />
    <!-- Scans the classpath for annotated components that will be auto-registered as Spring beans.   For example @Controller and @Service. Make sure to set the correct base-package--> 
    <context:component-scan base-package="com.cmgr.*" />    
    <!-- Configures the annotation-driven Spring MVC Controller programming model.  Note that, with Spring 3.0, this tag works in Servlet MVC only!  --> 
    <mvc:annotation-driven/>
    <!-- mapping of static resources-->
    <mvc:resources mapping="/resources/**" location="/resources/" />

</beans>

register.jsp表单sumbmit的结果:

我注意到浏览器url缺少我的应用程序上下文(/cmgr)正确的url应该是“http://localhost:8084/cmgr/userregisteration/registerform”

共有1个答案

宇文鸿振
2023-03-14

register.jsp表单的结果sumbmit:浏览器URL:(http://localhost:8084/userregisteration/registerform)

我注意到浏览器url缺少我的应用程序上下文(/cmgr)正确的url>应该是“http://localhost:8084/cmgr/userregisteration/registerform”

这是正确的,上下文根“/cmgr”丢失了。把你的观点展示给我们,想必表单动作就是问题所在。

您可以使用Spring url标记,如下所示:

<spring:url value="/UserRegisteration/RegisterForm" var="targetURL"/>

<form action="${targetURL}" [...] >
</form>`
 类似资料:
  • 问题内容: 我正在尝试使用验证进入服务的请求。一切正常,但是有一个问题- 每个请求都通过过滤器,即使某些过滤器永远不会应用到它们(一个过滤器仅在ResourceOne上验证,另一个过滤器仅在ResourceTwo上验证)。 有没有一种方法可以将过滤器设置为仅在特定条件下只能在请求上调用? 虽然它不是障碍或障碍,但是能够阻止这种行为会很好:) 问题答案: 我假设您正在使用Jersey 2.x(JAX

  • 问题内容: 我正在使用Express框架使用Node.js编写一个小型Web应用程序。我正在使用csrf中间件,但是我想对某些请求禁用它。这就是我在应用程序中添加它的方式: 我想设置没有csrf控件的POST路由。 问题答案: 有几种可能的方法。您基本上需要了解最简单和最正确的规则,以便决定是否使用csrf中间件。如果您大部分时间都希望使用csrf,除了一小部分请求模式白名单,请遵循此答案中我关于

  • 问题内容: 我对使用roku和roku特定语言(BasicScript)非常了解。我需要对某些服务器进行api调用以获取频道。我不明白如何在roku中做到这一点。请提出建议。 问题答案: 这是直接执行此操作的方法,而不必依赖SDK中包含的代码库的语法: 阻止方法(所有程序执行停止,直到检索到URL): 非阻塞方法,您可以在等待数据时执行其他操作:

  • 问题内容: 所以我想做些类似的事情: 当前需要一条路径,例如,如果我给出此路径,则它仅在我位于主页上时才起作用,因此并不是全部。 在普通的node.js中,就像在创建http服务器之后,在进行页面路由之前编写任何内容一样简单。 那么如何使用Express来做到这一点,最好的方法是什么? 问题答案: Express基于Connect中间件。 Express的路由功能由您的应用程序提供,您可以自由地将

  • 我的Android应用程序无法安装在一些“随机”、较旧的API设备上(任何低于API级别25的设备),错误如下: 所以,基本上看起来… API 我见过类似的问题,答案与小写的包名有关。我已经有了。 有人有什么想法吗? 舱单: BTW我用的是Visual Studio 2019和一夫一妻制3.7

  • 问题内容: 我想使用Tor向网页发出多个GET请求。我想为每个请求使用不同的ipaddress。 使用此,我提出了一个请求。如何更改ipaddress来做另一个? 问题答案: 这是您要使用的代码(使用来下载词干包) 祝你好运,希望能成功。