使用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,如下
随后打开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,其他组件均在此处扫描。
到目前位置,配置完成,目录结构如下
随后在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>
完整目录如下
配置完成后,进行编译和运行。我是通过本地的tomcat进行运行的,配置如下
选择本地tomcat
填写一下security
随后点击运行
访问不存在页面会跳转到404.html