您的位置:首页 > 编程语言 > Java开发

Spring记录之SpringMVC

2016-05-14 20:03 507 查看

Spring记录之SpringMVC

Spring的Web框架是围绕分发器(DispatcherServlet)设计的,DispatcherServlet用来将请求分发到不同的处理器,框架还包括了控制器映射(HandlerMapping),视图解析(ViewResolver),本地化,主题解析,支持文件上传

运行机制



- (1)客户端向Spring发送HTTP请求

- (2)前端控制器DispatcherServlet拦截请求,并扫描控制器,适配合适的Controller来处理请求

- (3)DispatcherServlet根据HandlerMapping选择并决定将请求发送到哪个Controller。

- (4)被选定的Controller处理请求,并以ModelAndView(属性值和返回页面)的形式返回给DispatcherServlet

- (5)返回给DispatcherServlet的未必都是JSP,可能是逻辑视图。DispatcherServlet查询ViewResolver对象,解析视图。

- (6)找到对应的视图,将视图返回给客户端,否则报错。

SpringMVC特点

自由灵活

适合做REST风格的URL

配置SpringMVC

(1)在web.xml配置前端控制器DispatcherServlet

<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>

<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>


(2)配置SpringMVC.xml配置文件

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources/ directory -->
<resources mapping="/resources/**" location="/resources/" />

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>


需要文件上传时配置

<!-- Only needed because we require fileupload in the org.springframework.samples.mvc.fileupload package 名字都不能改-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />


注解方式开发配置

<mvc:annotation-driven/>
<context:component-scan base-package="com.spring.spring_mvc.annotation"/>


拦截器配置

<mvc:interceptors>
<mvc:interceptor>
<!-- 某一模块的拦截:/myPath/**, 拦截所有的请求/** -->
<mvc:mapping path="/**"/>
<bean class="com.spring.spring_mvc.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>


Controller编写

@Controller
@RequestMapping("/news")//namespace,不同模块
public class HelloController {

@RequestMapping("/say")
public String say() {
System.out.println();
return "index";
}
@RequestMapping("/person1")
public String person(Map<String,Object> map){
Person person1 = new Person("Hello",66);
map.put("p",person1);
return "index";
}

@RequestMapping("/person2")
public String person(ModelMap model){
Person person1 = new Person("Hello",66);
model.addAttribute("p", person1);
return "index";
}

@RequestMapping("/entity/status")
public ResponseEntity<String> responseEntityStatusCode() {
return new ResponseEntity<String>("The String ResponseBody with custom status code (403 Forbidden)",
HttpStatus.FORBIDDEN);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: