SpringMVC基础

1.SpringMVC 的作用

  1. Controller为中心完成对系统流程的控制管理
  2. 从请求中搜索数据
  3. 对传入的参数进行验证
  4. 将结果返回给视图
  5. 针对不同的视图提供不同的解决方案
  6. 针对jsp视图技术提供标签库
  7. 拦截器
  8. 上传文件

2.SpringMVC 的结构

  1. DispatcherServlet: 中央控制器,把请求给转发到具体的控制类
  2. Controller:具体处理请求的控制器(配置文件方式需要配置,注解方式不用配置)
  3. handlerMapping:映射处理器,负责映射中央处理器发给contoller时的映射策略
  4. ModelAndView:服务层返回的数据和视图层的封装类(无论是配置文件还是注解都不需要配置)
  5. ViewResolver&View:视图解析器,解析具体的视图
  6. Interceptors:拦截器,负责拦截我们定义的请求然后做处理工作(无论是配置文件方式还是注解都需要先创建再配置)

3.SpringMVC 的流程结构

Created with Raphaël 2.2.0 开始 dispatcherServlet handelerMapping controller1,controller2... ModelAndView ViewResovler jsp 结束

4.SpringMVC web.xml中的配置

<!--配置springmvc的中央控制器-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--关联springmvc的配置文件-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc-servlet.xml</param-value>
    </init-param>
    <!--web应用程序启动时加载中央控制器-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!--调控后缀.do的访问-->
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

5.SpringMVC 三种handlerMapping

1.BeanNameURLHandlerMapping(默认)

不指定HandlerMapping的时候默认是BeanNameURLHandlerMapping,指定其他HandlerMapping时只有显示指定BeanNameURLHandlerMapping才可以使用该HandlerMapping

	<!--按着controller的name来映射寻找controller,默认存在-->
    <bean name="/hello.do" class="com.fxl.demo.MyController"></bean>

2.SimpleUrlHandlerMapping

	<!--只负责创建Controller bean-->
    <bean id="myController"  class="com.fxl.demo.MyController"></bean>
    <!--用key的简单URL来映射对应的Controller bean-->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/hello.do">myController</prop>
            </props>
        </property>

3.ControllerClassNameHandlerMapping

	<!-- 控制类的类名控制器,访问时类名首字母需要小写 -->
	<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>

6.SpringMVC 三种控制器

1.ParameterizableViewController(参数控制器)

 <!--直接跳转你要访问的jsp文件-->
    <bean name="/hi.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
        <property name="viewName" value="hi"></property>
    </bean>

2.AbstractCommandController(命令控制器)

该方法已经废除,可以指定接收对象类型

3.FormController(表单控制器)

只支持post请求方式
表单控制器有简单的验证功能
如果提交失败返回表单页面,如果提交成功就跳转到成功页面
有收集表单数据的功能
该方法也已经废除

7.SpringMVC 基于注解开发

1.注解开发配置文件设置

	<!--springmvc扫描器-->
    <context:component-scan base-package="com.fxl.demo"></context:component-scan>

开启扫描器,base-package配置扫描的范围

2.@requestMapping

放在方法上面用来指定某个方法的路径,当它放在类上的时候相当于命名空间需要组合方法上的requestmapping来访问。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
//标识当前类是控制层的一个具体的实现
@Controller
@RequestMapping(value = "/aa")
public class PersonController {
    @RequestMapping(value = "/hello.do")
    public String hello(){
        return "hello";
    }
}

上述的Controller可以用 项目路径/aa/hello.do 来进行访问

3.注解方式参数

1.自定义参数的名称

在方法中自己定义参数,如果方法参数的名称和传入参数的name匹配就会自动接收,并会转换成我们所定义的数据类型

 	//当前端传入的参数名同为username时,方法会自动接收
 	@RequestMapping(value = "/addUsername.do")
    public String addUsername(String username){
        System.out.println(username);
        return "success";
    }

前端代码

	<form action="aa/addUsername.do" method="post">
		<%--name的名字和addUsername的参数名一致--%>
        姓名:<input type="text" name="username">
        <input type="submit" value="提交">
    </form>

如果参数列表里定义了自定义的类springmvc会给我们把匹配的参数收集起来并且组装成对象。

 	//参数类型为自定义类型
 	@RequestMapping(value = "/addUsername.do")
    public String addUsername(Person person){
        System.out.println(person);
        return "success";
    }

前端代码

	<form action="aa/addUsername.do" method="post">
        <%--name中定义的名字对应自定义类型中的域--%>
        姓名:<input type="text" name="name"><br/>
        年龄:<input type="text" name="age"><br/>
        <input type="submit" value="提交">
    </form>
2.SpringMVC结果返回给视图

ModelAndView中包含viewsname以及map,map中包含参数和值的键值对,viewsname表示显示的jsp页面,map中存储要输出的参数

	//返回值设置为ModelAndView,使用ModelAndView("returnPage", map);
	@RequestMapping(value = "/getmodel.do")
    public ModelAndView returnModel(){
        Person person = new Person();
        person.setAge(12);
        person.setName("faf");

        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("person",person);
        return new ModelAndView("getmodel",map);
    }
//返回值时候String,参数列表中定义map,这个map是ModelAndView中的model
	@RequestMapping(value = "/getmodel.do")
    public String returnModel(Map<String, Object> map){
        Person person = new Person();
        person.setAge(12);
        person.setName("faf");

        map.put("person",person);
        return "getmodel";
    }
//在参数列表中定义Model,model.addAttribute("person", p);相当于request.setAttribute("person", p)
	@RequestMapping(value = "/getmodel.do")
    public String returnModel(Model model){
        Person person = new Person();
        person.setAge(12);
        person.setName("faf");

        model.addAttribute("person",person);
        return "getmodel";
    }

前端

	<h1>${person.age}</h1>
    <h1>${person.name}</h1>

如果jsp版本在2.5以上,默认是关闭el表达式,需要添加
<%@ page isELIgnored=“false”%>
以开启el。

3.ajax调用springmvc的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值