复习:
理解:
对.html、.css、.js、图片文件等静态资源,还是按路径直接获取,不需要dispatch。可以:
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern> <url-pattern>*.js</url-pattern> <url-pattern>/image/**</url-pattern> </servlet-mapping>注意一定要放置在DispatcherServlet之前
<mvc:resources mapping="*.html" location="/" /> <mvc:resources mapping="*.js" location="/" /> <mvc:resources mapping="/images/**" location="/" />
使用XML进行配置dispatcher总是不直观的……能不能(和Hibernate一样)用annotation呢?当然可以(而且强烈推荐)。
可以使用:
@Controller @RequestMapping("/log") public class LogController {
如上代码,就向SpringMVC表明:/log的请求,由我LoginController来处理。
但是,由Controller中哪一个方法来处理呢?标记@RequestMapping()的那一个
@RequestMapping() public ModelAndView handleRequest(HttpServletRequest arg0,
但是,这还不够,还需要
无fuck可说,这就是Java框架……
需要我们额外引入
xmlns:context="http://www.springframework.org/schema/context"并在xsi:schemaLocation中添加:
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd最后,加入节点:
<context:component-scan base-package="controllers" />
这样SpringMVC就会去自动扫描base-package下所有被@Controller等注解的Java类,并纳入管理。
断点演示:/login 请求能够到达LoginController。
比如我们的url可以有/log/on(登录),也可以有/log/off(退出登录),一个Controller一个method是不是有点浪费?能不能把他们放在同一个Controller中?
这是完全可以的(一样强烈推荐):
@RequestMapping("/log") public class LogController { @RequestMapping("in") public ModelAndView In( @RequestMapping("/off") //斜杠可有可无 public ModelAndView Off(
@RequestMapping(value="/in", method = RequestMethod.GET) public ModelAndView In(HttpServletRequest arg0, HttpServletResponse arg1) { @RequestMapping(path="/in", method = RequestMethod.POST) public ModelAndView In(HttpServletRequest arg0) {
注意:
这种用法如此常见,以至于后面的SpringMVC直接引入了其简写方式:
@PostMapping("/in") @GetMapping("/in")
params:为带有不同的参数的url指定不同的方法。假如Controller中只有这两个方法:
@GetMapping(path="in", params = {"id"}) public ModelAndView In( @GetMapping(path="in", params = {"id", "prepage"}) public ModelAndView In(如上所示代码,当url为:
PS:其他属性还有consumes()、produces()和headers()见SpringBoot。
观察当前页面:
你觉得706和825是什么?有什么作用?
他们实际上类似于:
用户访问的是同一个页面地址,不同的是URL参数;后台根据url参数id的值从数据库获取该id对应的文章……这种url在早期影响SEO,但现在唯一的问题就是看起来不舒服,尤其是url参数不止一个的时候。
所以,SpringMVC允许我们映射这种含有可变内容(path parameter)的请求路径:
演示:
PS:在MVC的Dispatcher机制出现之前,普遍利用tomcat的filter进行映射,这种技术又被称之为urlrewrite
如果请求参数和处理方法参数的名称一样的话,@RequestParam 注解的 value 这个参数就可省掉了(强烈推荐,没道理不这样做)
@PathVariable 同 @RequestParam的运行方式不同。你使用 @PathVariable 是为了从 URI 里取到查询参数值。换言之,你使用 @RequestParam 是为了从 URI 模板中获取参数值。
比如以下三种动态URI匹配模板:
根据你的选择,可以用Suggest/Problem代替Article。
多快好省!前端后端,线上线下,名师精讲
更多了解 加: