SpringMVC详细步骤
1.配置前端控制器
//负责各种解析器,例如本地化解析器,主题解析器,处理器映射器,处理器适配器,处理器异常解析器,视图名称解析器,视图解析器,文件上传解析器,FlashMap映射管理器
<!--定义Spring MVC前端控制器-->
<servlet>
<servlet-name>springmvc</servlet>
<servlet-class> org.springframework.web.servlet.DispathcerServlet </servlet-class>
<init-param>
<param-name> contextConfigLocation </param-name>
<param-value> /WEB-INF/springmvc-config.xml </param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--让Spring MVC的前端控制器拦截所有请求-->
<servlet-mapping>
<servlet-name> springmvc </servlet-name>
<url-pattern> / </url-pattern>
</servlet-mapping>
springmvc声明式配置:
2.声明业务控制器类,并将其映射到url
<!--配置Handle,映射"/hello"请求-->
<bean name="/hello" class="org.mypackge.controller.HelloController"/>
3.配置处理映射器,将bean的name作为url进行查找
<!--配置处理映射器将bean的name作为url进行查找,需要在配置Handle时指定name-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
4.配置处理适配器,完成对HeoolController类的handleRequest方法的调用
<!--配置一个处理器适配器HandlerAdapter,所有适配器都要实现HandlerAdapter接口,例如SimpleControllerHandlerAdapter-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
5.配置视图解析器,解析视图,将View呈现给用户
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
springmvc注解式配置:
<!--spring可以自动扫描base-package下面的包或者子包下面的java文件,如果扫描到有spring相关的注解,则把这些类注册为spring的bean-->
<context:component-scan base-package="mypackage"/>
<!--配置annotation类型的处理映射器-->
<bean class="org.springframework.web.sevlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--配置annotation类型的处理适配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
Controller类的实现:
实现Controller接口或者使用@controller注解
1.HelloController是一个实现Controller接口的控制器,可以处理一个单一的请求动作,Controller调用handleRequest方法来处理请求
public class HelloController implements Controller{
//实现Controller必输实现handleRequest方法,参数对应请求和响应,必须返回ModelAndView对象
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception{
ModelAndView mv = new ModelAndView();
//添加模型数据,可以使任意POJO对象
mv.addObject("message", "Hello World!");
//设置逻辑视图名,视图解析器会根据该名字解析并转发到具体的视图页面
mv.setViewName("/WEB-INF/content/welcome.jsp");
return mv;
}
}
2.基于注解的控制器
可以处理多个请求动作
@Controller
public class HelloController{
//org.springframework.web.bind.annotation.RequestMapping注解用来映射请求的url和请求的方法等,例如映射"/hello",该方法返回ModelAndView对象
@RequestMapping(value="/hello")
public ModelAndView hello(){
ModelAndView mv = new ModelAndView();
mv.addObject("message","hello");
mv.setViewName("/WEB-INF/content/welcome.jsp");
return mv;
}
}
View实现:
定义一个welcome.jsp文件,可以访问Controller传递的message
<body> ${requestScope.message} </body>