SpringMVC介绍以及工作原理

    在聊SpringMVC之前,我们先来说一下Servlet。早先的Web应用通过Servlet拦截客户端向服务端发送请求并处理,但是这种模式存在很多的缺点:

    1、每编写一个Servlet都需要编写8行配置文件;

    2、每个Servlet的入口方法只有一个,只能处理一个业务.如果处理多个业务必须编写多个Servlet;

    3、servlet获取参数时,必须一个一个的获取.并且参数类型必须手动转化。

    SpringMVC通过配置文件直接拦截所有带有特定后缀的请求,使开发更加简单方便,因此SpringMVC逐渐登上Web开发的舞台,至今仍被广泛应用。

SpringMVC组件介绍:

    1、前端控制器(DispatcherServlet):它的主要功能是转发请求和响应;

    2、处理器映射器:根据用户提交的url,找到能够对应的Controller进行处理;

    3、处理器适配器:根据特定的规则执行用户的请求;

    4、视图解析器:将用户返回的页面名称,自动拼接为具体页面路径。

SpringMVC调用过程:


步骤:

1.客户端发送请求:localhost:8080/项目名/hello.action,发送给前端控制器;

2.前端控制请求处理器映射器,查询能够处理该请求的Controller;

3.将找到的Controller路径返回给前端控制器;

4.请求处理器适配器找到合适的处理器.处理请求;

5.处理器适配器找到合适的处理器.执行请求代码.(controller-service-dao);

6.将处理后的结果和响应页面封装到ModelAndView对象中,返回给处理器适配器;

7.将ModelAndView对象返回给前端控制器;

8.请求视图解析器帮助解析View对象,到底是哪个页面;

9.视图解析器内部拼接.将页面名称拼接成真实的页面路径,返回给前端控制器;

10.将数据填充到页面中,该过程叫做视图渲染,之后返回给用户进行呈现。

配置实例:

1、在web容器中(web.xml)配置前端控制器:

<!-- springmvc配置 -->
   <servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath*:spring/spring-*.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>/Websocket/*</url-pattern>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

2、配置springmvc

<!-- 注解扫描包 -->
  <context:component-scan base-package="my018">
    <context:include-filter type="annotation"
      expression="org.springframework.stereotype.Controller" />
    <context:exclude-filter type="annotation"
      expression="org.springframework.stereotype.Service" />
  </context:component-scan>
<!-- 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射 -->
  <mvc:annotation-driven>
<!-- 视图模型的解析,在视图模型前后端添加后缀,返回的页面类型属于怎样的 -->
  <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/"></property>
    <property name="suffix" value=".html"></property>
  </bean>

3、编写Controller并加上@Controller注解

@Controller
@RequestMapping("User")
public class UserController {
	@Autowired
	private UserService userService;
	
	//登录
	@RequestMapping("login")
	@ResponseBody
	public RResult login(String uname,String upwd){
		System.out.println(uname+"___"+upwd);
		RResult result;
		try{
			System.out.println(uname+":"+upwd);
			userService.login(uname,upwd);
			result = new RResult("ok");
			System.out.println(result);
			return result;
		}catch(PPException e){
			result = new RResult("ng");
			return result;
		}
	}
这样,当你发送登录请求*/User/login.do时就会直接被SpringMVC拦截并处理。如有用词或者逻辑上的误区,还望指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值