SpringMVC工作原理;类型转换器;controller接收请求的方法@PathVariable\@RequestParam 注解字符串解析成类属性自动赋值

先搞清楚Spring和SpringMVC区别:
Spring是IOC和AOP的容器框架,即Spring是管理Bean的;而SpringMVC是基于Spring功能之上添加的Web框架。即SpringMVC依赖于Spring,
复习Spring Spring MVC 最近自己在用spring boot ;但这种基本的还是要理解。

  • 1.Spring MVC流程
  • 2.自定义类型转换器
  • 3.自己的类型转换器:实例:SpringMVC 注解字符串解析成类属性自动赋值,
  • 4.Controller接受请求的方法(6种)常用前三
  • 5.mvc模式 & Spring MVC工作原理

2.自定义类型转换器

  • converter 接口
    tar表示源类型;obj目标类型

  • Formatter数据源必须是String,在Web应用更加合理。

3.字符串自动赋值给类属:

当输入“apple,10.58,200”时,表示在程序中自动创建一个new Goods,并将“apple”值自动赋值给goodsname属性,将“10.58”值自动赋值给goodsprice属性,将“200”值自动赋值给goodsnumber属性。

1.实体类 GoodsModel

package  dto/model;
public class GoodsModel {
	private String goodsname;
	private double goodsprice;
	private int goodsnumber;
	//省略setter和getter方法
}

2.控制器类
使用@RequestParam(“goods”)接收请求参数,
然后调用自定义类型转换器GoodsConverter将字符串值转换为GoodsModel的对象gm
使用@RequestMapping("/converter")或者@RequestMapping("/formatter")

@Controller
@RequestMapping("/my")
public class ConverterController {
	/*
	@RequestMapping("/converter")
	@RequestMapping("/formatter")
*/
	@RequestMapping("/converter")
	public String myConverter(@RequestParam("goods") GoodsModel gm, Model model){
		model.addAttribute("goods",gm);
		return "showGoods";
	}
}

3.package: converter
GoodConverter.java 实现Converter接口并且实现该方法

public class GoodsConverter implements Converter<String, GoodsModel>{

}

4.springmvc-servlet.xml
在配置文件中注册自定义类型转换器

   
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
  		<property name="converters">
  			<list>
  				<bean class="converter.GoodsConverter"/>
  			list>
  		property>
  bean>

5.mvc模式 & Spring MVC工作原理

mvc模式

SpringMVC工作原理;类型转换器;controller接收请求的方法@PathVariable\@RequestParam 注解字符串解析成类属性自动赋值_第1张图片

spring mvc 工作原理

四个星星:MVC四个接口:

  • 所有请求都经过DispatcherServlet统一分发给各Controller;
  • 请求到Controller的映射:借助Spring MVC提供的HandlerMapping定位到具体的Controller;
  • Controller处理用户请求,返回ModelAndView对象给DispatcherServlet(前端控制器),ModelAndView:返回包含模型(Model)和视图(View);
  • ViewResolver:查找View对象,渲染页面。
    SpringMVC工作原理;类型转换器;controller接收请求的方法@PathVariable\@RequestParam 注解字符串解析成类属性自动赋值_第2张图片

流程:
1.客户端发出http请求(localhost:8880)到DispatcherServlet前端控制器

2.DispatcherServlet 通过 handlerMapping找对应的Controller

3.调用Controller

4.Controller通过Service处理用户的请求

5.返回ModelAndView(return回的)处理结果给DispatcherServlet

6.处理视图映射ViewResolver找到View对象要渲染页面

7.通过Model将模型数据传给视图View显示

​8.返回请求

web.xml 部署DispatcherServlet:
其servlet对象springmvc初始化时,将在应用程序的WEB-INF目录下查找一个配置文件
即WEB-INF下创建的springmvc-servlet.xml(springName-servlet.xml


<servlet>
    <servlet-name>springmvcservlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    
    <load-on-startup>1load-on-startup>
servlet> 
<servlet-mapping>
	<servlet-name>springmvcservlet-name>
	
    <url-pattern>/url-pattern>
servlet-mapping>

springmvc-servlet.xml
在基于注解之后不需要bean控制器类


<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
    	   http://www.springframework.org/schema/beans 
    	   http://www.springframework.org/schema/beans/spring-beans.xsd">                 
    
  <bean name="/login" class="controller.LoginController"/>
   
  <bean name="/register" class="controller.RegisterController"/>
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
              id="internalResourceViewResolver">
       
       <property name="prefix" value="/WEB-INF/jsp/" />
       
       <property name="suffix" value=".jsp" />
  bean>
  	
beans>

4.Controller接受请求的方法

springmvc-servlet.xml
@RequestMapping(" [ 请求的地址 ] ", method=“POST/GET”)在方法或者类上(默认post)
或者直接@PostMapping@GetMapping
自动扫描代替用bean来注册:


   <context:component-scan base-package="controller"/>

1.通过@PathVariable接收URL中的请求参数

仅Get提交方式 @GetMapping或加method属性的@RequestMapping

@RequestMapping(value="/register/{uname}/{upass}", method=RequestMethod.GET)
	//必须加method属性的
public String register(@PathVariable String uname,@PathVariable String upass, Model model) {
}
@GetMapping("/profile/{action}")
public String profile(@PathVariable(name = "action")String action,
                      Model model){
    if("productions".equals(action)){}
}

2.通过@RequestParam接收请求参数

升级版”处理方法“
获取时候与前端的name都需要一致:
“通过处理方法的形参接收请求参数”不会报404错误,而“通过@RequestParam接收请求参数”会404错误

3.通过@ModelAttribute接收请求参数

升级版”@RequestParam“
不需要使用model.addAttribute语句,自动数据绑定与模型数据展示
@ModelAttribute(“user”) UserForm user
将请求参数的输入封装到user对象中 并且 创建UserForm实例,以“user”为键值存储在Model对象中,与“model.addAttribute(“user”, user)”语句功能一样.

@ModelAttribute UserForm user (没有制定键值)
默认model.addAttribute(“userForm”, user)

4.通过HttpServletRequest接收请求参数

@RequestMapping("/register")
public String register(HttpServletRequest request, Model model) {
	String uname = request.getParameter("uname");
	String upass = request.getParameter("upass");

5.通过处理方法的形参接收请求参数

6.通过实体bean接收请求参数

return:默认转发

/转发到一个视图
return " str ";
/重定向到一个请求方法
return "redirect:/str";
/(同一个控制器类里,可省略/str1/return "forward:/str1/str2";

你可能感兴趣的:(javaweb)