标签:调用 打包 config ESS put ida 注解 产生 表单
Spring MVC 是一个包含了 Dispatcher Servlet 的 MVC 框架。
Dispatcher Servlet 实现了 :
使用 Spring MVC 的好处:
在 Spring MVC 中,org.springframework.web.servlet.Dispatcher
扮演一个调度员的角色。
要使用这个 Servlet,需要在部署描述符(web.xml)中配置。
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- Spring MVC 配置文件位置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/springmvc.xml</param-value>
</init-param>
<1oad-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
注意:Dispatcher Servlet 默认配置文件为 WEB-INF 路径下的 servletName-servlet.xml。可以通过contextConfigLocation
可以修改配置文件路径。
在 Spring MVC 配置文件中配置<componet-scan>
元素,Spring 会扫描基本包,找到组件。
<context:component-scan base-package="basePackage"/>
@Controller // 声明为一个控制器
public class ProductController {
// 处理对"/input-product"的 get 和 post 请求
@RequestMapping(value = "/input-product", method = {RequestMethod.POST, RequestMethod.GET})
public String inputProduct () {
return "ProductForm"; // 返回名为 "ProductForm" 的视图
}
}
@Controller
@RequestMapping("/product")
public class ProductController {
// http://domain/context/product/input 将会映射为该方法
@RequestMapping(value = "/input", method = RequestMethod.GET)
public String inputProduct () {
return "ProductForm";
}
}
在请求处理方法中可以出现的参数类型:
在请求处理方法中可以返回的对象类型:
请求参数和路径变量都可用于发送值给服务器。二者都是 URL 的一部分。
请求参数采用key=value
的形式,用&
分隔。在 Spring MVC 中用@RequestParam
获取。
http://localhost:8080/test/view-product?productId=3
public void sendProduct (@RequestParam int productId) {}
路径变量类似请求参数,但没有key
部分。在 Spring MVC 中用@PathVariable
获取。
http://localhost:8080/test/view-product/3
@RequestMapping(value="/view-product/{id}")
public String viewProduct(@PathVariable Long id, Model model) {}
Spring MVC 在每次调用请求处理方法时,都会创建 Model 类型的一个实例。
Model 实际上就是一个 Map,它会作为请求(request)属性传递给视图,这样数据就可以渲染到客户端了。
@RequestMapping(value="/input-product")
public String inputProduct(Model model){
model.addAttribute("book", new Book());
return "BookAddForm";
}
当addAttribute
方法不指定 key 时,key 会根据 value 的类型推断。
当请求处理方法返回值是其他类型时,返回值会被放到模型中,逻辑视图名称会根据请求路径推断。
@RequestMapping(value="/input") // 逻辑视图名为 input
public String inputProduct(Model model){
return new Book();
}
Spring MVC 会在调用请求处理方法之前调用带 @ModelAtribute
注解的方法。带@ModelAttribute
注解的方法可以返回一个对象或一个 void 类型。
如果返回一个对象,则返回对象会自动添加到 Model 中。
如果方法返回void,则必须添加一个 Model 类型的参数,并自行将实例添加到Model中。
@ModelAttribute
public Product addProduct(GRequestParam String productId){
return productService. get(productId);
}
@ModelAttribute
public void populateModel(@RequestParam String id, Model model) {
model.addAttribute(new Account(id));
}
用在方法参数上的@ModelAttribute
注解指示了参数应该从模型(Model)中获取。
如果模型中不存在,参数会首先被实例化,然后添加到模型中。
如果模型中存在,这个参数的字段会被所有的名字匹配的请求参数所填充,即数据绑定。
ViewResolver 是视图解析器。ViewResolver 通过解析 ModelAndView,将 ModelAndView 转换成一个真正的 View 对象,并取出 Model。View 再对 Model 进行渲染,将渲染后的视图展示给用户。
Spring MVC 提供了13个视图解析器,如 BeanNameViewResolver,ResourceBundleViewResolver,UrlBasedViewResolver等。
InternalResourceViewResolver 是最常用的之一。
InternalResourceViewResolver 继承 UrlBasedViewResolver 继承 AbstractCachingViewResolver,实现了 ViewResolver 接口。
InternalResourceViewResolver 一般用于将视图名解析为 JSP 文件。
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="100"/>
</bean>
当控制器返回"index"时,解析器会自动添加前后缀,寻找"/WEB-INF/jsp/index.jsp"
order 代表视图解析器优先级。当配置多个视图解析器时,控制器返回的逻辑视图(return String)会经过视图解析器链。前面的解析失败后,会由后面的解析器解析。
而 InternalResourceViewResolver 无论资源是否存在,都会尝试解析,即永远返回非空 View 对象,后面的解析器不会起作用。因此它的优先级必须设置为最低,即 order 最大。
如果没有配置视图解析器,Spring 默认会使用 BeanNameViewResolver,这个视图解析器会查找 ID 与视图名称匹配的 bean,并且查找的 bean 要实现 View 接口。
参考资料:《Spring MVC 学习指南》 Paul Deck 著
?????《Spring 实战》 Craig Walls 著
Java Web 学习(4) —— Spring MVC 概览
标签:调用 打包 config ESS put ida 注解 产生 表单
原文地址:https://www.cnblogs.com/JL916/p/11876286.html