A:表示servlet B:表示springMVC
控制层区别
声明控制器
A:在使用控制器时要继承HttpServlet类,才能有和网页交互的功能,并且Servlet中有两个方法doGet和doPot。
B:只需要用注解@Contoller代表这个类是个控制器,就拥有了所有控制器的功能
访问控制器
A:需要在类上写注解@WebServlet("路径名"),并且在类中的doGet和doPos方法要用大量的if语句表示访问的子路径是什么
B:在springMVC中已经把路径和方法一一对应了
控制器如何从网页中获取值
A:通过req参数从中获取值,如果一个表单值太多的话要一个个的传值
B:只需在方法参数中写上你要什么参数,都会给你传回来,甚至在传回来的过程中,用一个对象接多个参数,直接拿个对象,都帮你封装好了。
@PostMapping("/person")
public String createPerson(Person person, @RequestParam("personPic") MultipartFile file) throws Exception{
// log.info("create person now! person:"+person);
person.setPhoto(file.getBytes());
PersonService personService = new PersonServiceImpl();
personService.registerPerson(person);
log.info("create person ok! person:"+person);
return "redirect:/person";
}
顺带一提@RequestParam和@PathVariable的区别
@RequestParam取的是URL路径中“ / ”之后的值
可以省略不写
当你写的参数是个属性时,会帮你自动找到相对应的属性。
当你写的参数是个对象时,会自动帮你把对象中的属性和网页中的属性有重名时,一一放入对象当中封装起来
如果你写的参数和网页中的不一致时,就要在@RequestParam( )里说明你要取的哪个参数
@PathVariable取的是URL路径中“ ?”之后的值
同样,也可以通过()中获取想要的值,如果名字一样上面一样省略不写,但是至少要写一个@PathVariable在前面
往请求域中传值,并将数据和模板组装显示到网页上
A:需要往req中存值,然后用模板组装引擎
this.processTemplate("/hotel/update_hotel",request,response);
B:需要在参数上写上Model类型的参数,和req的存值方式一致,然后返回即可
return "/hotel/update_hotel";