springmvc

框架---配置文件+jar包

1.MVC:是一种软件架构的思想。按照M-模型,V-视图,C-控制器来划分。
M--model,指工程中的javabean,作用是处理数据。 V-view,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据。 C--Controller,控制层,指工程的servlet,
作用是请求接收和响应浏览器。
2.JavaBean分为两类:一类是实体类Bean,对应数据库的表,专门存储业务数据的。
一类是业务处理Bean,指Service或Dao对象,专门用于处理业务逻辑和访问数据。
3.MVC工作流程:用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller调用相应的model层处理请求,处理完毕将结果返回给controller,
controller再根据请求处理的结果找到相应的view视图,响应给浏览器

4.springmvc特点:1.与ioc容器等无缝对接。2.基于原生的servlet,通过强大的前端控制器Dispatcherservlet对请求和响应进行统一处理。

5.webxml的配置方式:1.默认配置方式,在webinfo中配置servlet的name与servlet-mapping。
2.扩展配置(常用):在<servlet>标签中<init-param>配置上下文路径与springmvc配置文件的位置与名字,springmvc的配置文件与spring的配置文件格式一致,xml配置。


6.扩展配置:1.配置servlet的映射,servlet的class标签是DispatcherServlet,<servlet-Mapping>的url路径写/。
2.配置<init-param> ,name为contextconfigLocation--上下文配置,value为classpath:配置文件(spring的xml配置文件名,在resource中)
3.将DispatcherServlet的初始化提前到服务器启动时。<load-on-startup>1<...........>
7.配置springmvc:添加视图解析器。以及视图前缀与后缀的名字。


8.在main下的java创建处理请求的类。 1.添加@Controller注解,将该类交给ioc管理。2.创建String方法,在方法上添加@RequestMapping(value=“/...”)请求映射注解,value的值为处理的请求页面,return 视图名(html文件名)。

总结:1.创建maven工程,并在pom.xml中配置需要的包。2.在main目录下创建一个webapp,在项目结构中添加web.xml的配置。
3.在web.xml进行扩展配置,配置servlet,servletclass配置为DispatcherServlet。上下文配置,contextconfigLocation-->classpath(resource下):local,spring的配置文件位置。配置 <load-on-startup>1--->初始化服务器启动。
4.配置spring.xml,开启注解扫描,配置视图解析器。--便于在类中处理请求对应的视图页面(html)。
5.在main下的 java中写处理请求的类,添加注解@Controller, 创建方法,添加注解@RequestMaping(value=' thymeleaf命名空间配置的连接名。 '),在String方法中return视图名,springmvc就会跳转到对应的视图。
eg:index页面的超链接:<a th:href="@{/adad}">target</a>, 则在类方法中@RequestMapping(value="/adad"){ return ”跳转的页面“]。--相当于超连接里面是处理请求,return 的是处理结果。
6.配置tomcat,启动。
**注意:如果在类上面也加了RequestMapping注解的话,需要在请求方法中的return的页面视图的超链接中添加类上的RequestMapping的value值。 类上的RequsetMapping是初始路径,方法上的是绝对路径。

9.RequestMapping的value:1.value值通过请求的请求地址匹配请求映射。 2.是一个字符串的数组,表示该请求映射能够匹配多个请求地址所对应的请求。3.必须设置,至少通过请求地址匹配请求映射。

10.RequestMapping 的method:1.method属性通过请求方式(get/post)匹配请求映射。2.mthod属性是数组,可以支持多种类型的请求。 3.不设置值是所有请求都可以执行。*****405-----请求方式不被支持。

11.RequestMapping的派生注解:1.GetMapping----method=get--不需要设置,只需要设置value属性。 2.PostMapping--。。。。。。。。。。。。

12.RequestMapping的params属性:1.以数组存在。 1.params={'P'} ----请求地址必须含有P参数。2.params={'!P'}---请求地址不能含有P参数。3.params={"P=VALUE"}---请求地址必须有P参数,且值为value。
添加属性:添加请求的param属性,(username='admin',password=123456)添加属性,请求访问时的属性
<a th:href="@{/test/testparam(username='admin',password=123456)}">测试param属性</a>

13.ReuqestMapping的headers属性:请求头信息匹配映射。

14.springmvc支持ant风格:1.?表示任意的单个字符。--在RequestMapping(value="/a?a/testant")--在超链接中:/a?a/testant,?处必须写上一个字符。2.*表示任意的0个或者多个字符。3.**表示任意的一层或多层目录,--单独写在/里,eg:/**/test

15.*****springmvc的占位符:1.在方法的@RequestMapping(value = "/testpath/{id}/{name}")加上占位符{名字为id的占位符}/{名字为name的占位符}。
2.在方法形参上添加@PathVairable的注解:@PathVariable(value = "id") Integer id,value值为占位符中的名字,该参数为Int类型。
3.在超链接中在请求路径后面用/值--给占位符赋值。

