springmvc的工作原理是什么

springmvc的工作原理是:1、浏览器发送请求给DispatcherServlet;2、根据请求找到对应的Controller;3、返回ModelAndView;4、找到对应的视图对象View并渲染;5、返回到浏览器。

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>

相关文章

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
今天犯了个错:“接口变动,伤筋动骨,除非你确定只有你一个...
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:...
本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程...