1。SpringMVC简介一、Servlet的缺点1)使用Servlet进行开发。通常,一个Servlet类处理一个请求。如果一个项目有数百或数千个请求需要处理,则需要创建数百个。成千上万的Servlet用于处理这些请求,并且Servlet类的数量急剧增加。2)在Servlet2.5和2.5之前的版本中,每个Servlet都需要在web.xml文件中至少配置8行。团队开发过程中,配置信息过多,容易出现问题。3)在Servlet中,通过request来获取请求参数,无论传入什么值,接收时都会以字符串形式接收。如果该值是数字或日期类型的值,则需要在后面进行转换。request.getParameter(StringparamName)Stringrequest.getParameterValues(StringparamName)String[]4)Servlet需要依赖服务器运行,不能进行单元测试。...2.SpringMVC简介SpringMVC是Spring框架中的一个模块,是对应于表现层的解决方案。SpringMVC是一个基于MVC设计模式的表现层框架。它并没有完全取代Servlet,底层也是通过Servlet实现的。DispatcherServlet:前端控制器,用于接收分发请求给各个组件,各个组件处理请求,最后将处理结果响应给浏览器。DispatcherServlet需要在web.xml文件中配置。=================================================2.SpringMVC√1.创建项目,导入jar包,创建配置文件1)CGB-SPRINGMVC-01(MavenWeb项目)2)导入springmvcjar包(包括springjar包)和Servlet、jspjar包3)提供src/main/resources/springmvc-config.xml2,在web.xml文件中配置前端控制器(DispatcherServlet)1)配置前端控制器servlet-class,url-pattern配置前端控制器拦截JSP以外的消息所有请求。2)配置springmvc核心配置文件的位置contextConfigLocationclasspath:springmvc-config.xml3.创建/WEB-INF/pages/home.jsp文件/WEB-INF/pages/test.jsp文件4.创建控制器(HelloController)com.tedu.controller.HelloController5.配置核心配置文件springmvc6.编写HelloController类,完成需求,运行测试!----------------------------------------@Controller@RequestMapping("/HelloController")publicclassHelloController{@RequestMapping("/hello")publicStringtestHello(){return"xxx";}}localhost:8080/CGB-SPRINGMVC-01/hw/hello--------------------------------------@ControllerpublicclassHelloController{@RequestMapping("/hello")publicStringtestHello(){return"xxx";}}localhost:8080/CGB-SPRINGMVC-01/你好--------------------------------------三、SpringMVC参数绑定1、简单类型参数绑定------------------------------1.1。要求:浏览器请求:localhost:8080/CGB-SPRINGMVC-01/testParam1?name=张飞&age=20&addr=从北京获取请求中name、age、addr参数的值/*1.简单类型参数绑定*浏览器请求:/testParam1?name=张飞&age=20&addr=北京*获取请求值中携带的name、age、addr参数*/@RequestMapping("/testParam1")publicStringtestParam1(Stringname,Integerage,String地址){System.out.println("name="+name);System.out.println("年龄="+年龄);System.out.println("addr="+addr);return"home";}总结:该接收请求参数的方法要求:??(1)方法上的形参类型必须与请求参数值的类型一致;(2)方法上的形参名称必须与请求参数名称一致;2.封装类型参数绑定--------------------------------浏览器请求:localhost:8080/CGB-SPRINGMVC-01/testParam2?name=LiuBei&age=22&addr=Hebei获取请求中name,age,addr参数的值声明一个User类,在User类中声明name,age,addr属性,并提供相应的set和getmethods/*3.封装类型参数绑定*浏览器请求:/testParam2?name=LiuBei&age=22&addr=Hebei*获取请求name、age、addr参数的值*声明一个User类,声明name,User类中的age、addr属性,并提供相应的set和get方法*/@RequestMapping("/testParam2")publicStringtestParam2(User用户){System.out.println("name="+user.getName());System.out.println("age="+user.getAge());System.out.println("addr="+user.getAddr());return"home";}总结:这种接收请求参数的方法要求wrapper类型中的属性名和请求参数的名字一致(底层是调用wrapper类型的setXxx方法给它赋值xxx属性,赋值来自请求参数中名为xxx的参数的值)3.日期类型参数绑定----------------------------------浏览器请求:localhost:8080/CGB-SPRINGMVC-01/testParam3?birthday=2020-2-815:13:41获取请求中date参数的值/*4.日期类型的参数绑定*浏览器请求:/testParam4?date=2020-3-315:36:08*获取请求中日期参数的值*HTTPStatus400–BadRequest:请求参数类型没有不匹配*因为springmvc框架底部默认的时间格式是用斜杠(/)分隔的,例如:*/testParam3?birthday=2020/3/315:36:08*因此,解决方案一:改浏览器发送的日期格式为斜杠分隔*解决方案二:修改springmvc框架底层使用斜杠默认使用斜杠分隔时间*注意:改为斜杠后,斜杠分隔的时间将不会在服务器端*/@RequestMapping("/testParam4")publicStringtestParam4(Datedate){System.out.println("date="+date);return"home";}/*自定义日期转换格式:底层springmvc框架默认用斜线而不是水平线分隔时间*/@InitBinderpublicvoidInitBinder(ServletRequestDataBinderbinder){binder.registerCustomEditor(java.util.Date.class,newCustomDateEditor(newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"),true));}3.SpringMVC跳转和乱码处理1.请求转发/*5.测试spring请求转发*需求:从/testForward转发到/hello*浏览器请求/testForward--forwarding(地址不变)-->/hello*/hello对应的方法--forwarding(地址不变)-->home.jsp*/@RequestMapping("/testForward")publicStringtestForward(){System.out.println("testForward方法执行...");return"forward:/hello";}请求转发总结:转发只能是同一个应用内资源之间的跳转:(1)从Controller一个方法转发到另一个方法:return"forward:/方法上的映射路径";(2)从Controller中的方法转发JSP:返回“JSP名称”;2.重定向/*5.测试spring的reloadOrientation*需求:从/testRedirect重定向到/hello*浏览器请求/testRedirect--重定向(地址会变)-->/hello*/hello对应的方法--转发(地址不变)-->home.jsp*/@RequestMapping("/testReddirect")publicStringtestRedirect(){System.out.println("testRedirect方法执行...");//return"redirect:/hello";return"redirect:http://www.baidu.com";}重定向总结:跳转时重定向没有限制(1)同一个应用中的controller方法跳转到另一个方法:返回“redirect:/方法上的映射路径”;(2)两个web应用之间的不同Resource跳转:从controller方法跳转到/day11/test.jspreturn"redirect:http://localhost/day11/test.jsp";(3)不同服务器之间的资源跳转:从controller方法跳转到百度返回"redirect:http"://www.baidu.com";3.乱码处理Servlet:(1)如果是GET提交,且tomcat版本8.0以上,tomcat底层GET提交中文乱码问题已经处理了,所以tomcat8.0以后的版本GET提交是没有乱码的!(2)如果是POST提交,不管是哪个版本的tomcat服务器,在获取中文参数的时候都会出现乱码.如何解决?request.setCharacterEncoding("utf-8");springmvc提供了处理POST提交中文参数乱码的方法:在web.xml文件中配置一个乱码处理过滤器过滤器的配置如下:param-name>encodingUTF8encodingFilter/*四、SpringMVC响应数据1、使用Model将数据从Servlet带入JSP:(通过请求域带入数据)request.setAttribute("xx",xxx);request.getRequestDispatcher("xxx").forward(req,res);BringdatafromControllertoJSP:(BringdatathroughModel)model.addAttribute("xx",xxx);返回“xxx”;如果需要从Controller给JSP带来数据,可以在Controller的方法中声明一个Model对象。其实Model底层就是请求域,你可以在Model域存储数据,然后通过转发把数据带到JSP,把JSP中的数据拿出来展示!