*****************-----------------------------16,17通过控制器形参获取请求参数-----------------请求参数名必须跟方法形参名一致。
16.mvc的参数获取:不同名时。1.在超链接中用括号写上请求参数(name=“”等)
2.在映射方法中,写上请求参数里面对应类型的name属性,此形参的name属性,springmvc在处理中会自动把超链接的请求参数的值赋值给方法形参。
3.输出形参即可获取值。

17.mvc获取同名参数,表单的checkbox:1.在方法中以字符串的类型写上对应的name值,输出结果是以逗号隔开的所有checkbox选择值。 2.以字符串数组形式的形参,输出是以数组的遍历输出,Arrays.tostring()输出。


18.通过方法上的注解@RequestParam注解获取参数:当请求参数不能与形参匹配。1.在形参前添加@RequestParam(value=“请求参数名"),后面跟上一个对应类型的形参,即是把注解里的请求参数赋值给形参。 通过形参输出。
@RequestParam的属性,requierd(boolean)表示是否需要传入value对应参数的值, true必须传入,false不必须传入==null。 默认为true。
defaultValue属性,不管requierd是true还是false,当value传入的属性值为空时,使用该属性值赋值。

19.通过实体类对象获取参数值:1.将表单所对应的name值当作属性对应一个javaBean实体类,生成对应的属性name。生成有参和无参的构造,生成对应的get和set方法,重写tostring。
2.在注解方法中传入该javabean的对象,输出该对象即可。

20.post方法请求获取参数乱码:在springmvc笔记里看。

21.request域对象共享数据(跳转之后value会在页面上):
1.****通过ModelAndView共享数据,首先在控制类中创建一个类型是ModelAndView的方法,在方法中newModelAndView的对象mav,处理模型数据,
通过mav.addobject方法,在方法中传入key和value。,然后再设置视图名称,mav.setViewName("带返回的视图名")。 最后return该对象。
2.通过model共享数据,String 方法中传入 Model model的形参,model.addatrribute(key,value)传入值,return "视图"。
3.通过Map集合共享数据,String方法中传入 Map map的形参,map.put(key,value)传入值,return“视图名”
4. 3.通过ModelMap集合共享数据,String方法中传入MdelMap modelmap的形参,modelmap.addattribute(key,value)传入值,return“视图名”

22Session域共享数据: 通过传入HttpSession session形参,利用session.attribute()设置值,然后在页面中利用thymeleaf取出域值(<p th:text="${session.key值}">)-----整个会话到关闭浏览器session的值都会被找到。

23.application共享数据:通过传入HttpSession session形参,创建application对象 ServletContext类型。eg:ServletContext application =session.getServletContext() , 调用setattribute设置值。
然后在页面中利用thymeleaf取出域值(<p th:text="$'{applicaation.key值}">)

24.springmvc视图: 1.转发视图(ForwardView)-----如果利用thymeleaf视图解析器,那么在方法中return的视图名就是转发。如果不是thymeleaf解析器,则在方法中return “forward:请求路径”----创建转发视图-----Internal resource view
2.重定向视图----mvc默认重定向视图时RedirectView。 方法中--return “Redirect:请求路径”

25.mvc视图控制器: 当当请求映射的过程中,没有其他请求映射,即没有转发或者重定向(没有请求前缀),就可以用mvc视图控制器代替该请求映射的方法:
在spring配置文件中,<mvc:view-controller path="请求地址" view name="跳转页面"></.......>----------<bean标签外>****配置该文件之后,所有请求映射注解失效,连接404
需要配置:<mvc:annotation-driven/>开启注解驱动
总结:1.<mvc:view-controller path=“请求地址” view name="跳转页面"></..> 代替某个独立的请求映射控制器方法,所有注解失效。2.<mvc:annotaion-driven/>开启注解驱动

26.InternalResourceViewResolver视图解析器,用于jsp页面。在springmvc配置文件中,配置视图解析器为InternaleresourceViewResolver
<!-- 配置internalsourceview-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/templates/"></property>
<property name="suffix" value=".jsp"></property>
</bean>

超链接中访问其他页面时,"${pageContext.request.contextPath}/请求路径"----{}里得到上下文路径


27.restful实现增删改查。 1.查找--GET请求,在@RequestMapping里面添加method属性为get。 2.根据某个值查找--Get请求,依旧时添加method属性,然后使用占位符{""},在请求路径中根据该占位符查找。
3.添加----POST请求,表单--method=post, 在@RequestMapping里面设置method属性为POST, 设置形参得到表单参数值。
4**.修改----PUT请求。 1.在@RequestMapping里面设置method属性为put。 2.在表单method设置为post ,表单里<input type="hidden" name="_method" value="PUT">根据源码写的put方法,hidden表示隐藏该<input>.


28.@RequestBody--请求体,返回请求体的内容。 1.在控制方法形参位置添加该注解,并设置一个形参String RequestBody来接收请求体内容,然后在输出该形参,在控制台可以看见请求体内容。
eg:表单的 文本内容使用@RequestBody注解且输出之后,会将文本内容输出在控制台。 *********<form >表单必须是post才可以输出

29.RequestEntity表示整个请求报文的信息。1.在控制器方法中添加该RequestEntity类型的形参,并设置泛型, 通过该形参调用getHeaders()--返回请求头, getBody()--返回请求体。
***getbody()方法是得到请求体,与@RequestBody注解获取到的内容一样。

30.@ResponseBody注解--响应体。用于替代response对象响应浏览器数据。 1.在控制器方法上添加@ResponseBody注解,@RequestMapping,然后return的值就是响应浏览器的数据,而不是视图。
<a th:href="@{/testResponseBody}">测试@ResponseBody</a> 通过超链接被请求方法获取之后,会以请求路径(reqeustmapping的value值)新创建一个页面响应数据。

31.@RestController注解。作用于控制器类,作用:该类所有方法都有@ResponseBody的注解。

32.文件下载。 1.创建控制器方法。 public ResponseEntity<byte[]> testresponseEntity(HttpSession httpSession){}
2.获取文件在服务器的路径。 String Realpath=httpSession.getServletContext().getRealPath("/static/libs/1.jpg");-------------------------括号里为文件在服务器哪个目录下
3.将文件路径传给输出流 FileInputStream is=new FileInputStream(Realpath)
4.创建数组available方法是获取is流对象的所有字节 byte [] bytes=new byte[is.available()]; is.read(bytes);--将内容读取到数组中
5.创建httpheaders对象响应头信息 MultiValueMap<String ,String > headers=new HttpHeaders();
6.设置下载方式以及下载文件名, 除了文件名,其他都是固定的 headers.add("Content-Disposition","attachment;filename=1.jpg");
7.设置响应码状态,OK表示200成功。 HttpStatus statucode=HttpStatus.OK;
8.创建ResponseEntity对象 ResponseEntity<byte[]> responseEntity=new ResponseEntity<>(bytes,headers,statucode);
is.close();
return responseEntity;
**总结:文件下载需要将文件复制到数组中,需要输入流读取文件。
(post请求)
33.文件上传。 1. 控制器方法 public String fileUp(MultipartFile photo,HttpSession httpsession) ****photo形参名为上传表单框的name属性值。****
2.获取文件名 String originalFilename = photo.getOriginalFilename();
3.获取文件的后缀名 String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); ----lastIndexOf(".")表示获取文件最后一个.之后的数据
4.利用uuid将设置为文件名,并+后缀名--处理之后文件名就是一串字母加数字。 originalFilename= UUID.randomUUID().toString()+suffix;
5.获取phot在服务器上传的路径 String realpath=httpsession.getServletContext.getRealpath("photo")
6.判断是否存在该路径,没有就创建 File file=new File(realPath); if(!file.exists()){file.mkdirs();}-------------------该路径在target下创建。
7.获取上传文件的绝对路径。File.spearator表示文件分隔符。将前后两个文件拼接起来 String filepath=realPath+File.separator+originalFilename;
8.通过transferto()上传服务器 photo.transferTo(new File(filepath)); return "视图";

