本文共 5637 字,大约阅读时间需要 18 分钟。
1. Spring MVC 这个框架应用于web开发的web层,接受请求和响应请求。
2. 它是Spring框架的一部分。
3.
Spring所有包+spring-web spring -springMVC
SpringMVC.xml or spring-mvc.xml or spring-servlet.xml。
名字无关紧要,位置建议放在src目录下。
内容:建议开启注解模式,使用注解模式来配置controller
<?xml version="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!--开启注解模式--> <context:component-scanbase-package="cn.hd.controller"></context:component-scan></beans><?xml version="1.0"encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:SpringMVC.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- /* 能够拦截所有的资源,包括jsphtml js css等(不用) *.action or *.do 后缀名(可以用) / 目录拦截 会放行静态资源(可以用) --> <url-pattern>*.action</url-pattern> </servlet-mapping></web-app>配置spring MVC的前端控制器 DispacherServlet
package cn.hd.controller;
import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class Hello { @RequestMapping(value ="/hello.action") public void hello(){ System.out.println("hellospringmvc."); }}Spring MVC提供了一个视图导航的类,这个类可以帮助我们进行页面的跳转。(ModelAndView)
package cn.hd.controller;
import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;@Controllerpublic class Hello { @RequestMapping(value ="/hello.action") /*ModelAndView:帮助我们进行页面的跳转*/ public ModelAndView hello(){ System.out.println("hellospringmvc."); ModelAndView mav = newModelAndView(); mav.setViewName("/index.jsp"); return mav; }}1. 请求进入到web.xml;web.xml配置了spring MVC的前端控制器。进入到前端控制器。(spring框架的核心)
2. HandlerMapping(处理器映射器)
用户查询所有的Controller(Handler),返回一个Handler对象
3. 老板拿到了handler,指派这个处理器适配器(HandlerAdapter)去执行Handler
4. Handler返回一个ModelAndView视图导航给处理器,返回给老板。
5. 老板拿到了ModelAndView指派ViewResolver(视图解析器)(.jsp)解析成html,返回给老板,老板将html返回给请求。
Spring由什么构成?
核心控制器
3大组件
Handler(controller) view(.jsp)
1、 原始的request、reponse、session
@RequestMapping("/oldParam")
public void oldParam(HttpServletRequestrequest, HttpServletResponse response, HttpSession session) throws IOException{
String id = request.getParameter("id"); System.out.println(id); response.getWriter().write(id);}2、 简单数据的绑定(8大基础类型及其包装类,String)
@RequestMapping(value = "baseParam")
public void baseParam(int id){
System.out.println(id);}int 型则必须传递参数,否则报异常,Integer不传也不报错,值为null
3、 pojo类的绑定
@RequestMapping(value = "pojoParam")
public void pojoParam(Useruser){
System.out.println(user);}4、 pojo封装类的绑定
@RequestMapping(value = "queryVoParam")
public void queryVoParam(QueryVoqueryVo){
System.out.println(queryVo.getUser());}需要请求地址必须按照ognl的传递方式传递参数
User.id=123
@RequestMapping(value = "arrParam")
public void arrParam(Integer []ids){
for (Integer id:ids) { System.out.println(id); }}@RequestMapping(value = "listParam")
public void listParam(QueryVovo){
System.out.println(vo.getList());}传参:list[0].name=zhangsan
resultMapping
1、 路径限制,可以在类上面添加地址,这个类下面所有的方法的访问全部要加上这个前缀。
2、 可以采用多个地址访问同一个方法
3、 访问方式的限制,可以限制post请求,或者get请求。
/*两个地址可以访问一个方法,method:设置请求方式*/
@RequestMapping(value = {"access.action","access2.action"},method= RequestMethod.GET)
public void access(){ System.out.println("进入了Access");}能进行页面的跳转,也能进行数据封装。
@RequestMapping(value = "modelAndView")
public ModelAndViewmodelAndView(){
ModelAndView mav = new ModelAndView(); User user = new User(); user.setName("张三"); mav.addObject("user",user); mav.setViewName("/index.jsp"); return mav;}进行json字符串的交互
官方文档所推荐
@RequestMapping(value = "strData")
public String strData(Modelmodel){
User user = new User(); user.setName("lsi"); model.addAttribute("user",user); return "/index.jsp";}@RequestMapping(value = "strData")
public String strData(Modelmodel){
User user = new User(); user.setName("lsi"); model.addAttribute("user",user); return "forward:/index.jsp";}@RequestMapping(value = "strData")
public String strData(Modelmodel){
User user = new User(); user.setName("lsi"); model.addAttribute("user",user); return "redirect:/index.jsp";}也可以进行数据的交互,交互的方式是需要一个Model
然后调用model的addAttribute方法。
1、 导包
2、 直接在代码中加上注解@ResponseBody,用返回值的方式,直接返回
3、 报转换异常在springMVC.xml中配置
<!--配置数据转换器-->
<mvc:annotation-driven>
<mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"/> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> </mvc:message-converters></mvc:annotation-driven>