1、springmvc简单总结Springmvc的简单总结一:springmvc的简单了解1. .Springmvc是spring的web框架围绕DispatcherServlet设计的。DispatchServlet的作用是将请求分发到不同的处理器。Spring的web框架可以包括可配置的处理器(Handlder)映射,视图(view)解析,本地化(local)解析,主题(theme)解析以及对文件上传的支持等2. springmvc的请求模式:3. 其实,每个MVC框架的执行过程都是大同小异的;当一个request过来时,它通过一个servelet来响应request;再根据request的路
2、径名和配置将这个requestdispatch给一个controller执行;最后将之返回配置文件里对应的页面。在springmvc中,这个servelet的名字叫:Dispatchservlet4. Spring的Controller是singleton的,或者是线程不安全的说明。分析:和Struts一样,Spring的Controller是singleton的!这意味着每个request过来,系统都会用原来的instance去处理,这样就导致了两个结果:我们不用每次创建Controller,减少了对象创建和垃圾回收的时间。由于只有一个Controller的instance,当多个线程调用它
3、的时候,它里面的instance变量不是线程安全的。这也是webworks吹嘘的地方,它的每个Action都是线程安全的。因为每过来一个request,它就会创建一个Action对象。由于现代JDK垃圾收集动能的效率已经不成问题了,所以这种创建完一个对象就扔掉的模式也得到很多人的认可。二:简单的配置了解1.导入需要的jar包【去网上搜一下】2.配置web.xml springmvc org.springframework.web.servlet.DispatcherServlet 1 springmvc / !- 说明:此处的配置如果为*.do,那么我们请求的地址应该为:http:/local
4、host:8080/springmvc/user/login.do 如果此处配置的地址为/,那么我们的请求地址应该为:http:/localhost:8080/springmvc/user/login *.do - 3.配置springmvc-servlet.xml说明,可以放在WEB-INF下面就行。有些配置是暂时不需要的,一并拷贝过来了。 !- 指定一个包让其自动扫描 - !- 放行了以/static/开始的请求 - 4.在WebRoot下面建立一个文件夹static用于放静态的文件,static下面再建立三个静态文件夹:images用于放图片,script用于放js文件,style用于放
5、css文件5.在WEB-INF下面建立一个文件夹views,用于放jsp文件。可以先建立一个工程引用的jsp文件,base.jsp% taglib prefix=c uri=三:基本功能的学习建立一个index.jsp,引入base.jsp 1.简单的请求package com.hanchao.web;import java.util.Date;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.spring
6、framework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;/* * 首页的处理 * author hanchao * 2012-02-24 */Controllerpublic class ApplicationController /RequestMapping(value=/,method=RequestMethod.GET) RequestMapping(/) public String index() System.out.print
7、ln(Welcome to springMVC!); System.out.println( 2013-01-03-han-add = + String.format(%1$tY年%1$tm月%1$te日,new Date(); /return index;/这样就请求转发去了index.jsp中了 /*注意事项:重定向到reidrect:/index时。必须有对应的RequestMapping(/index)*/ return redirect:/index; /重定向到index.jsp /* RequestMapping(/index) public String toIndex() S
8、ystem.out.println(去首页。); return index; /说明:如果一个方法仅仅是为了跳转,那么我们可以直接在springmvc-servlet.xml中加上如下的配置即可: / */ /* * 放行 /url1/url2的请求 * hanchao * 2013-03-04 */ public String commonURL(PathVariable(URL1) String URL1, PathVariable(URL2) String URL2) return / + URL1 + / + URL2; /* * 放行 /url1/url2/url3的请求 * han
9、chao * 2013-03-04 */ public String commonURL(PathVariable(URL1) String URL1, PathVariable(URL2) String URL2,PathVariable(URL3) String URL3) return / + URL1 + / + URL2 + / + URL3; 注意事项:红色部分的Controller , 对于公共的URL,我们可以注释到类的头部,比如对于user对象的操作, 我们可以再action的头部注释:RequestMapping(/user)对于某些请求我们可以限制提交方式,比如用户登录,
10、我们只允许POST提交,我们可以在方法上面加上:RequestMapping(/login,method=RequestMethod.POST)2.增Controller :/* * 对t_user表的处理 * author chao * 2013-03-02 */ControllerRequestMapping(/user)public class UserController 说明: Model model,HttpServletRequest request, ModelMap map声明变量 request.getSession().setAttribute(test, haiwei2
11、Session); request.setAttribute(test, haiwei1request); map.addAttribute(test, haiweiModelMap); model.addAttribute(test, haiweiModel); 我通过$test这个方式取值,优先取Model和ModelMap的, Model和ModelMap是同一个东西,谁最后赋值的就取谁的,然后是request,最后是从session中获取 :如果我们在类名上配置一个RequestMapping(/user)的话 * 我们在每个方法上就不需要配置了RequestMapping(/logi
12、n) * 否则,方法上需要这么配置:RequestMapping(/user/login).表单提交(增) 1.表单提交(增) Username: Sex: 对应的UserController.java中的方法: /* * 用户登录 该例子涉及到表单提交传值,一种是表单中的值name=username和User对象中的username属性名相同; * 另一种是和对象的属性没有关系的,比如:sex; * 该例子还涉及到sess
13、ion的使用,当然,如果你想使用request,response, * 直接在参数中加HttpServletRequest request ,HttpServletResponse即可 * * 如果我们要限制提交的方式:我们把RequestMapping(/login)改成 * RequestMapping(value=/login,method=RequestMethod.POST) * hanchao * 2013-03-04 * * * */ RequestMapping(/login) public String login( User user, String sex, Model
14、model, HttpSession session, HttpServletRequest request) System.out.println(页面传来的用户名: + user.getUsername(); System.out.println(页面传来的性别: + sex); /向页面传值的方式 model.addAttribute(username, user.getUsername(); model.addAttribute(sex, sex); /不用传不行 /用session传值 session.setAttribute(demo, session传值); /request传值
15、 request.setAttribute(demoRequest, request传值); /传一个对象到页面(传一个集合或者map是相同的方式) /model.addAttribute(user, user);/不用传也行,因为方法里的对象参数会自动的被放入reqeust中 /return forward:/user/login1; return main; / return redirect:/main; /这种重定向的跳转方式,不能传值model;还必须要配置;或者自己写一个跳转的方法; 当然,无论是POST还是GET方式,我么也可以这样:public String login1(St
16、ring username,String sex,Model model,HttpServletRequest request) System.out.println(login1.); System.out.println( - : + request.getRequestURL(); System.out.println(页面传来的用户名: + username); System.out.println(页面传来的性别: + sex); return main; 用ModelAndView向页面传值 /* * 用户登录 此例子用的ModelAndView向页面进行传值了。 并限制了,提交的
17、方法为post;如果你把form表单的提交方式修改了就会报错了。 * 和上面一个例子有异曲同工之处。 * hanchao * 2013-03-04 * * * * */ RequestMapping(value=/login,method=RequestMethod.POST) public ModelAndView login(User user,String sex) ModelAndView mav = new ModelAndView(); /要跳转的页面 mav.setViewName(main); /向页面传值 mav.addObject(username, user.getUse
18、rname(); mav.addObject(sex, sex); /向要跳转的传个对象 mav.addObject(user, user); return mav; 3.删2.删 删除id为25的用户(后台代码有map的例子) 删除id为25的用户_ajaxjs$(#del).click(function() var basePath = $(#basePath).val(); alert(basePath + /user/delajax/25); $.get(basePath + /user/delajax/25,function(data) if(data = ok) alert(删除成
19、功!); else alert(删除失败!); ); );Controller : /* * 根据用户ID删除用户 * * 此处的例子是url传值的方式的例子, * /del/id中的id尽量和 PathVariable String id中的id的值保持一致。 * * hanchao * 2013-03-04 * * * * */ RequestMapping(/del/id) public String del(PathVariable String id,Model model) System.out.println(要删除的用户的ID为: + id); model.addAttribute(flag, ok); /map向页面的传值的例子 Map map = new HashMapString,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1