**总结. 获取上传的文件名以及后缀名,将文件名用uuid进行重排序解决重名,将重排序的文件名与后缀名拼接起来。然后获取上传在服务器路径,并判断创建。通过transferto将拼接起来的文件名上传到服务器。 target目录下。
1.获取重排序的文件名 。2. 获取上传的服务器目录。 3.将服务器目录与文件名拼接起来得到文件上传的绝对路径 4.通过transferto上传到该绝对路径

34.异常处理。 1.基于配置(mvc.xml)的异常处理。2.基于注解的异常处理

 

@pathvariable注解,--获取请求地址中的参数。(占位符)

@requestparam,获取请求参数。---表单提交的参数或者地址中?(传递的参数),required=false 表示参数可以不出传递,默认为true,必须传递。

@requestbody,获取请求体的内容(前端返回的json数据),大多用于异步或者微服务中调用其他模块的controller的方法前端返回的json字符串,@requestbody String name,  ------ 将前端返回的name,赋值给此name。 一个请求只有一个requestbody。

 

 

springmvc项目的创建。创建一个maven工程,导入对应的包,然后再配置servlet。 再main下创建一个webapp文件存放web配置文件与html等页面。 再项目结构中,web选项添加web.xml文件。 扩展配置web.xml文件。

 

posted @ 2021-12-15 19:52  Martin,Yu  阅读(67)  评论(0)    收藏  举报