1.SpringMVCç®ä»
ââSpringMVCï¼æ¯åºäºspringçä¸ä¸ªæ¡æ¶ï¼å®é ä¸å°±æ¯springçä¸ä¸ªæ¨¡åï¼ä¸é¨åwebå¼åçãç解æ¯servletçä¸ä¸ªå级
ââwebå¼ååºå±æ¯servletï¼æ¡æ¶æ¯å¨servletåºç¡ä¸é¢å ä¸äºåè½ï¼è®©ä½ åwebå¼åæ¹ä¾¿ã
ââspringMVCå°±æ¯ä¸ä¸ªSpringãSpringæ¯ä¸ä¸ªå®¹å¨ï¼iocè½å¤ç®¡ç对象ï¼ä½¿ç¨ï¼@Componentã@Respositoryã@Serviceã@Controllerãå æ¤ï¼SpringMVCä¹è½å¤å建对象ï¼æ¾å ¥å°ï¼SpringMVCï¼å®¹å¨ä¸ï¼å®åæ¾çæ¯æ§å¶å¨å¯¹è±¡ï¼@Controllerï¼
ââæ们è¦åçæ¯ï¼ä½¿ç¨@Controllerå建æ§å¶å¨å¯¹è±¡ï¼æ对象æ¾å ¥å°springmvc容å¨ä¸ï¼æå建ç对象ä½ä¸ºæ§å¶å¨ä½¿ç¨ã
ââè¿ä¸ªæ§å¶å¨å¯¹è±¡è½æ¥æ¶ç¨æ·ç请æ±ï¼æ¾ç¤ºå¤çç»æï¼å°±å½åæ¯ä¸ä¸ªservlet使ç¨ã
ââè¦æ³¨æçæ¯ï¼ä½¿ç¨@Controllerå建çå®é ä¸åªæ¯ä¸ä¸ªæ®éç±»ç对象ï¼ä¸æ¯Servletãä½æ¯springmvcèµäºäºæ§å¶å¨å¯¹è±¡ä¸äºé¢å¤çåè½ã
ââå 为webå¼åçåºå±æ¯servletï¼springmvcä¸æä¸ä¸ªå¯¹è±¡æ¯Servlet:DispatherServletï¼ä¸å¤®è°åº¦å¨ä¹å«å端æ§å¶å¨ï¼
ââDispatherServlet:è´è´£æ¥æ¶ç¨æ·çææ请æ±ï¼ç¨æ·æ请æ±ç»äºDispatherServletï¼ä¹åDispatherServletæ请æ±è½¬åç»äºController对象ï¼æåæ¯Controller对象å¤ç请æ±ã请æ±çä¼ éå¦ä¸:
index.jsp----->DispatherServlet(Servlet)â转åï¼åé ç»â>Controller对象ï¼@Controller注解ç对象ï¼
ââæ以ï¼å½æ们使ç¨springmvcæ¡æ¶æ¶ï¼æéè¦ä¸ä¸ªä¸å¤®è°åº¦å¨åä¸ä¸ªController对象
2.SpringMVCæ¡æ¶ç使ç¨
1.å å ¥ä¾èµ
spring-webmvcä¾èµï¼ç®ä»æspringçä¾èµé½å å ¥å°é¡¹ç®
jspãservletä¾èµ
<!--servletä¾èµ-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<!--SpringMVCä¾èµ-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
2.å¨web.xmlä¸æ³¨åspringmvcæ¡æ¶çæ ¸å¿å¯¹è±¡DispatcherServletï¼ä»¥åéæèµæºå²çªçé®é¢
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGLwIzXlpXazxSd10mY1ZkMjBHayMWQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5EWZ3EWM5E2YlNDZzAjM5YGOwQTYkJjZ5YTMhhjN3MzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
<!--声æSpringMVCçæ ¸å¿å¯¹è±¡ï¼DispatcherServlet-->
<!--
éè¦å¨tomcatæå¡å¨å¯å¨åå°±å建DispatcherServlet对象çå®ä¾
为ä»ä¹è¦å建DispatcherServletçå®ä¾å¢ï¼
å 为DispatcherServletå¨ä»çå建è¿ç¨ä¸ï¼ä¼åæ¶å建springmvc容å¨å¯¹è±¡ï¼è¯»åspringmvcçé
ç½®æ件ï¼æè¿ä¸ªé
ç½®æ件ä¸ç对象ä¹å建好ï¼
å½ç¨æ·å起请æ±æ¶å°±å¯ä»¥ç´æ¥ä½¿ç¨å¯¹è±¡äºã
servletçåå§åä¼æ§è¡init()æ¹æ³ãDispatcherServletå¨init()ä¸ä¼æ§è¡ï½
//å建容å¨ï¼è¯»åé
ç½®æ件
WebApplicationContext wac=new ClassPathXmlApplicationContext("springmvc.xml")ï¼
//æ容å¨æ¾å
¥å°ServletContextå
¨å±ä½ç¨åä¸
getServletContext().setAttribute(key,wac);
ï½
-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--èªå®ä¹springmvc读åçé
ç½®æ件çä½ç½®-->
<init-param>
<!--springmvcé
ç½®æ件çä½ç½®-->
<param-name>contextConfigLocation</param-name>
<!--æå®èªå®ä¹æ件çä½ç½®-->
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--
å¨tomcatå¯å¨åï¼å建servlet对象
load-on-startup:表示tomcatå¯å¨åå建对象ç顺åºãä»çå¼æ¯æ´æ°ï¼æ°å¼è¶å°ï¼tomcatå建对象çæ¶é´è¶æ©ãæ°å¼å¤§äºçäº0
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--
使ç¨æ¡æ¶çæ¶åï¼url-patternå¯ä»¥ç¨ä¸¤ç§å¼
1.使ç¨æ©å±åæ¹æ³ï¼è¯æ³:*.xxxxï¼xxxæ¯èªå®ä¹çæ©å±åã常ç¨çæ¹å¼*.do,*.action,*.mvcçç
http://localhost:8080/myweb/some.do
2.使ç¨ææ "/"
-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
å¦æ使ç¨â/âä¼åºç°åªäºé®é¢ï¼
客æ·ç«¯è¯·æ±çéææ°æ®å¦htmlãjsãå¾ççèµæºä¸è¬é½ä¼äº¤ç»tomcatæ¥è¿è¡å¤ç
<!--tomcatçweb.xml-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
å¦æå äº"/"ï¼é£ä¹å 为æ们çweb.xmlæ¯tocmatçä¼å 级æ´é«ï¼ä¼å¯¼è´éæèµæºå°ä¼å 交ç»æ们çDispatcherServletä¸å¤®è°åº¦å¨æ¥è¿è¡å¤çï¼è¿è使å¾éæèµæº404
<!--æ们èªå·±çweb.xml-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--
å½ä½ ç项ç®ä¸ä½¿ç¨"/"ï¼å®ä¼æ¿ä»£tomcatä¸çdefaultã
导è´ææçéæèµæºé½ç»DispatcherServletå¤çï¼é»è®¤æ
åµä¸DispatcherServlet没æå¤çéæèµæºçè½åã
没ææ§å¶å¨å¯¹è±¡å¤çéæèµæºç访é®ãæ以éæèµæºï¼htmlãjsãå¾çãcssï¼é½æ¯404
æ们èªå·±çå¨æèµæºsome.doè¿æ¯è½å¤ç»§ç»è®¿é®çï¼å 为æ们çç¨åºä¸æç¸å
³çæ§å¶å¨å¯¹å
¶è¿è¡å¤çã
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
å¦ä½è§£å³éæèµæºçå²çªï¼
1)使ç¨
<mvc:default-servlet-handler>
<!--
第ä¸ç§å¤çéæèµæºçæ¹å¼:
éè¦å¨SpringMVCçé
ç½®æ件ä¸å å
¥<mvc:default-servlet-handler>
åç:å å
¥è¿ä¸ªæ ç¾åï¼æ¡æ¶ä¼å建æ§å¶å¨å¯¹è±¡DefaultServletHttpRequestHandlerï¼ç±»ä¼¼äºæ们èªå·±çæ§å¶å¨ï¼
DefaultServletHttpRequestHandlerè¿ä¸ªå¯¹è±¡å¯ä»¥æ¥æ¶ç请æ±è½¬åç»tomcatçdefaultè¿ä¸ªservletã
-->
<mvc:default-servlet-handler/>
<!--default-servlet-handlerå@RequestMappingæå²ï¼éè¦å å
¥annotation-driven解å³é®é¢-->
<mvc:annotation-driven/>
2)使ç¨
<mvc:resources>
å¨Spring3.0åï¼Springå®ä¹äºä¸é¨ç¨äºéæèµæºè®¿é®çå¤çå¨ResourceHttpRequestHandler
<!--
第äºç§å¤çéæèµæºçæ¹å¼:
<mvc:resources/>å å
¥åæ¡æ¶ä¼å建ResourceHttpRequestHandlerè¿ä¸ªå¤çå¨å¯¹è±¡
让è¿ä¸ªå¯¹è±¡å¤çéæèµæºç访é®ï¼ä¸ä¾èµtomcatæå¡å¨
mapping:æå¡ç«¯è®¿é®éæèµæºçuriå°åï¼ä½¿ç¨éé
符**
location:éæèµæºå¨ä½ 项ç®ä¸çç®å½ä½ç½®ã
/images/**:表示 images/p1.jpg ï¼images/user/logo.gif ï¼ images/order/history/list.png
locationåæ¹ç/代表webappçæ ¹ï¼åæ¹ç/代表è¿æ¯ä¸ªç®å½
-->
<mvc:resources mapping="/images/**" location="/images/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
<!--resourceså@RequestMappingæå²ï¼éè¦å å
¥annotation-driven解å³é®é¢-->
<mvc:annotation-driven/>
<!--ä¸å¥è¯è§£å³éæèµæºç访é®-->
<!--
ææçéæèµæºé½æ¾å¨staticç®å½ä¸ï¼æ¯å¦/static/images/xx.jpg /static/js/xx.js
<mvc:resources mapping="/static/**" location="/static/">
-->
3.å建ä¸ä¸ªåé请æ±ç页é¢index.jsp
4.å建æ§å¶å¨ç±»
1ï¼å¨ç±»çä¸é¢å å ¥@Controller注解ï¼å建对象ï¼å¹¶æ¾å ¥å°springmvc容å¨ä¸
2ï¼å¨ç±»ä¸çæ¹æ³ä¸é¢å å ¥@RequestMapping注解
/*
* å建å¤çå¨ï¼æ§å¶å¨ï¼å¯¹è±¡,æ¾å¨springmvc容å¨ä¸
* ä½ç½®:ç±»çä¸é¢
* */
@Controller
public class MyController {
/*
* å¤çç¨æ·æ交ç请æ±ï¼springmvcä¸æ¯ä½¿ç¨æ¹æ³æ¥å¤ççã
* æ¹æ³æ¯èªå®ä¹çï¼å¯ä»¥æå¤ç§è¿åå¼ï¼å¤ç§åæ°ï¼æ¹æ³å称èªå®ä¹
* */
/*
* @RequestMapping:请æ±æ å°ï¼ä½ç¨æ¯æä¸ä¸ªè¯·æ±å°ååä¸ä¸ªæ¹æ³ç»å®å¨ä¸èµ·ãä¸ä¸ªè¯·æ±æå®ä¸ä¸ªæ¹æ³æ¥å¤ç
* å±æ§:1.value:æ¯ä¸ä¸ªStringï¼è¡¨ç¤ºè¯·æ±çurlå°åãvalueçå¼å¿
é¡»æ¯å¯ä¸çï¼ä¸è½éå¤ã使ç¨æ¶ï¼æ¨è以"/"å¼å¤´
* ä½ç½®:1).å¨æ¹æ³çä¸é¢ï¼å¸¸ç¨ï¼
* 2).å¨ç±»çä¸é¢
* 2.method:表示请æ±çæ¹å¼ãå®çå¼RequestMethodç±»æ举å¼ã
* ä¾å¦è¡¨ç¤ºget请æ±æ¹æ³ï¼RequestMethod.GET
* post请æ±æ¹å¼,RequestMethod.POST
* 说æ:使ç¨RequestMapping修饰çæ¹æ³å«åå¤çå¨æ¹æ³ææ§å¶å¨æ¹æ³ã被修饰çæ¹æ³ç±»ä¼¼äºservletä¸çdoGetãdoPostã
* è¿åå¼:ModelAndView æ¬æ¬¡å¤ççç»æ
* Model:æ°æ®ï¼è¯·æ±å¤çå®æåï¼è¦æ¾ç¤ºç»ç¨æ·çæ°æ®
* View:è§å¾ï¼æ¯å¦jspç
* */
@RequestMapping(value="/some.do",method = RequestMethod.POST)
//@RequestMapping({"some.do","show.do"})å¤çå¤ä¸ªè¯·æ±
public ModelAndView dosome(){ //doGet()
//å¤çsome.doç请æ±
ModelAndView mv=new ModelAndView();
//æ·»å æ°æ®ï¼æ¡æ¶ä¼å¨è¯·æ±çæåææ°æ®æ¾å
¥å°requestä½ç¨åã
//request.setAttribute(key,value)
mv.addObject("msg","è¿æ¯ä¸ä¸ªä½¿ç¨springmvcæ¡æ¶åçå¼å");
//æå®è§å¾
//æ¡æ¶å¯¹è§å¾æ§è¡forwardæä½ï¼request.getRequestDispather("/show.jsp").forword(...)
//mv.setViewName("/WEB-INF/show.jsp");
//å½é
ç½®äºè§å¾è§£æå¨åï¼å¯ä»¥ä½¿ç¨é»è¾å称ï¼æ件åï¼ï¼æå®è§å¾
//æ¡æ¶ä¼ä½¿ç¨è§å¾è§£æå¨çåç¼+é»è¾å称+åç¼ç»æå®æ´è·¯å¾ï¼è¿éå°±æ¯å符è¿æ¥æä½
//WEB-INF/+show+.jsp
mv.setViewName("show");
return mv;
}
}
5.å建ä¸ä¸ªä½ä¸ºç»æçjspï¼æ¾ç¤ºè¯·æ±çå¤çç»æ
6.å建springmvcçé ç½®æ件
1ï¼å£°æ注解æ«æå¨ï¼æå®@Controller注解æå¨çå å
<!--声æ注解æ«æå¨-->
<context:component-scan base-package="com.wxk.controller"/>
2ï¼å£°æè§å¾è§£æå¨ï¼å¸®å©å¤çè§å¾çã
<!--声æSpringMVCæ¡æ¶ä¸çè§å¾è§£æå¨ï¼å¸®å©å¼å人å设置è§å¾çè·¯å¾-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--åç¼:è§å¾æ件çè·¯å¾-->
<property name="prefix" value="/WEB-INF/"/>
<!--åç¼:è§å¾æ件çæ©å±å-->
<property name="suffix" value=".jsp"/>
</bean>
7.æ»ç»springmvc请æ±çå¤çæµç¨
1ï¼å端åèµ·some.do请æ±
2ï¼tomcatï¼æ«æweb.xmlâ>éè¿url-patternç¥é*.doç请æ±ç»äºDispatcherServletï¼
3ï¼DispatcherServletï¼æ ¹æ®springmvc.xmlé ç½®ç¥ésome.do请æ±åæ§å¶å±ä¸çdoSome()æ¹æ³ç¸å¯¹åºï¼
4ï¼DispatcherServletæsome.do转åç»doSome()æ¹æ³
5ï¼æ¡æ¶æ§è¡doSome()æå¾å°çModeAndViewè¿è¡å¤çï¼è½¬åå°show.jspï¼å端页é¢ï¼
3.SpringMVCç¸å ³ç¥è¯ç¹
3.1 @RequestMappingæ¾å¨ç±»çä¸é¢
/*
* @RequestMapping:
* value:ææ请æ±å°åçå
Œ
±é¨åï¼å«å模åå称
* ä½ç½®:æ¾å¨ç±»çä¸é¢
* */
@Controller
@RequestMapping("/test")
public class MyController {
//@RequestMapping({"/test/some.do","/test/other.do"})
@RequestMapping({"/some.do","other.do"})
public ModelAndView dosome(){ //doGet()
ModelAndView mv=new ModelAndView();
mv.addObject("msg","è¿æ¯ä¸ä¸ªä½¿ç¨springmvcæ¡æ¶åçå¼å");
mv.setViewName("show");
return mv;
}
}
3.2 å½¢åRequestãResponseãSession
RequestãResponseãSessionå¯ä»¥å¨æ¹æ³çå½¢åä¸å£°æï¼æ¡æ¶ä¼èªå¨ç»å ¶èµå¼
@RequestMapping(value = "/some.do",method = RequestMethod.POST)
public ModelAndView dosome(HttpServletRequest request,
HttpServletResponse response,
HttpSession session){
String name= (String) request.getParameter("name");
System.out.println(name);
ModelAndView mv=new ModelAndView();
mv.addObject("msg","è¿æ¯ä¸ä¸ªä½¿ç¨springmvcæ¡æ¶åçå¼å");
mv.setViewName("show");
return mv;
}
3.3 æ¥æ¶åæ°ï¼é个æ¥æ¶æ¹æ¡
@Controller
public class MyController {
/*
* é个æ¥æ¶è¯·æ±åæ°ï¼
* è¦æ±ï¼å¤çå¨ï¼æ§å¶å¨ï¼æ¹æ³çå½¢ååå请æ±ä¸åæ°åå¿
é¡»ä¿æä¸è´ã
* ååç请æ±åæ°èµå¼ç»ååçå½¢å
* æ¡æ¶æ¥æ¶è¯·æ±åæ°ï¼
* 1.使ç¨request对象æ¥æ¶è¯·æ±åæ°
* String strName=request.getParameter("name");
* String strAge=request.getParameter("age");
* 2.SpringMVCæ¡æ¶éè¿DispatcherServletè°ç¨MyControllerçdosomeæ¹æ³
* è°ç¨æ¹æ³æ¶ï¼æå称对åºï¼ææ¥æ¶çåæ°èµå¼ç»å½¢å
* dosome(strName,Integer.valueOf(strAge));
* æ¡æ¶ä¼æä¾ç±»å转æ¢çåè½ï¼è½æString转为intï¼longï¼floatï¼doubleçç±»å
* */
@RequestMapping(value = "/some.do",method = RequestMethod.POST)
/*
* éè¦æ³¨æçæ¯ï¼å¦æå½¢å使ç¨intï¼é£ä¹åç«¯ä¼ åæ¥çåæ°å¦ææ¯nullæå
¶ä»éæ´åæ°æ®ï¼é£ä¹å°æ æ³è½¬æ¢ï¼åå°ä¼åºç°400é误
* å¯ä»¥ä½¿ç¨å
è£
ç±»åInteger代æ¿intï¼è¿æ ·å°±è½å¤æ¥ånullï¼ä½è¿æ¯æ æ³æ¥æ¶å
¶ä»éæ´åæ°æ®
* */
public ModelAndView dosome(String name,Integer age){
ModelAndView mv=new ModelAndView();
mv.addObject("name",name);
mv.addObject("age",age);
mv.setViewName("show");
return mv;
}
}
3.4 æ¥æ¶åæ°ï¼æ³¨è§£æ¥æ¶åæ°
ââåç«¯ä¼ æ¥çåæ°å并ä¸æ»æ¯åæ§å¶å¨æ¹æ³ä¸çå½¢ååä¸è´ï¼æ¤æ¶å¯ä»¥ä½¿ç¨@RequestParam注解æ¥è§£å³ååä¸ä¸è´çé®é¢ï¼åæ¶è¿è½è§£å³å¦æå端æªä¼ åæ°æ¥éçé®é¢
@Controller
public class MyController {
/*
* 请æ±ä¸åæ°ååå¤çå¨æ¹æ³çåæ°åä¸ä¸æ ·æ¶ä½¿ç¨
* @RequestParam:é个æ¥æ¶è¯·æ±åæ°ä¸ï¼æ¥è§£å³è¯·æ±ä¸åæ°ååå½¢ååä¸ä¸æ ·çé®é¢
* å±æ§:1.value 请æ±ä¸çåæ°å称
* 2.required æ¯ä¸ä¸ªbooleanå¼ï¼é»è®¤true
* true:表示请æ±ä¸å¿
é¡»å
å«æ¤åæ°ï¼å¦ååºéï¼400ï¼
* ä½ç½®:å¨å¤çå¨æ¹æ³å½¢åå®ä¹çåé¢
* */
@RequestMapping(value = "/some.do",method = RequestMethod.POST)
public ModelAndView dosome(@RequestParam(value = "sname",required = false) String name,
@RequestParam(value = "sage",required = false) Integer age){
ModelAndView mv=new ModelAndView();
mv.addObject("name",name);
mv.addObject("age",age);
mv.setViewName("show");
return mv;
}
}
3.5 æ¥æ¶åæ°ï¼å¯¹è±¡æ¥æ¶æ¹æ¡
ââä½æ¥æ¶çæ°æ®é常å¤æ¶ï¼å¯ä»¥èè使ç¨java对象æ¥æ¥æ¶è¯·æ±æ°æ®
@Controller
public class MyController {
/*
* å¤çå¨æ¹æ³å½¢å对象æ¯java对象ï¼è¿ä¸ªå¯¹è±¡çå±æ§åå请æ±ä¸çåæ°åä¸æ ·
* æ¡æ¶ä¼å建形åçjava对象ï¼ç»å±æ§èµå¼ã请æ±ä¸çåæ°æ¯nameï¼æ¡æ¶å°±ä¼è°ç¨setName()
* */
@RequestMapping(value = "/some.do",method = RequestMethod.POST)
public ModelAndView dosome(Student student){
ModelAndView mv=new ModelAndView();
mv.addObject("name",student.getName());
mv.addObject("age",student.getAge());
mv.addObject("student",student);
mv.setViewName("show");
return mv;
}
}
3.6 è¿åå¼ï¼ModelAndView
Model:æ°æ®ï¼è¯·æ±å¤çå®æåï¼è¦æ¾ç¤ºç»ç¨æ·çæ°æ®
View:è§å¾ï¼æ¯å¦jspç
ââModelAndViewåæ¶å å«æ°æ®åè§å¾ï¼å¦æä½ ç请æ±å¨å¤çå®åï¼éè¦è¿åæ°æ®çåæ¶è¿éè¦è·³è½¬å°å ¶ä»é¡µé¢ï¼å¯ä»¥ä½¿ç¨ModelAndViewã
ââç¸åï¼å¦æä½ åªéè¦æ°æ®ææ¯åªéè¦è¿è¡è§å¾ç跳转ï¼é£ä¹ä¸å»ºè®®ä½¿ç¨ModelAndView
ââå ·ä½ä½¿ç¨æ¹æ³å¯ä»¥ç¹å»æ¤å¤æ¥ç
3.7 è¿åå¼ï¼String
主è¦è¿è¡è§å¾ç跳转
@Controller
public class MyController {
/*
* å¤çå¨æ¹æ³è¿åString--表示é»è¾å称ï¼éè¦é
ç½®è§å¾è§£æå¨
* æ¬æ使ç¨äºè§å¾è§£æå¨ï¼è¥æ³è¦è¿åå®æ´è·¯å¾ï¼ä¸å è§å¾è§£æå¨å³å¯
* */
@RequestMapping(value = "/some.do",method = RequestMethod.POST)
public String dosome(Student student,HttpServletRequest request){
student.setName("å¼ ä¸");
//å¯ä»¥èªå·±æå¨æ·»å æ°æ®å°requestä½ç¨å
request.setAttribute("name",student.getName());
return "show";
}
}
è¿åå¼ä¸ºStringä¹å¯ä»¥è¡¨ç¤ºæ°æ®
@Controller
public class MyController {
/*
* å¤çå¨æ¹æ³è¿åçæ¯String ï¼String表示æ°æ®èéè§å¾çæ
åµ
* åºåè¿åå¼Stringæ¯æ°æ®è¿æ¯è§å¾è¦çæ没æ@ResponseBody注解
* å¦ææ@ResponseBody注解ï¼è¿åçå°±æ¯ä¸ä¸ªæ°æ®ï¼åä¹åæ¯è§å¾
*
* é»è®¤ä½¿ç¨"text/plain;charset=ISO-8859-1"ä½ä¸ºcontentTypeï¼å¯¼è´ä¸ææä¹±ç
* 解å³æ¹æ¡:ç»RequestMappingå¢å ä¸ä¸ªå±æ§producesï¼ä½¿ç¨è¿ä¸ªå±æ§æå®æ°çcontentType.
* */
@RequestMapping(value = "/some.do",method = RequestMethod.POST,produces = "text/plain;charset=utf-8")
@ResponseBody
public String dosome(HttpServletResponse response,String name,Integer age) throws IOException {
Student student=new Student();
student.setName(name);
student.setAge(age);
return "123abc";
}
}
3.8 è¿åå¼ï¼void
voidæ¬èº«æ¢è¡¨ç¤ºæ°æ®ä¹ä¸è½è¡¨ç¤ºè§å¾
å¨å¤çajax请æ±çæ¶åï¼å¯ä»¥ä½¿ç¨voidè¿åå¼ãéè¿HttpServletResponseè¾åºæ°æ®ï¼ååºajax请æ±ã
<!--ajax请æ±-->
<script type="text/javascript">
$(function () {
$("input[type='button']").click(function () {
$.ajax({
url:"some.do",
data:{
name:"å¼ ä¸",
age:12
},
type:"post",
dataType:"json",
success:function (resp) {
//responseä»æå¡å¨ç«¯è¿åçjsonæ ¼å¼çå符串
//jqueryä¼æ该å符串转æ¢ä¸ºjson对象ï¼èµå¼ç»respå½¢å
console.log(resp.name+","+resp.age)
}
})
})
})
</script>
å¤çå¨è°ç¨HttpServletResponseè¿åä¸ä¸ªjsonæ°æ®
@Controller
public class MyController {
@RequestMapping(value = "/some.do",method = RequestMethod.POST)
public void dosome(HttpServletResponse response,String name,Integer age) throws IOException {
Student student=new Student();
student.setName(name);
student.setAge(age);
//å¤çajax,å°student转æ¢æjsonæ°æ®,æ使ç¨çæ¯fastjson
String st=JSON.toJSONString(student);
response.getWriter().write(st);
}
}
3.9 è¿åå¼ï¼å¯¹è±¡Object
ââObject:ä¾å¦StringãIntegerãMapãListãStudentççé½æ¯å¯¹è±¡ï¼å¯¹è±¡æå±æ§ï¼å±æ§å°±æ¯æ°æ®ãæ以è¿åObject表示æ°æ®ï¼åè§å¾æ å ³ã
ââå¯ä»¥ä½¿ç¨å¯¹è±¡è¡¨ç¤ºçæ°æ®ï¼ååºajax请æ±
ç°å¨åajaxï¼ä¸»è¦ä½¿ç¨jsonçæ°æ®æ ¼å¼ãå®ç°æ¥éª¤ï¼
ââ1.å å ¥å¤çjsonçå·¥å ·åºçä¾èµï¼springmvcé»è®¤ä½¿ç¨çjacksonã
<!--jacksonä¾èµ-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
ââ2.å¨SpringMVCé ç½®æ件ä¹é´å å ¥
<mvc:annotation-deriven>
注解驱å¨ã
<!--注解驱å¨-->
<mvc:annotation-driven/>
ââ3.å¨å¤çå¨æ¹æ³çä¸é¢å å ¥@ReponseBody注解
@Controller
public class MyController {
/*
* å¤çå¨æ¹æ³è¿åä¸ä¸ªStudentï¼éè¿æ¡æ¶è½¬å为jsonï¼ååºajax请æ±
* @ResponseBody:
* ä½ç¨:æå¤çå¨æ¹æ³è¿å对象转å为jsonåï¼éè¿HttpServletResponseè¾åºç»æµè§å¨
* ä½ç½®:æ¹æ³å®ä¹çä¸é¢ãåå
¶ä»æ³¨è§£æ²¡æ顺åºçå
³ç³»
*
* è¿å对象æ¡æ¶çå¤çæµç¨:
* 1.æ¡æ¶ä¼è°ç¨ArrayList<HttpMessageConverter>ä¸æ¯ä¸ªç±»çcanWrite()æ¹æ³å»æ£æ¥
* åªä¸ªHttpMessageConverteræ¥å£çå®ç°ç±»è½å¤çè¿åå¼ç±»åçæ°æ®ï¼ââMappingJackson2HttpMessageConverter
*
* 2.æ¡æ¶ä¼è°ç¨å®ç°ç±»çwrite()æ¹æ³ï¼å³MappingJackson2HttpMessageConverterçwrite()æ¹æ³
* æStudent对象转为jsonï¼è°ç¨jacksonçObjectMapperå®ç°è½¬ä¸ºjson
*
* 3.æ¡æ¶ä¼è°ç¨@RequestBodyæ2çå¤çç»æè¾åºå°æµè§å¨ï¼ajax请æ±å®æ
* */
@RequestMapping(value = "/some.do",method = RequestMethod.POST)
@ResponseBody
public Student dosome(HttpServletResponse response,String name,Integer age) throws IOException {
Student student=new Student();
student.setName(name);
student.setAge(age);
return student;
}
}
ââSpringMVCå¤çå¨æ¹æ³è¿åObjectï¼å¯ä»¥è½¬ä¸ºjsonè¾åºå°æµè§å¨ï¼ååºajaxçå é¨åç:
1. <mvc:annotation-driven>
注解驱å¨
<mvc:annotation-driven>
ââ注解驱å¨å®ç°çåè½æ¯ å®æjava对象å°jsonãxmlãtextãäºè¿å¶çæ°æ®æ ¼å¼ç转æ¢ã
ââHttpMessageConverteræ¥å£:æ¶æ¯è½¬æ¢å¨ã
ââåè½ï¼å®ä¹äºjava转为json,xmlçæ°æ®æ ¼å¼çæ¹æ³ãè¿ä¸ªæ¥å£æå¾å¤çå®ç°ç±»ã
ââè¿äºå®ç°ç±»å®æjava对象对jsonã对xmlã对äºè¿å¶æ°æ®ç转æ¢
ââ
<mvc:annotation-driven>
å¨å å ¥å°springmvcé ç½®æ件åï¼ä¼èªå¨å建HttpMessageConverteræ¥å£ç7个å®ç°ç±»å¯¹è±¡ï¼å æ¬
ç±» | ä½ç¨ |
---|---|
ByteArrayHttpMessageConverter | è´è´£è¯»åäºè¿å¶æ ¼å¼çæ°æ®åååºäºè¿å¶æ ¼å¼çæ°æ® |
StringHttpMeesageConverter | è´è´£è¯»ååç¬¦ä¸²æ ¼å¼çæ°æ®åååºåç¬¦ä¸²æ ¼å¼çæ°æ® |
ResourceHttpMessagerConverter | è´è´£è¯»åèµæºæ件åååºèµæºæ件æ°æ® |
SourceHttpMeesagerConverter | è½å¤è¯»ãåæ¥èªHTTPç请æ±ä¸ç¸åºçjavax.xml.transform.Source,æ¯æDOMSourceï¼SAXSourceåStreamSourceçXMLæ ¼å¼ |
ALLEncompassingFormHttpMessagerConverter | è´è´£å¤ç表å(form)æ°æ® |
jaxb2RootElementHttpMessagerConverter | 使ç¨JAXBè´è´£è¯»åååå ¥xmlæ ç¾æ ¼å¼çæ°æ® |
MappingJackson2HttpMessagerConverter | è´è´£è¯»åååå ¥jsonæ ¼å¼çæ°æ®ãå©ç¨jacksonçObjectMapper读åjsonæ°æ®ï¼æä½Objectç±»åæ°æ®ï¼å¯è¯»åapplication/jsonï¼ååºåªä½ç±»å为application/json |
å ç²ç两个å®ç°ç±»æ¯å¸¸ç¨ç
ââä¸é¢ä¸¤ä¸ªæ¹æ³æ¯æ§å¶æç»æè¾åºç»æµè§å¨æ¶ä½¿ç¨çï¼
ââboolean canWrite(class<?> var1,@Nullable MediaType var2);
ââvoid write(T var1,@Nullable MediaType var2,HttpOutputMessage var3);
ä¾å¦å¤çå¨æ¹æ³
@RequestMapping("/some.do")
public Student doSome(){
Student st=new Student();
st.setName("å¼ ä¸");
st.setAge(20);
return student;
}
ââ1)canWrite:æ£æ¥å¤çå¨æ¹æ³çè¿åå¼ï¼è½ä¸è½ä¸ºvar2表示çæ°æ®æ ¼å¼ã
ââæ£æ¥student(âå¼ ä¸â,20)è½ä¸è½è½¬ä¸ºvar2表示çæ°æ®æ ¼å¼ãå¦ææ£æ¥è½è½¬ä¸ºjsonï¼canWriteè¿åtrue
ââMediaType:表示æ°æ®æ ¼å¼ï¼ä¾å¦jsonãxmlç
ââ2)write:æå¤çå¨æ¹æ³çè¿åå¼å¯¹è±¡ï¼è°ç¨jacksonä¸çObjectMapping转为jsonå符串ã
ââjson=om.writeValueAsString(student);
[email protected]注解
ââæ¾å¨å¤çå¨æ¹æ³çä¸é¢ï¼éè¿HttpServletReponseè¾åºæ°æ®ï¼ååºajax请æ±ãæ§è¡æµç¨å¤§æ¦å¦ä¸
PrintWriter pw=response.getWriter();
pw.println(json);
pw.flush();
pw.close();