springmvc简单总结.docx
- 文档编号:30229913
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:84
- 大小:124.25KB
springmvc简单总结.docx
《springmvc简单总结.docx》由会员分享,可在线阅读,更多相关《springmvc简单总结.docx(84页珍藏版)》请在冰豆网上搜索。
springmvc简单总结
Springmvc的简单总结
一:
springmvc的简单了解
1..Springmvc是spring的web框架围绕DispatcherServlet设计的。
DispatchServlet的作用是将请求分发到不同的处理器。
Spring的web框架可以包括可配置的处理器(Handlder)映射,视图(view)解析,本地化(local)解析,主题(theme)解析以及对文件上传的支持等
2.springmvc的请求模式:
3.其实,每个MVC 框架的执行过程都是大同小异的;
①当一个request过来时,它通过一个servelet来响应request;
②再根据request的路径名和配置将这个request dispatch 给一个controller执行;
③最后将之返回配置文件里对应的页面。
在springmvc中,这个servelet的名字叫:
Dispatchservlet
4.Spring的Controller是singleton的,或者是线程不安全的说明。
分析:
和Struts一样,Spring的Controller是singleton的!
这意味着每个request过来,系统都会用原来的instance去处理,这样就导致了两个结果:
①我们不用每次创建Controller,减少了对象创建和垃圾回收的时间。
②由于只有一个Controller的instance,当多个线程调用它的时候,它里面的instance变量不是线程安全的。
这也是webworks吹嘘的地方,它的每个Action都是线程安全的。
因为每过来一个request,它就会创建一个Action对象。
由于现代JDK垃圾收集动能的效率已经不成问题了,所以这种创建完一个对象就扔掉的模式也得到很多人的认可。
二:
简单的配置了解
1.导入需要的jar包
【去网上搜一下】
2.配置web.xml
--springmvc的配置-->
--此处的name关系到springmvc-servlet.xml中springmvc名称-->
--
说明:
此处的配置如果为*.do,那么我们请求的地址应该为:
http:
//localhost:
8080/springmvc/user/login.do
如果此处配置的地址为/,那么我们的请求地址应该为:
http:
//localhost:
8080/springmvc/user/login
-->
--/表示过滤所有-->
3.配置springmvc-servlet.xml
说明,可以放在WEB-INF下面就行。
有些配置是暂时不需要的,一并拷贝过来了。
xmlversion="1.0"encoding="UTF-8"?
>
//www.springframework.org/schema/beans" xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xmlns: mvc="http: //www.springframework.org/schema/mvc" xmlns: context="http: //www.springframework.org/schema/context" xsi: schemaLocation=" http: //www.springframework.org/schema/beans http: //www.springframework.org/schema/beans/spring-beans-3.0.xsd http: //www.springframework.org/schema/context http: //www.springframework.org/schema/context/spring-context-3.0.xsd http: //www.springframework.org/schema/mvc http: //www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> --指定一个包让其自动扫描 component-scanbase-package="com.hanchao.web"/> component-scanbase-package="com.hanchao.excel"/>--> component-scanbase-package="com.hanchao.*"/> --默认的注解映射的支持--> annotation-driven/> --下面注释的部分表示: 强调所有的请求都要经过springmvc框架--> default-servlet-handler/> --放行了以/static/开始的请求 resourceslocation="/static/"mapping="/static/**"/>--> --当一个方法完全是为了跳转时,我们可以省略该方法,而在此写一个配置就行了--> view-controllerpath="/index"view-name="index"/> view-controllerpath="/main"view-name="main"/> view-controllerpath="/success"view-name="success"/> view-controllerpath="/user/demo_ajax_post2"view-name="ajax_post2"/> view-controllerpath="/excel/toexcel"view-name="excel_demo"/> --配置springmvc的视图解析器--> class="org.springframework.web.servlet.view.InternalResourceViewResolver"> --文件上传解析器--> class="mons.CommonsMultipartResolver"> 4.在WebRoot下面建立一个文件夹static用于放静态的文件, static下面再建立三个静态文件夹: images[用于放图片],script[用于放js文件],style[用于放css文件] 5.在WEB-INF下面建立一个文件夹views,用于放jsp文件。 可以先建立一个工程引用的jsp文件,base.jsp <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%> <%@taglibprefix="c"uri=" <% Stringpath=request.getContextPath(); StringbasePath=request.getScheme()+": //"+request.getServerName()+": "+request.getServerPort()+path; pageContext.setAttribute("basePath",basePath); %> 三: 基本功能的学习 建立一个index.jsp,引入base.jsp→<%@includefile="base.jsp"%> 1.简单的请求 packagecom.hanchao.web; importjava.util.Date; importorg.springframework.stereotype.Controller; importorg.springframework.web.bind.annotation.PathVariable; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RequestMethod; /** *首页的处理 *@authorhanchao *2012-02-24 */ @Controller publicclassApplicationController{ //@RequestMapping(value="/",method=RequestMethod.GET) @RequestMapping("/") publicStringindex(){ System.out.println("WelcometospringMVC! ! "); System.out.println("2013-01-03-han-add================="+String.format("%1$tY年%1$tm月%1$te日",newDate())); //return"index";//这样就请求转发去了index.jsp中了 /**注意事项: 重定向到reidrect: /index时。 必须有对应的RequestMapping("/index")*/ return"redirect: /index";//重定向到index.jsp } /*@RequestMapping("/index") publicStringtoIndex(){ System.out.println("去首页。 。 。 。 。 。 "); return"index"; //说明: 如果一个方法仅仅是为了跳转,那么我们可以直接在springmvc-servlet.xml中加上如下的配置即可: // view-controllerpath="/index"view-name="index"/> }*/ /** *放行/url1/url2的请求 *hanchao *2013-03-04 */ publicStringcommonURL(@PathVariable("URL1")StringURL1, @PathVariable("URL2")StringURL2){ return"/"+URL1+"/"+URL2; } /** *放行/url1/url2/url3的请求 *hanchao *2013-03-04 */ publicStringcommonURL(@PathVariable("URL1")StringURL1, @PathVariable("URL2")StringURL2,@PathVariable("URL3")StringURL3){ return"/"+URL1+"/"+URL2+"/"+URL3; } } 注意事项: ①红色部分的@Controller, ②对于公共的URL,我们可以注释到类的头部,比如对于user对象的操作, 我们可以再action的头部注释: @RequestMapping("/user") ③对于某些请求我们可以限制提交方式,比如用户登录,我们只允许POST提交, 我们可以在方法上面加上: @RequestMapping("/login",method=RequestMethod.POST) 2.增 Controller: /** *对t_user表的处理 *@authorchao *2013-03-02 */ @Controller @RequestMapping("/user") publicclassUserController{ } 说明: ① Modelmodel,HttpServletRequestrequest,ModelMapmap声明变量 request.getSession().setAttribute("test","haiwei2Session"); request.setAttribute("test","haiwei1request"); map.addAttribute("test","haiweiModelMap"); model.addAttribute("test","haiweiModel"); 我通过${test}这个方式取值,优先取Model和ModelMap的, Model和ModelMap是同一个东西,谁最后赋值的就取谁的,然后是request,最后是从session中获取 : 如果我们在类名上配置一个@RequestMapping("/user")的话 *我们在每个方法上就不需要配置了@RequestMapping("/login") *否则,方法上需要这么配置: @RequestMapping("/user/login") ①.表单提交(增) --**************1**************--> --表单默认: method="get"--> Username: Sex: 对应的UserController.java中的方法: /****************** *用户登录 该例子涉及到表单提交传值,一种是表单中的值name="username"和User对象中的username属性名相同; *另一种是和对象的属性没有关系的,比如: sex;; *该例子还涉及到session的使用,当然,如果你想使用request,response, *直接在参数中加HttpServletRequestrequest,HttpServletResponse即可 * *如果我们要限制提交的方式: 我们把@RequestMapping("/login")改成 *@RequestMapping(value="/login",method=RequestMethod.POST) *hanchao *2013-03-04 **************** * */ @RequestMapping("/login") publicStringlogin( Useruser, Stringsex, Modelmodel, HttpSessionsession, HttpServletRequestrequest){ System.out.println("页面传来的用户名: "+user.getUsername()); System.out.println("页面传来的性别: "+sex); //向页面传值的方式 model.addAttribute("username",user.getUsername()); model.addAttribute("sex",sex);//不用传不行 //用session传值 session.setAttribute("demo","session传值"); //request传值 request.setAttribute("demoRequest","request传值"); //传一个对象到页面(传一个集合或者map是相同的方式) //model.addAttribute("user",user);//不用传也行,因为方法里的对象参数会自动的被放入reqeust中 //return"forward: /user/login1"; return"main"; //return"redirect: /main";//这种重定向的跳转方式,不能传值model;还必须要配置 view-controllerpath="/main"view-name="main"/>;或者自己写一个跳转的方法; } 当然,无论是POST还是GET方式,我么也可以这样: publicStringlogin1(Stringusername,Stringsex,Modelmodel,HttpServletRequestrequest){ System.out.println("login1...."); System.out.println("--------: "+request.getRequestURL()); System.out.println("页面传来的用户名: "+username); System.out.println("页面传来的性别: "+sex); return"main"; } 用ModelAndView向页面传值 /****************** *用户登录此例子用的ModelAndView向页面进行传值了。 并限制了,提交的方法为post;如果你把form表单的提交方式修改了就会报错了。 *和上面一个例子有异曲同工之处。 *hanchao *2013-03-04 **************** * * */ @RequestMapping(value="/login",method=RequestMethod.POST) publicModelAndViewlogin(Useruser,Stringsex){ ModelAndViewmav=newModelAndView(); //要跳转的页面 mav.setViewName("main"); //向页面传值 mav.addObject("username",user.getUsername()); mav.addObject("sex",sex); //向要跳转的传个对象 mav.addObject("user",user); returnmav; } 3.删 2.删 void(0)"id="del">删除id为25的用户___ajax js $("#del").click(function(){ varbasePath=$("#basePath").val(); alert(basePath+"/user/delajax/25"); $.get(basePath+"/user/delajax/25",function(data){ if(data=='ok'){ alert("删除成功! "); }else{ alert("删除失败! ! "); } }); }); Controller: /***************** *根据用户ID删除用户 * *此处的例子是url传值的方式的例子, */del/{id}中的id尽量和@PathVariableStringid中的id的值保持一致。 * *hanchao *2013-03-04 **************** * * */ @RequestMapping("/del/{id}") publicStringdel(@PathVariableStringid,Modelmodel){ System.out.println("要删除的用户的ID为: "+id); model.addAttribute("flag","ok"); //map向页面的传值的例子 Map1.表单提交(增)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- springmvc 简单 总结