Spring MVC: URL-адрес, добавляемый при отправке формы
Я новичок в spring mvc. Я создал простое приложение для входа. но в моем случае первый раз для правильного размещения URL-адреса и вызова контроллера. во второй раз он добавляет путь с еще одним временем контроллера. первый пост:
//localhost: 8090/springmvc/account/login Секундомер на той же странице: //localhost: 8090/springmvc/account/account/login. как устранить эту проблему перенаправления?
эта страница моего контроллера:
@Controller
@RequestMapping("account")
public class AccountController {
AccountService service = new AccountService();
@RequestMapping(value = "account/default", method = RequestMethod.GET)
public ModelAndView RegisterUser() {
return new ModelAndView("/Account/Index","command",new User());
}
@RequestMapping(value = "/registeruser", method = RequestMethod.POST)
public ModelAndView RegisterUser(User user) {
user.setMessage(service.Register(user));
return new ModelAndView("/Account/Index", "command", user);
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public ModelAndView RegisterUer(User user) {
user.setMessage(service.Register(user));
return new ModelAndView("/Account/create", "command", user);
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public ModelAndView LoginUser(User user, ModelMap model) {
String msg = service.isAuthendicated(user) ? "Logged in" : "Failed";
user.setMessage(msg);
return new ModelAndView("/Account/Index", "command", user);
}
}
это моя страница jsp:
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags"%>
<t:genericpage>
<jsp:body>
<h2>Login</h2>
<div>
${command.message} </div>
<a href="account/register">Register</a>
<form:form action="account/login" method="post">
<div>
<form:input path="username" />
</div>
<div>
<form:input path="password" />
</div>
<input type="submit" value="Login">
</form:form>
</jsp:body>
</t:genericpage>
Я использовал библиотеку тегов для общей страницы:
<%@tag description="Master Page" pageEncoding="UTF-8"%>
<html>
<body>
<div id="pageheader">
<h2>WElcome</h2>
</div>
<div id="body">
<jsp:doBody />
</div>
<div id="pagefooter">
<p id="copyright">Copyright</p>
</div>
</body>
</html>
Ответы
Ответ 1
В зависимости от используемой версии Spring, вот несколько вариантов:
Spring 3.1 и ниже OR Spring 3.2.3 и выше
У вас должны быть ваши URL-адреса/действия, относящиеся к вашему пути к контенту.
<form:form action="${pageContext.request.contextPath}/account/login" method="post">
Примечание: Spring 3.2.3 введено servletRelativeAction
, но я никогда не использовал его.
Spring 3.2
Не делайте ничего, путь контекста добавляется - это было фактически нарушение и в конечном итоге откат.
<form:form action="/account/login" method="post">
//will produce action="/springmvc/account/login"
Ответ 2
Запустите действие формы с помощью /
.
<form:form action="/account/login" method="post">
Не выполняя этого действия, вы сообщаете браузеру добавить действие к уже существующему URL-адресу в адресной строке.
И где у вас есть такие ссылки непосредственно в HTML (не используя Spring form:form
), попробуйте использовать c:url
, чтобы правильно построить URL-адрес, включая контекстный путь и т.д. Это отнимает много времени от строительства правильные относительные URL-адреса.
<a href="<c:url value="/account/register" />">Register</a>