SpringMVC快速应用笔记分享
SpringMVC学习笔记
这篇博文依然是一篇学习笔记,干货可能只有一张图片,因为公司产品线上了新架构,用到SpringMVC,所以就在短时间内看了一下教程,时间较短没有细看底层源码所以记录的重点不多,如有错误或曲解,欢迎指正~~~
1.原理图
下面这张图已经标示了流程顺序,里面括号部分或者拟人化的节点或操作可能看起来会混淆视听,建议忽略这部分重点看英文。因为用windows自带画图软件所以不是标准的流程图样。
注意:图中“返回view”的说法是错误的,应该是view层渲染好之后直接响应到客户端,不是“返回”的概念,非“试图”是“视图”。
2.开发步骤/配置步骤
1.配置springmvc中央控制器
在web.xml中配置
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 1.读取springmvc配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring-applicationContext.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
2.配置spring过滤器
在web.xml最前面配置
<filter>
<!-- 2.配置过滤器 -->
<filter-name>mvcFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>mvcFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.配置处理器映射器:请参考官方文档
4.配置处理器适配器:请参考官方文档
5.配置视图解析器:请参考官方文档
6.开发controller(Action类):见第三节
7.配置action
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 3.1配置处理器映射器 -->
<bean name="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- 3.2 也可以使用另一种方式 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >
<property name="mappings">
<props>
<prop key="/spring2.do">spring2Ctrl</prop>
</props>
</property>
</bean>
<!-- 3.3注解处理器映射器映射器
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>-->
<!-- 4.配置处理器适配器 -->
<bean name="handlerAdapter" class="org.springframework.web.portlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 4 也可以使用另一种方式 -->
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" />
<!-- 4.3 注解处理器适配器
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" /> -->
<!-- 5.配置视图解析器 <bean name="/hello.do" class="SayHelloCtrl"/>-->
<bean name="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
<!-- 配置action -->
<bean name="/hello1.do" class="lxh.first.SpringCtrlFirst"/>
</beans>
3.控制器开发
SpringMVC提供三种方式来实现控制器
1.注解方式
注解需要扫描,要在applicationContext.xml里面配置,扫描的目的是为了通过容器帮助我们创建实例化controller对象
<context:component-scan base-package="lxh.first"></context:component-scan>
ctrl类
package lxh.first;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 使用注解的方式装载controller
*/
@Controller
public class SpringCtrlThird {
/**
* 使用注解的方式注册action方法
* @param req
* @param res
* @return
*/
@RequestMapping("/ctrlThird.do")
public ModelAndView addSpring(HttpServletRequest req, HttpServletResponse res){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("spring","spring是春天");
modelAndView.setViewName("/spring3.jsp");
return modelAndView;
}
}
2.实现controller接口
package lxh.first;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 实现controller接口
*/
public class SpringCtrlFirst implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("name","My first springMVC project with IntelliJ IDEA");
mv.addObject("subject","Hello SpringMVC");
mv.setViewName("/spring1.jsp");
return mv;
}
}
3.实现org.springframework.web.HttpRequestHandler接口
package lxh.first;
import org.springframework.web.HttpRequestHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class SpringCtrlSecond implements HttpRequestHandler {
@Override
public void handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
httpServletRequest.setAttribute("name","Hello VIEWHIGH");
httpServletRequest.setAttribute("subject","VH_SPRING:NO.0001");
httpServletRequest.getRequestDispatcher("spring2.jsp").forward(httpServletRequest,httpServletResponse);
}
}
4.关于ctrl交互
1.ctrl to ctrl
2.ctrl to view
3.view to ctrl
举个栗子:
@Controller
public class SpringCtrlFifth {
@RequestMapping("/addCar.do")
public String addCar(HttpServletRequest request){
String url = "/listCar.do";
request.setAttribute("name","刘小会");
return url;
}
@RequestMapping("/delCar.do")
public String delCar(HttpServletRequest request){
return null;
}
@RequestMapping("/updateCar.do")
public String updateCar(String name,Integer age){
return null;
}
@RequestMapping("/listCar.do")
public ModelAndView listCar(HttpServletRequest request){
String name = request.getAttribute("name").toString();
System.out.println(name);
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/spring5.jsp");
modelAndView.addObject("name",name);
return modelAndView;
}
}