1、springMVC教程目录SpringMvc教程 1初识springMVC 1背景 1常见MVC框架比较 2基于spring3.2的 采用annotation方式搭建springMVC环境 2springMVC的RequestMapping的基本设置 7在controller中获取前台传递的参数 9在controller中获取web元素 10将controller中数据传递到jsp页面 11设置跳转方式为重定向或者转发 14视图解析器的配置和使用 15controller中方法的返回值类型 15springMVC的文件上传于下载 19springMVC和jQuery的Ajax结合 23Spri
2、ngMVC拦截器 26sring MVC fromtag 28SpringMvc教程作者:DK 初识springMVC背景Spring 框架提供了构建 Web应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring M
3、VC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。常见MVC框架比较运行性能上: Jsp+servletstruts1spring mvcstruts2+freemarkerstruts2,ognl,值栈。开发效率上,基本正好相反。值得强调的是,spring mvc开发效率和struts2不相上下。Struts2的性能低的原因是因为OGNL和值栈造成的。所以,如果你的系统并发量高,可以使用freemaker进行显示,而不是采用OGNL和值栈。这样,在性能上会有相当大得提高。基于spring3.2的 采用annotation方式搭建springMVC环境一
4、、 servlet3.0之前 基于web.xml文件的配置。参考程序:101SpringMVC_servlet2.x_controller1、 上官网下载对应的zip包当然该zip并非最新的。下载地址为:http:/repo.spring.io/webapp/home.html?02、 解压之后得到目录:打开libs会看到会多jar这里边包括了所有的jar和source和doc。当然我们只是需要使用jar就可以了。3、创建空的web项目 目录结构如下:其中user实体类为:public class User private String name; private Integer age; p
5、rivate Date birth; public String getName() return name; public void setName(String name) this.name = name; public User(String name, Integer age, Date birth) super(); this.name = name; this.age = age; this.birth = birth; public Integer getAge() return age; public void setAge(Integer age) this.age = a
6、ge; public Date getBirth() return birth; public void setBirth(Date birth) this.birth = birth; public User() super(); / TODO Auto-generated constructor stub public User(String name) super(); this.name = name; Override public String toString() / TODO Auto-generated method stub return +name+; 4、在项目中添加如
7、下jar文件:spring-webmvc-3.2.0.RELEASE.jarspring-core-3.2.0.RELEASE.jarspring-context-3.2.0.RELEASE.jarspring-beans-3.2.0.RELEASE.jarspring-web-3.2.0.RELEASE.jarcommons-logging.jarspring-expression-3.2.0.RELEASE.jar其中commons-logging.jar请单独下载。5、在web.xml中添加过滤器的配置。 example org.springframework.web.servlet.D
8、ispatcherServlet contextConfigLocation /WEB-INF/spring-servlet.xml 1 example *.do 这个org.springframework.web.servlet.DispatcherServle即为springMVC的核心控制器。其中init-param中配置的是spring的配置文件的文件路径。6、在WEB-INF下添加spring的配置文件spring-servlet.xml 文件内容如下: 其中schemaLocation和xmlns建议直接拷贝。7、创建UserController如下:ControllerReque
9、stMapping(/user.do)public class UserController RequestMapping(params=method=add) public String addUser(Model model) model.addAttribute(message, 添加了一个用户); System.out.println(UserController.addUser(); return /WEB-INF/jsp/addsuc.jsp; 其中RequestMapping(/user.do)的配置是指:该controller的请求url为:user.doRequestMapp
10、ing(params=method=add)的注解是指:凡是请求的url为:user.do而带了参数method=add的请求会由方法addUser来处理。addUser的形参model为后续讲解内容。return /WEB-INF/jsp/addsuc.jsp; 是告诉spring完成处理之后直接进入该视图。8、添加对应的页面,测试请求user.do?method=add一、servlet3.0之后 基于annotation文件的配置。参考程序:102SpringMVC_servlet3.x_controllerservlet3.0之后,servlet使用注解,所以不再使用web.xml文件
11、。Springmvc配置方式如下:删除web.xml和spring-servlet.xml文件。添加类: 参考程序springMVC的RequestMapping的基本设置参考程序:103SpringMVC_servlet3.x_RequestMapping1、 在类的上面注解RequestMapping(/ex.do)意思为所有的ex.do请求全部进入该类处理。如上一章代码中编写RequestMapping(/user.do).所有的user.do请求都会进入该Controller。2、在自定义的controller中会调用有RequestMapping注解字样的方法来处理请求。Contro
12、llerRequestMapping(/user.do)public class UserController RequestMapping public String addUser(Model model) model.addAttribute(message, 添加了一个用户); System.out.println(UserController.addUser(); return /WEB-INF/jsp/addsuc.jsp; 3、当然可以编写多个处理请求的方法,而这些方法的调用都是通过RequestMapping的属性类控制调用的。RequestMapping属性: value:指
13、定请求的实际地址,指定的地址可以是URI Template 模式 (最终请求的url为类的注解的url+方法注解的url) value的uri值为以下三类: A) 可以指定为普通的具体值;如:ControllerRequestMapping(/user)public class UserControllerRequestMapping(value=/some.do) public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception System.out.pr
14、intln(handleRequest); return new ModelAndView(/WEB-INF/jsp/addsuc.jsp); 该注解的是说:请求的url为”user/some.do”就会进入该方法(handleRequest)处理。url:user/some.do B) 可以指定为含有某变量的一类值(URI Template Patterns with Path Variables);如:RequestMapping(value=/userId/delete.do,method=RequestMethod.GET) public String delete(PathVaria
15、ble String userId) System.out.println(delete:+userId); return /WEB-INF/jsp/addsuc.jsp;这个注解:url中带了参数的数据 userId url:user/1123/delete.do 使用PathVariable 指定形参接收url中的数据 C) 可以指定为含正则表达式的一类值( URI Template Patterns with Regular Expressions);如:RequestMapping(value=/userBirth:d4-d2-d2/update.do) public String u
16、pdate(PathVariable String userBirth) System.out.println(userBirth:+userBirth); return /WEB-INF/jsp/addsuc.jsp; 请求的url类似:user/1990-11-11/update.do 使用PathVariable 指定形参接收url中的数据 method: 指定请求的method类型, GET、POST、PUT、DELETE等; (也就是说只有制定类型的请求才会进入该方法处理) consumes: 指定处理请求的提交内容类型(Content-Type),例如application/jso
17、n, text/html; produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回; params: 指定request中必须包含某些参数值是,才让该方法处理。 headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。4、当类没有RequestMapping注解时,则直接参考方法的注解匹配对于的url。如:Controllerpublic class UserControllerControllerRequestMapping(/user.do)public void managerUser()在这里
18、url为user.do则直接使用managerUser处理请求。在controller中获取前台传递的参数参考程序:104SpringMVC_servlet3.x_reviceRequestParam将页面数据传递到controller页面表单: 用户名: 年龄: 生日: Controller为:/* * 1、直接使用形参获取前台传递的参数数据 * 要注意的是形参的名字必须和页面参数的名字一致 * param model * param name * param age * param birth * return */ RequestMapping(method=RequestMethod.
19、POST) public String addUser(Model model,String name,Integer age,Date birth) model.addAttribute(message, 添加了一个用户); System.out.println(name:+name + tage:+age+tbirht:+birth); System.out.println(UserController.addUser(); return /WEB-INF/jsp/addsuc.jsp; /* * 2、使用对象接受前台传递的参数, * 要注意的是前台传递的参数的名称必须和对象的属性名称一直
20、,如果不一致则可以使用ModelAttribute(u)String uname指定 */ RequestMapping(method=RequestMethod.POST) public String addUser(Model model,User user) model.addAttribute(message, 添加了一个用户); System.out.println(name:+user.getName() + tage:+user.getAge()+tbirht:+user.getBirth(); System.out.println(UserController.addUser(
21、); return /WEB-INF/jsp/addsuc.jsp; 在controller中获取web元素参考程序:105SpringMVC_servlet3.x_accessWebElement当某个方法需要使用web对象时(request,response,session,application)可以使用如下方式:除过application其他的对象都可以直接设为方法的形参即可。spring会自动将对应的对象传递给对应的形参。而application对象可以使用session对象获取。当然也可以在方法中使用response对象重定向到其他的url 这时方法最后return的url则可以视
22、作无效。同样的也可以使用request对象转发到其他的url。程序示例:RequestMapping(value=/web.do) public String getWebElement(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws IOException, ServletException System.out.println(使用request获取的前台参数:+request.getParameter(pname); request.setAttribute(messa
23、ge, 这个是request中的数据); session.setAttribute(message, 这个是session中的数据); session.getServletContext().setAttribute(message, 这个是application中的数据); /response.sendRedirect(); /return null; /request.getRequestDispatcher(/WEB-INF/jsp/showData.jsp).forward(request, response); return /WEB-INF/jsp/showData.jsp; 将c
24、ontroller中数据传递到jsp页面参考程序:106SpringMVC_servlet3.x_modelAndView1、可以在controller中获取request对象,然后将数据设置为request对象的属性,然后使用转发的方式进入jsp即可。这一点不赘述。2、将方法的返回值该为ModelAndView在返回时,将数据存储在ModelAndView对象中如: new ModelAndView(/WEB-INF/jsp/showData.jsp,message,message) 其中第一个参数为url,第二个参数为要传递的数据的key,第三个参数为数据对象。 在这里要注意的是 数据是默认被存放在request中的。程序示例: /使用modelAndView对象将数据传递到前台。 RequestMapping(value=/mad/showData_1.do) public ModelAndView showData_1() String message = 这个是要传递的数据; /其中第一个参数为url,第二个参数为要传递的数据的key,第三个参数为数据对象。 /在这里要
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1