Spring MVC 入门demo

Spring MVC  入门demo

 

(1)新建Spring项目

 

 


 

 

(2)添加所需要的jar包

spring的5+2:

  • spring-core.jar
  • spring.beans.jar
  • spring-context.jar
  • spring-expression.jar
  • spring-aop.jar  

 

  • spring-web.jar
  • spring-webmvc.jar

(这2个jar包是spring mvc的)

 

 

web应用的2个:

  • servlet.jar
  • jsp.jar

这2个包的名字五花八门,总之就是servlet一个、jsp一个。

可以到tomcat的lib下复制,也可以下载Java EE的压缩包。

 

 

可以在Project  Structure中添加包,这种方式在部署时容易出现lib复制不全的问题,

解决方式参考:https://www.cnblogs.com/chy18883701161/p/12240317.html

 

也可以在WEB-INF下新建文件夹lib,把jar包复制到此文件夹,然后对lib点击右键->Add as Library。

web应用的lib要建在WEB-INF下,只有建在WEB-INF下,部署时才会复制。

 

 


 

 

(3)新建包com.chy,model,包下新建实体类User

package com.chy.model;

public class User {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

 

 


 

 

(4)新建包com.chy.controller,包下新建类UserController,只需实现Controller接口

package com.chy.controller;

import com.chy.model.User;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class UserController implements Controller {
    @Override
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        //视图可以在构造器中指定,也可以先使用空参构造器,在调用setter方法设置
        ModelAndView mav = new ModelAndView("/WEB-INF/jsp/user_info.jsp");

        User user = new User();
        user.setUsername("chy");
        user.setPassword("abcd");

        //向视图传递数据
        mav.addObject("user", user);
        
        return mav;
    }
}

 

注意实现的是  org.springframework.web.servlet.mvc.Controller ,不要导错了。

 

 


 

 

(5)WEB-INF下新建文件夹jsp,jsp文件夹下新建文件user_info.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
用户名:${user.username} <br />
密码:${user.password}
</body>
</html>

使用controller传过来的数据,实质是通过model的getter方法获取属性值。

 

 


 

 

(6)在src下新建springmvc的配置文件springmvc-config.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 配置处理器映射-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

    <!-- 配置处理器的适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />

    <!--配置要使用的控制器,name的值需要加/ -->
    <bean name="/userController" class="com.chy.controller.UserController" />

</beans>

 

 


 

 

(7)在web.xml中用DispatcherServlet拦截所有HTTP请求

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--配置DispatcherServlet-->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--指定配置文件的位置-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-config.xml</param-value>
        </init-param>
        <!-- 1表示web容器(比如tomcat)启动时就初始化此servlet -->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!--拦截所有HTTP请求-->
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
</web-app>

 

如果未指定springmvc配置文件的路径,默认会去WEB-INF下找名为DispatcherServlet-servlet.xml的文件,

所以也可以在WEB-INF下新建DispatcherServlet-servlet.xml,在里面写springmvc的配置。

 

如果未指定Servlet的加载时机,会在需要时才加载(初始化)此Servlet。

 

 


 

 

测试

部署项目,访问controller:

http://localhost:8080/springmvc_war_exploded/userController

 

显示:

用户名:chy
密码:abcd

 

 


 

 

视图名的拼接

上面的demo中,我们在controller中写的是完整的视图名:

ModelAndView mav = new ModelAndView("/WEB-INF/jsp/user_info.jsp");

 

每次设置视图名时都写一长串,很麻烦,可以拼接视图名:

ModelAndView mav = new ModelAndView("user_info");
    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!--后缀-->
        <property name="suffix" value=".jsp" />
    </bean>