玉兰花是如何完成请求映射的?

Posted

技术标签:

【中文标题】玉兰花是如何完成请求映射的?【英文标题】:How request mapping is done in magnolia blossom? 【发布时间】:2015-03-30 11:18:58 【问题描述】:

这是我拥有的以下控制器代码:

 package com.newposition.templates.components;

 import javax.jcr.Node;
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;

 import info.magnolia.module.blossom.annotation.Template;

 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.util.StringUtils;
 .......
 .......

@Controller
@Template(title = "Login Form", id = "newPositionModule:components/login")
public class LoginFormComponent 
@Autowired
private LoginServiceImpl loginServiceImpl;
/*@RequestMapping(value =  "/", "/welcome**" , method = RequestMethod.GET)
public String defaultPage() 

    ModelAndView model = new ModelAndView();
    model.addObject("title", "Spring Security + Hibernate Example");
    model.addObject("message", "This is default page!");
    model.setViewName("home");
    return "components/loginSucess.jsp";

*/

@RequestMapping(value = "/login", method = RequestMethod.GET)
public String render(@ModelAttribute LoginForm loginForm,HttpServletRequest request) 
    return "components/loginForm.jsp";


@RequestMapping(value = "/login", method = RequestMethod.POST)
public ModelAndView rendering( @ModelAttribute("loginForm") @Valid LoginForm loginForm,BindingResult result,HttpServletRequest request) 
    String viewName = "";
    String user=loginServiceImpl.verifyLogin(loginForm);
      if(user!=null)
      
          request.getSession().setAttribute("valid", true);
          request.getSession().setAttribute("user", user);
          request.getSession().setAttribute("authenticate", false);
          viewName = "components/loginSucess.jsp";
          return  new ModelAndView(viewName);
      
      else
          request.getSession().setAttribute("authenticate", true);
          viewName = "components/loginForm.jsp";
          return  new ModelAndView(viewName);
      


下面这个Jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
 <%@ taglib
uri="http://magnolia-cms.com/taglib/templating-components/cms"
prefix="cms"%>
<%@ taglib
uri="http://magnolia-cms.com/taglib/templating-components/cmsfn"
prefix="cmsfn"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="blossom-taglib" prefix="blossom"%>


<c:if test="$authenticate">
<b style="color:red; margin-left:560px" align="center">Please Enter a Valid Credentials</b>
 </c:if> 
<form:form id="loginform" action="?" commandName="loginForm" method="POST">
<blossom:pecid-input />
<div class="container">
    <ul class="login_box">
        <li>
            <div class="form-group">
                <form:input path="firstName" id="username" placeholder="Username"  class="form-control"/>
            </div>
            <div class="form-group">
                <form:password path="password" id="password" placeholder="Password"  class="form-control"/>
            </div>
            <div class="form-group">
                <button class="lgn_btn" type="submit" onsubmit="return validateForm()">Login</button>
            </div>
            <hr>
            <div class="form-group">
                <button class="lgn_btn" type="submit">Register as a new
                    user</button>
            </div>
            <a href='resetpassword'><button class="lgn_btn" type="button">Reset password</button></a>
        </li>
    </ul>
  </div>
</form:form>

当表单提交时,请求将转到上面的控制器 post 方法。

在jsp中有"form action="?""

那么它是如何映射到特定控制器方法的。

请提出建议。

【问题讨论】:

【参考方案1】:

我相信最近回答了同样的问题here 它将被提交到呈现表单的同一页面,并最终在同一个 Spring Controller 中。

【讨论】:

以上是关于玉兰花是如何完成请求映射的?的主要内容,如果未能解决你的问题,请参考以下文章

浅析Spring Boot请求映射原理

grpc 完成异步 java 服务请求/响应映射

Tomcat——Mapper(url到Wrapper的映射)

RestKit - 没有对象映射的请求

如何过滤所有传入的请求,而不仅仅是映射到 servlet 的请求?

承诺所有并获取请求