我正在学习Spring 3.1。
我的webapp名字是“acme”。
网址大致是https://blah.blah.blah/acme
该 URL 设置为显示登录名.jsp
我在我的控制器中有一个“/登录”映射,我的login.jsp提交给它
如果出现问题,它返回用户到login.jsp与此网址在浏览器:https://blah.blah.blah/acme/login
“/登录”映射是为了处理POST请求而设置的,所以我担心用户https://blah.blah.blah/acme/login添加书签,并得到“GET请求不受支持”的错误消息
因此,我想我应该放一个函数来处理对/登录的GET请求,以便通过我的“/”和“/home”的通用映射处理程序重新路由:
登录控制器.java
package gov.noaa.acme.controller;
import java.security.Principal;
import javax.servlet.http.*;
import org.springframework.stereotype.Controller;
import org.springframework.validation.*;
import org.springframework.ui.ModelMap;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.apache.log4j.Logger;
@Controller
public class LoginController {
private static final Logger logger = Logger.getLogger(LoginController.class);
@RequestMapping({"/","home"})
public String home(ModelMap model,HttpSession session,HttpServletRequest request) {
// Do some stuff
return "login";
}
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login_get(){
logger.debug("started...");
return "forward:home";
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@ModelAttribute("laph") LAPH laph,
BindingResult bindingResult,
ModelMap model,
HttpSession session,
HttpServletRequest request,
HttpServletResponse response,
@RequestParam(required=true) String last_usertype) {
if (bindingResult.hasErrors()) {
logger.debug("Error returning home");
return "home";
}
logger.debug("Started ....");
// Do authentication
if (!isAuthenticated) {
model.put("status_message", error_message);
return "login";
}
// success, send newly authenticated user to a search page
nextView = "search";
return "redirect:" + nextView;
}
}// end class LoginController
我的日志显示,我甚至还没有到达用于处理/login的GET请求的控制器方法,我仍然收到错误消息,表示不支持GET用于/login。
关于如何解决此问题的任何想法?
谢谢
史蒂夫
我担心用户书签https://blah.blah.blah/acme/login,,并得到“获取请求不支持”的错误信息。
您的方法签名是正确的;使用您在login_get
和登录
上放置的注释,Spring不会混淆,并且会为GET和POST请求调用正确的方法。
您的方法< code>home是错误的;它返回字符串< code >“login”,但是我猜您没有名为log in的视图,并且您希望它调用其中一个登录方法。在这种情况下,您应该返回“forward:login”,但是这个解决方案也好不到哪里去。
我的建议是:
/home
应该使用filehome.jsp
或您正在使用的任何视图技术来呈现主视图。