SpringMVC

使用Spring MVC

使用SpringMVC,在web.xml中,配置DispatcherServlet,再配置一个spring-servlet.xml
web.xml

<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Spring Web MVC Hello World Application</display-name>

    <servlet>
        <servlet-name>spring</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

spring-servlet这个名字是因为上面web.xml中标签配的值为spring(spring),再加上“-servlet”后缀而形成的spring-servlet.xml文件名,如果改为springMVC,对应的文件名则为springMVC-servlet.xml。

spring-servlet.xml

<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-3.0.xsd


http://www.springframework.org/schema/context


http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="com.howtodoinjava.demo" />

    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

Employee.java

public class Employee implements{
    private Integer id;
    private String firstName;
    private String lastName;

    //Setters and Getters

    @Override
    public String toString() {
        return "Employee [id=" + id + ", firstName=" + firstName
                + ", lastName=" + lastName + "]";
    }
}

EmployeeDao.java

import java.util.List;

import com.howtodoinjava.demo.model.EmployeeVO;

public interface EmployeeDao{
    public List<Employee> getAllEmployees();
}

EmployeeDaoImpl.java

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Repository;

import com.howtodoinjava.demo.model.EmployeeVO;

@Repository
public class EmployeeDaoImpl implements EmployeeDao {

    public List<Employee> getAllEmployees()
    {
        List<Employee> employees = new ArrayList<Employee>();

        Employee e1 = new Employee();
        e1.setId(1);
        e1.setFirstName("Lokesh");
        e1.setLastName("Gupta");
        employees.add(e1);

        Employee e2 = new Employee();
        e2.setId(2);
        e2.setFirstName("Raj");
        e2.setLastName("Kishore");
        employees.add(e2);

        return employees;
    }
}

EmployeeService.java

public interface EmployeeService{
    public List<Employee> getAllEmployees();
}

EmployeeServiceImpl.java

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class EmployeeServiceImpl implements EmployeeService{

    @Autowired
    EmployeeDao dao;

    public List<Employee> getAllEmployees(){
        return dao.getAllEmployees();
    }
}

employeesListDisplay.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

<html>
<head>
    <title>Spring MVC Hello World</title>
</head>

<body>
    <h2>All Employees in System</h2>

    <table border="1">
        <tr>
            <th>Employee Id</th>
            <th>First Name</th>
            <th>Last Name</th>
        </tr>
        <c:forEach items="${employees}" var="employee">
            <tr>
                <td>${employee.id}</td>
                <td>${employee.firstName}</td>
                <td>${employee.lastName}</td>
            </tr>
        </c:forEach>
    </table>

</body>
</html>

Spring MVC架构

这里写图片描述


DispatcherServlet类继承了HttpServlet,在Servlet的init方法调用时DispatcherServlet执行Spring MVC的初始化工作。


Spring容器的创建是在FrameworkServlet的initServletBean()方法中完成的, 这个方法会创建WebApplicationContext对象,并调用其refresh()方法来完成配置文件的加载,配置文件的加载同样是先查找Servlet的init-param参数中设置的路径, 如果没有,会根据namespace+Servlet的名称来查找XML文件。Spring容器在加载时会调用DispatcherServlet的initStrategies方法来完成在DispatcherServlet中定义的初始化工作。在initStrategies方法中会初始化SpringMVC框架需要的8个组件,这8个组件对应的8个Bean对象都保存在DispatcherServlet类中。

Control

HandlerMapping和HandlerAdapters
HandlerMapping负责映射用户的URL和对应的处理类,HandlerMapping接口中只定义了根据一个URL必须返回一个HandlerExecutionChain,可以在这个chain中,添加任意的HandlerAdapters实例来处理这个URL对应的请求。


整个Spring MVC的调用是从DispatcherServlet的doService方法开始的,接着就是调用doDispatch方法,这个方法是主要的处理用户请求的地方。


Control的处理逻辑关键就是在DispatcherServlet的handlerMapping集合中根据请求的URL匹配每个HandlerMapping对象中的某个Handler,匹配成功后将会返回这个Handler的HandlerExecutionChain对象,而在这个对象中会包含用户自定义的多个HandlerInterceptor对象。接下来执行Handler对象的相应方法,如该方法返回一个ModelAndView对象,接下来就去执行View渲染。

Model

对Spring MVC来说,Model是连接Handler和View的桥梁,ModelAndView会持有一个ModelMap对象和一个View对象或者View的名称。ModelMap就是执行模板渲染是所需要的变量对应的实例,如JSP通过request.getAttribute(String)获取的JSTL的标签名对应的对象。


ModelMap传递到View对应的ViewResolvers中,不同的ViewResolvers会对这个Map中的对象有不同的处理方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值