SpringMVC入门 - Hello,World

SpringMVC入门

SpringMVC核心组件

  • DispatcherServlet前置控制器

基于XML配置的使用

大致步骤

  1. spring mvc 基础配置
  2. xml配置Controller,HandlerMapping组件映射
  3. xml配置ViewResolver组件映射

  4. 在xml中注册前置控制器,并标注springmvc的主配置文件路径(之后写)
  5. 编写一个Handler
  6. 编写springmvc主配置文件,并在里面注册Handler,再将一些路径的访问和Handler绑定

  • 首先在web.xml配置前置控制器(以Servlet形式),并同时将根路径方法映射到该控制器,也就是所有访问都要先直接通过前置控制器
<web-app>
  <display-name>Archetype Created Web Application</display-name>
  
  <!-- 配置前置控制器 -->
  <servlet>
    <servlet-name>springMVCTest</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 这里定义其配置文件路径属性,在其初始化时就设定 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <!-- 稍后在resources目录中创建springMVCCofing.xml作为配置文件 -->
      <param-value>classpath:springMVCCofing.xml</param-value>
    </init-param>
  </servlet>

<!-- 将所有访问映射到前置控制器 -->
  <servlet-mapping>
    <servlet-name>springMVCTest</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>
  • 定义Handler
//实现Controller接口
public class HandlerTest implements Controller {
    //实现其handleRequest方法,要求返回一个ModelAndView对象
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {

        //直接创建MAV对象
        ModelAndView mav=new ModelAndView();
        //装载模型数据,SpringMVC会自动将其挂载到request域中
        mav.addObject("message","hello,world");
        //设定逻辑视图
        mav.setViewName("test");
        return mav;
    }
}
  • 然后再到springMVCCofing.xml,定义Handler的Bean对象,再定义HandlerMapping对象用于设定一个路径和Handler对象产生映射关系,再定义一个视图解析器用于将Handler的ModelAndView中产生的逻辑视图解析传给对应JSP页面
<?xml version="1.0" encoding="UTF-8"?>
<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 id="getHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <!--将对"/test"的访问转发给id等于getHandler的Bean-->
                <prop key="/test">getHandler</prop>
            </props>
        </property>
    </bean>
    <!-- 注册Handler的bean -->
    <bean id="getHandler" class="com.test.springmvctest.HandlerTest"></bean>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 这里的两个属性分别为前缀后缀,给逻辑视图包裹成/<逻辑视图名称>.jsp -->
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

</beans>
  • 最后在JSP中访问request域中的值
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- 开启EL语言 -->
<%@ page isELIgnored="false"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
  <!--访问request域中的key等于message的值-->
  ${message}
</body>
</html>

基于注解的使用

与基于XML使用的不同在于,根据不需要在springmvc配置文件注册Handler和HandlerMapping了,Handler也不需要实现Controller接口了

只有springMVCCofing.xml和HandlerTest.java不同

springMVCCofing.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
    <!-- 开启注解扫描 -->
    <context:component-scan base-package="com.test.springmvctest"/>
    
    <!-- 逻辑视图解析器还是要的 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

</beans>

HandlerTest.java

// 标记为Handler
@Controller
public class HandlerTest{
    //绑定特定访问路径 
    @RequestMapping("/test")
    public ModelAndView getMAV(){
        ModelAndView mav=new ModelAndView();
        mav.addObject("message","hello,world");
        mav.setViewName("test");
        return mav;
    }
}

同时基于注解还有两种方式可以实现MAV功能

//绑定特定访问路径
@RequestMapping("/methodA")
// 这里的model直接以Model形式接受和挂载数据
public String MethodA(Model model){
  // 往Model对象中挂载模型数据
  model.addAttribute("message","hello,world");
  //返回以String形式逻辑视图
  return "test";
}
//绑定特定访问路径
@RequestMapping("/methodB")
// 这里的model以Map形式接受和挂载数据
public String MethodB(Map<String,String> mapAsModel{
  // 往Model对象中挂载模型数据
  
  mapAsModel.put("message","hello,world");
  //返回以String形式逻辑视图
  
  return "test";
}

猜你喜欢

转载自www.cnblogs.com/ruguod/p/11709174.html