springmvc简单总结.docx

上传人:b****5 文档编号:30229913 上传时间:2023-08-07 格式:DOCX 页数:84 大小:124.25KB
下载 相关 举报
springmvc简单总结.docx_第1页
第1页 / 共84页
springmvc简单总结.docx_第2页
第2页 / 共84页
springmvc简单总结.docx_第3页
第3页 / 共84页
springmvc简单总结.docx_第4页
第4页 / 共84页
springmvc简单总结.docx_第5页
第5页 / 共84页
点击查看更多>>
下载资源
资源描述

springmvc简单总结.docx

《springmvc简单总结.docx》由会员分享,可在线阅读,更多相关《springmvc简单总结.docx(84页珍藏版)》请在冰豆网上搜索。

springmvc简单总结.docx

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名称-->

springmvc

org.springframework.web.servlet.DispatcherServlet

1

springmvc

/

--

说明:

此处的配置如果为*.do,那么我们请求的地址应该为:

http:

//localhost:

8080/springmvc/user/login.do

如果此处配置的地址为/,那么我们的请求地址应该为:

http:

//localhost:

8080/springmvc/user/login

*.do

-->

--/表示过滤所有-->

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**************-->

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.删

删除id为25的用户(后台代码有map的例子)

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向页面的传值的例子

Mapmap=newHashMap

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 中医中药

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1