spring mvc学习(一)

本文详细介绍如何使用IntelliJ IDEA和Maven搭建Spring MVC项目的基本框架,包括配置pom.xml引入依赖、编辑web.xml、配置DispatcherServlet及视图解析器等步骤。

使用idea创建完框架后,写个最基础的demo。首先需要引入必要的jar包,因为创建的是maven程序,jar包是通过maven管理的,所以需要编辑pom.xml文件,添加spring相关包。

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-beans</artifactId>
  <version>4.1.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>4.1.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context-support</artifactId>
  <version>4.1.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>4.1.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-tx</artifactId>
  <version>4.1.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>4.1.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>4.1.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aop</artifactId>
  <version>4.1.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-expression</artifactId>
  <version>4.1.6.RELEASE</version>
</dependency>

编辑完成后,maven会自动加入所需要的spring包。

随后,在main/java中建立几个package,如下

144349_w83o_220274.png

随后打开webapp/WEB-INF下的web.xml,编辑此文件。

首先将web-app标签修改成

<web-app version="3.0"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

如果不加后面的标签,会报错的。虽然xml最上面加了注解。搞不清楚

使用spring mvc第一步就是配置DispatcherServlet。DispatcherServlet是前置控制器,主要是拦截匹配的请求,根据规则将响应的请求转发到controller。

<servlet>
  <servlet-name>mySpring</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:mvc-servlet.xml</param-value>
  </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>mySpring</servlet-name>
  <url-pattern>*.htm</url-pattern>
</servlet-mapping>

servlet-name:servlet名称,可随意添加一个名称。但<servlet>和<servlet-mapping>中的<servlet-name>名称必须相同

<init-param>可以不添加,如果不添加,默认的xml配置文件名称就是[servlet-name]-servlet.xml。此处我们设置为mvc-servlet.xml。

servlet-mapping中的url-pattern指定拦截何种URL。此处设置为拦截.htm后缀的请求。

servlet配置完成后,还需要配置spring的全局配置(默认名称为applicationContext.xml),这样容器启动后,会自动加载所有*-context.xml的配置文件

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:*-context.xml</param-value>
</context-param>

还可以设置一些其他选项,例如

<welcome-file-list>
  <welcome-file>index.htm</welcome-file>
</welcome-file-list>
<error-page>
  <error-code>404</error-code>
  <location>/error/404.html</location>
</error-page>

welcome-file-list设置默认首页

error--page设置相应http码跳转的页面。例如上面设置就是出现404时,跳转到的页面,所以在webapp下创建error文件夹,在其中创建一个404.html文件

404.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>404 NOT FOUND</title>
</head>
<body>
    404 NOT FOUND
</body>
</html>

完整的web.xml文件如下

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app version="3.0"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name>security</display-name>

  
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:*-context.xml</param-value>
  </context-param>

  <servlet>
    <servlet-name>mySpring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:mvc-servlet.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>mySpring</servlet-name>
    <url-pattern>*.htm</url-pattern>
  </servlet-mapping>
  

  <welcome-file-list>
    <welcome-file>index.htm</welcome-file>
  </welcome-file-list>
  <error-page>
    <error-code>404</error-code>
    <location>/error/404.html</location>
  </error-page>

</web-app>

配置完web.xml文件后,需要配置web.xml中涉及到的其他xml文件。首先配置servlet的配置文件mvc-servlet.xml文件,mvc-servlet.xml主要是spring mvc相关的配置

<?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"
       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/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 开启自动扫描 只扫描Controller组件,其他组件由applicationContext扫描 -->
    <context:component-scan base-package="com.jiyufei.security.controller">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:include-filter>
    </context:component-scan>

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

</beans>

<context-component-scan>标签:加入该标签,spring会自动扫描相应package下的java文件,如果扫描到有@Component、@Controller、@Service、@Repository等注解的类时,则将这些类注册为bean。其中可以设置include-filter和exclude-filter,用作包含或者排除相关包。此处主要是spring mvc相关的配置,所以只自动扫描Controller组件,其他组件放在spring配置中扫描。

<context:annotation-config>标签:该标签在xml文件中并没有添加,因为使用了<context-component-scan>,会自动将该标签引入。引入该标签后,可以使用@AutoWired、@Required、@PostConstruct、@PreDestroy等。

InternalResourceViewResolver是spring mvc自带的一个视图解析器,视图解析器主要是渲染视图,好处是可以将控制器中的请求处理和视图中的渲染实现实现解耦。此处配置视图在views目录下,后缀为.jsp文件,所以在webapp下创建views文件夹,用于存放后缀为.jsp的视图文件。

配置完mvc-servlet.xml后,新建一个application-context.xml文件,因为我在web.xml中配置所有后面为-context.xml的文件都是spring的全局配置文件,所以application-context.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.jiyufei.security">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter>
    </context:component-scan>

</beans>

此处目前只配置了context:component-scan,因为在mvc-servlet.xml中只扫描了Controller,其他组件均在此处扫描。

到目前位置,配置完成,目录结构如下

163445_Cawt_220274.png

随后在Controller中创建一个类,名称为IndexPageController,将该类注解为@Controller,添加一个方法indexPage,实现index.htm请求响应。在添加一个goodPage,响应good.htm请求。

package com.jiyufei.security.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class IndexPageController {

    @RequestMapping("/index.htm")
    public ModelAndView indexPage(){
        ModelAndView modelAndView = new ModelAndView("index");
        return modelAndView;
    }
    
    @RequestMapping("/good.htm")
    public ModelAndView goodPage(){
        ModelAndView modelAndView = new ModelAndView("good");
        return modelAndView;
    }
    
}

写完Controller,就需要实现视图。IndexPageController中共有两个视图文件,分别为index.jsp和good.jsp。

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>index 首页</title>
</head>
<body>
    <h1>此处为首页<br/></h1>
    <a href="good.htm" target="_blank">good.htm</a>
</body>
</html>

good.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>good page</title>
</head>
<body>
    <h1>此处为good.htm<br/></h1>
    <a href="index.htm" target="_blank">首页</a>
</body>
</html>

完整目录如下

165235_VgMK_220274.png

配置完成后,进行编译和运行。我是通过本地的tomcat进行运行的,配置如下

165350_Hc3G_220274.png

选择本地tomcat

165413_Ykx7_220274.png

165523_qEh7_220274.png

165542_9gZM_220274.png

填写一下security

165608_Kkdo_220274.png

随后点击运行

171052_xlR2_220274.png

171128_5u2w_220274.png

访问不存在页面会跳转到404.html

171210_U8MS_220274.png

转载于:https://my.oschina.net/jiyufei/blog/1585224

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值