网站推广.NET

网站推广.NET

springmvc的工作原理是什么

来源:互联网

SpringMVC工作原理:

(推荐学习:java入门程序)

1、浏览器发送指定的请求都会交给DispatcherServlet,他会委托其他模块进行真正的业务和数据处理;

2、DispatcherServlet会查找到HandleMapping,根据浏览器的请求找到对应的Controller,并将请求交给目标Controller;

3、目标Controller处理完业务后,返回一个ModelAndView给DispatcherServlet;

4、DispatcherServlet通过ViewResolver视图解析器找到对应的视图对象View;

4、视图对象View负责渲染,并返回到浏览器。

(视频教程推荐:java视频教程)

下面我们来看一下代码实例:

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLschema-instance"    xmlns="http://java.sun.com/xml/ns/javaee"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"    version="2.5">    <display-name>springmvc</display-name>    <welcome-file-list>        <welcome-file>index.html</welcome-file>        <welcome-file>index.htm</welcome-file>        <welcome-file>index.jsp</welcome-file>        <welcome-file>default.html</welcome-file>        <welcome-file>default.htm</welcome-file>        <welcome-file>default.jsp</welcome-file>    </welcome-file-list>    <!-- spring入口 -->    <servlet>        <servlet-name>springmvc</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <!-- 项目启动时,就加载并实例化 -->        <load-on-startup>1</load-on-startup>    </servlet>    <!-- 拦截所有不包括jsp的请求 -->    <servlet-mapping>        <servlet-name>springmvc</servlet-name>        <url-pattern>*.do</url-pattern>    </servlet-mapping></web-app>

springmvc-servlet.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:aop="http://www.springframework.org/schema/aop"    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"    xmlns:mvc="http://www.springframework.org/schema/mvc"    xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/aop        http://www.springframework.org/schema/aop/spring-aop.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/tx        http://www.springframework.org/schema/tx/spring-tx.xsd        http://www.springframework.org/schema/mvc        http://www.springframework.org/schema/mvc/spring-mvc.xsd">        <!-- springmvc注解驱动 -->        <mvc:annotation-driven></mvc:annotation-driven>        <!-- 开启注解扫描 -->        <context:component-scan base-package="cn.itcast.controller"></context:component-scan>        <!-- 配置试图解析器            prefix:指定试图所在目录            suffix:指定视图的后缀名            例如:prifex="/WEB-INF/jsp/",suffix=".jsp",当viewname="test"时,跳转到/WEB-INF/jsp/test.jsp页面         -->        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">            <property name="prefix" value="/WEB-INF/jsp/"></property>            <property name="suffix" value=".jsp"></property>        </bean></beans>

UserControll类

@Controller@RequestMapping("user")public class UserController {    @RequestMapping("findAllUsers")    public ModelAndView findAllUsers() {        ModelAndView mv = new ModelAndView();        ArrayList<User> users = new ArrayList<User>();        for (int i = 0; i < 5; i++) {            User user = new User();            user.setUsername("zs" + i);            user.setAge(20 + i);            user.setIncome(16000.0+i*100);            user.setIsMarry(false);            user.setHobby(new String[] { "篮球"+i, "足球"+i });            users.add(user);        }        mv.addObject("users", users);        mv.setViewName("users");        return mv;    }}

实体类

public class User implements Serializable {    /**     *      */    private static final long serialVersionUID = 1L;    private String username;    private Integer age;    private Boolean isMarry;    private Double income;    private String[] hobby;    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    public Boolean getIsMarry() {        return isMarry;    }    public void setIsMarry(Boolean isMarry) {        this.isMarry = isMarry;    }    public Double getIncome() {        return income;    }    public void setIncome(Double income) {        this.income = income;    }    public String[] getHobby() {        return hobby;    }    public void setHobby(String[] hobby) {        this.hobby = hobby;    }    @Override    public String toString() {        return "User [username=" + username + ", age=" + age + ", isMarry=" + isMarry + ", income=" + income                + ", hobby=" + Arrays.toString(hobby) + "]";    }}

jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>insert title here</title><link rel="stylesheet" type="text/css" href="/css/user.css" /></head><body>    <table id="customers">        <tr>            <th>用户名</th>            <th>年龄</th>            <th>收入</th>            <th>婚姻状态</th>            <th>兴趣爱好</th>        </tr>        <!-- 遍历后台传递的集合数据 -->        <c:forEach items="${users}" var="user">            <tr>                <td>${user.username}</td>                <td>${user.age}</td>                <td>${user.income}</td>                <!-- 判婚姻状态 -->                <td><c:choose>                        <c:when test="${user.isMarry}">已婚</c:when>                        <c:otherwise>未婚</c:otherwise>                    </c:choose>                </td>                <td>                <!-- 再次遍历用户爱好 -->                <c:forEach items="${user.hobby}" var="hobby" varStatus="status">                    ${hobby}                     <!-- 如果不是最后一个爱好,则加上逗号,否则就不加 -->                    <c:if test="${!status.last}">,</c:if>                </c:forEach>                </td>            </tr>        </c:forEach>    </table></body></html>
springmvc的基本原理