SpringMVC servlet映射
我写了一个非常简单的Spring MVC应用程序。 我很抱歉我对Spring MVC很新,所以请耐心等待。
web.xml如下
contextConfigLocation /WEB-INF/spring/root-context.xml org.springframework.web.context.ContextLoaderListener appServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/appServlet/servlet-context.xml 1 appServlet /
我的第一个问题是,我有一个jsp页面用于登录以下代码…
这给了404但是在我的控制器中,我已经将控制器映射到/ login并使用下面的代码…
@Controller public class LoginController { private static final Logger logger = LoggerFactory.getLogger(LoginController.class); /** * Simply selects the home view to render by returning its name. */ @RequestMapping(value = "/login", method = RequestMethod.POST) public String home(Locale locale, Model model, String username, String password) { if(username.equalsIgnoreCase("david")) { logger.info("Welcome home! the client locale is "+ locale.toString()); Date date = new Date(); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); String formattedDate = dateFormat.format(date); model.addAttribute("serverTime", formattedDate ); return "home"; } else { return "void"; } } }
我的理解是@requestmapping应该执行servlet映射而不是web.xml,这是正确的吗? 如果需要,还会在下面显示/WEB-INF/spring/appServlet/servlet-context.xml的值。
所以我的第一个问题是:servlet映射是在web.xml中完成的,还是在控制器类中的@requestmapping中完成的?
第二个问题:如果我要继续添加webxml,那么构建此页面以获得更多页面的最佳方法是什么? 我应该为每个url创建一个控制器吗? 我应该为每个URL创建一个servlet上下文吗?
谢谢阅读 :)
您已将
定义为/
,这意味着您的appServlet
将仅接收对根URL的请求。 通过将其更改为/*
, appServlet
将获取所有传入请求。 这将有效,但您也可以考虑创建一个特定的loginServlet
,它可以映射到url /login/*
。
- 您可以在单个
web.xml
定义多个servlet。 通过添加更多
标记来指定将命中每个servlet的请求。 - servlet可能有许多控制器。 通常,一个控制器服务于您域的特定部分,例如
PersonController
,AddressController
等。 - 每个控制器通常处理逻辑上组合在一起的几个URL,例如
/persons/{id}
,/persons/search
,/persons/add
等。