SpringMVC学习
目录:
1、当出现项目与当前jdk版本不同时在Tomcat不能部署:
2、Eclipse导入包提示Setting build path has encountered a problem。
3、在Eclipse导入maven项目:
4、SpringMVC的注解使用:
5、handler method参数绑定常用的注解:
6、Pom.xml的作用:
7、Maven简介:
8、SpringMVC总体处理流程:
1、当出现项目与当前jdk版本不同时在Tomcat不能部署:
答:解决方法:
①右键项目,找到“properties”
②弹出的窗口中找到“Project Facets”
③找到Java,将版本修改为本地工程jdk版本
④重新将项目部署入tomcat服务器即可
问题扩展:同时可能回连带出现“Failed while changing version to java”的报错
解决方法:
是问题2的原因导致的。
2、Eclipse导入包提示Setting build path has encountered a problem。
答:解决方法:
原因有可能是因为.classpath文件为隐藏文件,修改其隐藏属性为可见即可。
3、在Eclipse导入maven项目:
答:操作过程:
①将工程项目复制你的工作空间目录(D:/workspace)
②进入eclipse页面,右键Import
③找到maven,选择Existing Maven Projects
④在root directory点击browse,进入工作空间目录,自动扫描,找到类似“/springmvc/pom.xml”的文件
⑤点击Finish
4、SpringMVC的注解使用:
答:(1)@Controller
控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理后封装成一个Model,然后再把该Model返回给对应的View进行展示。使用@RequestMapping和@RequestParam等一些注解用以定义URL请求和Controller方法之间的映射,这样的Controller就能被外界访问到。
@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。
把一个控制器类交给Spring 来管理。有两种方式:
①在SpringMVC 的配置文件中定义MyController 的bean 对象。
②在SpringMVC 的配置文件中告诉Spring 该到哪里去找标记为@Controller 的Controller 控制器。
(2)@Autowired
@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。
(3)@RequestMapping
用来定义访问的URL,你可以为整个类定义一个@RequestMapping,或者为每个方法指定一个。 把@RequestMapping放在类级别上,这可令它与方法级别上的@RequestMapping注解协同工作,取得缩小选择范围的效果。
完整的参数项为:
@RequestMapping(value="",method ={"",""},headers={},params={"",""})
value :String[] 指定请求的实际地址
method: RequestMethod[]指定请求的method类型,字符数组,查看RequestMethod类,包括GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE,常用RequestMethod.GET,RequestMethod.POST
headers:String[] 指定request中必须包含某些指定的header值,才能让该方法处理请求。headers一般结合method = RequestMethod.POST使用
params: String[] 指定request中必须包含某些参数值,才让该方法处理。字符数组 例如:userId=id
value的配置还可以采用模版变量的形式 ,例如:@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
(4)@ResponseBody
这个注解可以直接放在方法上,表示返回类型将会直接作为HTTP响应字节流输出(不被放置在Model,也不被拦截为视图页面名称)。可以用于ajax。
作用:该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
(5)@RequestParam
主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:
defaultValue = "0", required = false, value = "isApp";
defaultValue 表示设置默认值,
required 通过boolean设置是否是必须要传入的参数,
value 值表示接受的传入的参数类型。
(6)@PathVariable
用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出URI模板中的变量作为参数。
@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
Owner owner = ownerService.findOwner(ownerId);
model.addAttribute("owner", owner);
return "displayOwner";
}
如果@RequestMapping没有定义类似"/{ownerId}"这种变量,则使用在方法中@PathVariable会报错。
(7)@CookieValue:
把Request header中关于cookie的值绑定到方法的参数上。
例如:@RequestMapping("/displayHeaderInfo.do")
public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie) { }
(8)@RequestHeader :
把Request请求header部分的值绑定到方法的参数上。
例如:
这是一个Request的header部分:
Host localhost:8080
Accept text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language fr,en-gb;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
@RequestMapping("/displayHeaderInfo.do")
public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,
@RequestHeader("Keep-Alive") long keepAlive) { }
上面的代码,把request header部分的Accept-Encoding的值,绑定到参数encoding上了,Keep-Alive header的值绑定到参数keepAlive上。
5、handler method参数绑定常用的注解:
答:根据处理的Request的不同内容部分分为四类:
(1)处理requet uri部分(这里指uri template中variable,不含queryString部分)的注解:@PathVariable;
(2)处理request header部分的注解:@RequestHeader, @CookieValue;
(3)处理request body部分的注解:@RequestParam, @RequestBody;
(4)处理attribute类型的注解:@SessionAttributes, @ModelAttribute;
6、Pom.xml的作用:
答:POM作为项目对象模型,它是工作在maven的基本单位。这是一个 XML 文件。它始终保存在该项目基本目录中的 pom.xml 文件。POM 包含的项目是使用 Maven 来构建的,以及它也包含各种配置信息。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。maven项目里面需要引入的jar包都在这里面配置,然后maven会自动下载这些依赖包。
7、Maven简介:
答:Maven是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉Maven执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven运行了许多默认的插件目标,这些目标完成了像编译和创建一个JAR文件这样的工作。
此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。
8、SpringMVC总体处理流程:
图8.1 SpringMVC工作原理
(1)发起Http请求到前端控制器(DispatchServlet)
(2)前端控制器请求HandlerMapping查找Handler(通过xml配置、注释进行查找)
(3)处理器映射器(HandlerMapping)向前端控制器返回Handler
(4)前端控制器调用处理器适配器(HandlerAdapter)去执行Handler
(5)处理器适配器执行Handler
(6)Handler执行完给处理器适配器返回ModelAndView
(7)处理器适配器向前端控制器返回ModelAndView(ModelAndView是SpringMVC的底层对象,包括Model和View)
(8)前端控制器请求视图解析器(ViewResolver)进行视图解析,根据逻辑视图名解析为真正的视图
(9)视图解析器向前端控制器返回view
(10)前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域中
(11)前端控制器向用户响应结果