• 【转】使用SpringMVC创建Web工程并使用SpringSecurity进行权限控制的详细配置方法


    原文链接:https://www.datalearner.com/blog/1051506305139364

    工程github链接:https://github.com/df19900725/WebTemplate

    使用SpringMVC框架搭建Web项目工程是目前非常流行的web项目创建方式。同时Spring Security也为我们提供了登录验证和权限控制等内容。在这篇博客中,我们将详细描述如何从0开始配置一个基于SpringMVC框架和SpringSecurity权限控制的网站。主要,需要实现搭建好Eclipse开发环境。可参考Eclipse的Web开发环境搭建——从零开始入门介绍。本项目已经上传到GitHub中,请查看https://github.com/df19900725/WebTemplate

    一、创建Web项目

    在这里,我们首先创建一个Dynamic Web Project项目。填好项目名称之后,直接点击Finish即可(不用next,这里我们用后面默认的配置)。然后,右键单击项目名称,依次选择Configure - Convert To Maven Project。将该项目转换成Maven的项目。这样,一个基于Maven的Web项目就建好了。可能有人问为啥不直接使用Maven创建。因为Eclipse的Maven插件提供的Web原型版本太低,而且常年不更新,和新的jdk版本搭配在一起很容易出错。所以我们采用这种方式。



    二、配置pom.xml文件

    使用SpringMVC和SpringSecurity插件需要依赖一些包。我们使用Maven的方式添加,同时,我们还需要一些连接数据库的包。我们一同在下面加进去。把下面的插件添加之后,这个网站系统就支持SpringMVC和SpringSecurity的各项功能了。后面我们将一步一步说明。

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    2. <modelVersion>4.0.0</modelVersion>
    3. <groupId>hfutec</groupId>
    4. <artifactId>WebTemplate</artifactId>
    5. <version>0.0.1-SNAPSHOT</version>
    6. <packaging>war</packaging>
    7. <!-- 从这里开始是我自己添加的,下面这个build是指定网站开发环境的,我们使用jdk1.8,这个以上应该是Maven自动创建的 -->
    8. <build>
    9. <sourceDirectory>src</sourceDirectory>
    10. <plugins>
    11. <plugin>
    12. <artifactId>maven-compiler-plugin</artifactId>
    13. <version>3.6.1</version>
    14. <configuration>
    15. <source>1.8</source>
    16. <target>1.8</target>
    17. </configuration>
    18. </plugin>
    19. <plugin>
    20. <artifactId>maven-war-plugin</artifactId>
    21. <version>3.0.0</version>
    22. <configuration>
    23. <warSourceDirectory>WebContent</warSourceDirectory>
    24. </configuration>
    25. </plugin>
    26. </plugins>
    27. </build>
    28. <dependencies>
    29. <!-- Commons loggin类 -->
    30. <dependency>
    31. <groupId>commons-logging</groupId>
    32. <artifactId>commons-logging</artifactId>
    33. <version>1.1.1</version>
    34. </dependency>
    35. <!-- Apache commons 数据库工具类 -->
    36. <dependency>
    37. <groupId>commons-dbutils</groupId>
    38. <artifactId>commons-dbutils</artifactId>
    39. <version>1.6</version>
    40. </dependency>
    41. <!-- MySQL 驱动类 -->
    42. <dependency>
    43. <groupId>mysql</groupId>
    44. <artifactId>mysql-connector-java</artifactId>
    45. <version>5.1.34</version>
    46. </dependency>
    47. <!-- Alibaba 数据库连接池类 -->
    48. <dependency>
    49. <groupId>com.alibaba</groupId>
    50. <artifactId>druid</artifactId>
    51. <version>1.0.12</version>
    52. </dependency>
    53. <!-- JSTL 标签支持 -->
    54. <dependency>
    55. <groupId>jstl</groupId>
    56. <artifactId>jstl</artifactId>
    57. <version>1.2</version>
    58. </dependency>
    59. <!-- Spring Security 标签支持 -->
    60. <dependency>
    61. <groupId>org.springframework.security</groupId>
    62. <artifactId>spring-security-taglibs</artifactId>
    63. <version>4.0.2.RELEASE</version>
    64. </dependency>
    65. <!-- ******************************** Spring Security(页面权限控制) *********************************** -->
    66. <dependency>
    67. <groupId>org.springframework.security</groupId>
    68. <artifactId>spring-security-web</artifactId>
    69. <version>4.0.2.RELEASE</version>
    70. </dependency>
    71. <dependency>
    72. <groupId>org.springframework.security</groupId>
    73. <artifactId>spring-security-config</artifactId>
    74. <version>4.0.2.RELEASE</version>
    75. </dependency>
    76. <!-- Spring Security 框架核心类 -->
    77. <dependency>
    78. <groupId>org.springframework.security</groupId>
    79. <artifactId>spring-security-core</artifactId>
    80. <version>4.0.2.RELEASE</version>
    81. </dependency>
    82. <!-- Spring MVC 框架类 -->
    83. <dependency>
    84. <groupId>org.springframework</groupId>
    85. <artifactId>spring-webmvc</artifactId>
    86. <version>4.1.4.RELEASE</version>
    87. </dependency>
    88. <!-- ******************************** Fast XML解析 *********************************** -->
    89. <!-- fasterxml -->
    90. <dependency>
    91. <groupId>com.fasterxml.jackson.core</groupId>
    92. <artifactId>jackson-core</artifactId>
    93. <version>2.5.0</version>
    94. </dependency>
    95. <dependency>
    96. <groupId>com.fasterxml.jackson.core</groupId>
    97. <artifactId>jackson-databind</artifactId>
    98. <version>2.5.0</version>
    99. </dependency>
    100. <dependency>
    101. <groupId>com.fasterxml.jackson.core</groupId>
    102. <artifactId>jackson-annotations</artifactId>
    103. <version>2.5.0</version>
    104. </dependency>
    105. <!-- ******************************** Spring AOP *********************************** -->
    106. <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
    107. <dependency>
    108. <groupId>org.springframework</groupId>
    109. <artifactId>spring-aop</artifactId>
    110. <version>4.3.6.RELEASE</version>
    111. </dependency>
    112. <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
    113. <dependency>
    114. <groupId>org.aspectj</groupId>
    115. <artifactId>aspectjrt</artifactId>
    116. <version>1.7.3</version>
    117. </dependency>
    118. <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
    119. <dependency>
    120. <groupId>org.aspectj</groupId>
    121. <artifactId>aspectjweaver</artifactId>
    122. <version>1.8.10</version>
    123. </dependency>
    124. <!-- ******************************** 这是Google的一个工具类,可以方便处理数据的。可以不需要 *********************************** -->
    125. <dependency>
    126. <groupId>com.google.guava</groupId>
    127. <artifactId>guava</artifactId>
    128. <version>20.0</version>
    129. </dependency>
    130. <!-- ******************************** 这是阿里巴巴的Json工具类,一般做网站都需要使用Json *********************************** -->
    131. <dependency>
    132. <groupId>com.alibaba</groupId>
    133. <artifactId>fastjson</artifactId>
    134. <version>1.2.38</version>
    135. </dependency>
    136. </dependencies>
    137. </project>

    三、配置Web.xml

    在上述操作完毕之后,我们的网站所所依赖的包就完毕了。现在我们讲一下Web.xml的配置。当我们去启动一个WEB项目时,容器包括(JBoss、Tomcat等)首先会读取项目web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常地被启动起来。而一些Spring框架的监控都是在这里配置的(注意:配置条目的顺序要一样,因为它是按照顺序扫描加载的。顺序错了可能会导致出错)。我们右键项目中的WEB-INF文件夹,然后新建一个web.xml(有的时候创建项目可以勾选自动创建web.xml,这里我们手动建一个)。具体配置和说明如下:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <web-app
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    5. xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp"
    6. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    7. metadata-complete="true" version="3.1">
    8. <display-name>Web Template created by D.F.</display-name>
    9. <!-- 这是欢迎页面,也就是指定项目启动的时候启动页面 -->
    10. <welcome-file-list>
    11. <welcome-file>/</welcome-file>
    12. </welcome-file-list>
    13. <!-- 这是session过期时间 -->
    14. <session-config>
    15. <session-timeout>1800</session-timeout>
    16. </session-config>
    17. <!-- 这里配置SpringMVC的监听器,也就是启动的时候SpringMVC会注册一些事件,然后监控系统的请求情况 -->
    18. <listener>
    19. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    20. </listener>
    21. <listener>
    22. <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
    23. </listener>
    24. <!-- 这里配置编码过滤器,强制使用UTF-8,防止编码问题 -->
    25. <filter>
    26. <filter-name>encodingFilter</filter-name>
    27. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    28. <init-param>
    29. <param-name>encoding</param-name>
    30. <param-value>UTF-8</param-value>
    31. </init-param>
    32. <init-param>
    33. <param-name>forceEncoding</param-name>
    34. <param-value>true</param-value>
    35. </init-param>
    36. </filter>
    37. <filter-mapping>
    38. <filter-name>encodingFilter</filter-name>
    39. <url-pattern>/*</url-pattern>
    40. </filter-mapping>
    41. <!-- Spring Security 的过滤配置,表明请求需要经过这个类的过滤和判断 -->
    42. <filter>
    43. <filter-name>springSecurityFilterChain</filter-name>
    44. <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    45. </filter>
    46. <filter-mapping>
    47. <filter-name>springSecurityFilterChain</filter-name>
    48. <url-pattern>/*</url-pattern>
    49. </filter-mapping>
    50. <!-- 配置文件位置。表明如下位置的xml文件都将被扫描(这里的文件内容和作用后面我们会说到) -->
    51. <context-param>
    52. <param-name>contextConfigLocation</param-name>
    53. <param-value>/WEB-INF/spring*.xml
    54. /WEB-INF/applicationContext*.xml</param-value>
    55. </context-param>
    56. <!-- 这里是SpringMVC实现的Servlet类,表明请求需要通过该类 -->
    57. <servlet>
    58. <servlet-name>applicationContext</servlet-name>
    59. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    60. <load-on-startup>1</load-on-startup>
    61. </servlet>
    62. <servlet-mapping>
    63. <servlet-name>applicationContext</servlet-name>
    64. <url-pattern>/</url-pattern>
    65. </servlet-mapping>
    66. <!-- 这里后面就是服务软件请求的文件类型了。都一样。 -->
    67. <servlet-mapping>
    68. <servlet-name>default</servlet-name>
    69. <url-pattern>*.css</url-pattern>
    70. </servlet-mapping>
    71. <servlet-mapping>
    72. <servlet-name>default</servlet-name>
    73. <url-pattern>*.js</url-pattern>
    74. </servlet-mapping>
    75. <servlet-mapping>
    76. <servlet-name>default</servlet-name>
    77. <url-pattern>*.ico</url-pattern>
    78. </servlet-mapping>
    79. <servlet-mapping>
    80. <servlet-name>default</servlet-name>
    81. <url-pattern>*.gif</url-pattern>
    82. </servlet-mapping>
    83. <servlet-mapping>
    84. <servlet-name>default</servlet-name>
    85. <url-pattern>*.jpg</url-pattern>
    86. </servlet-mapping>
    87. <servlet-mapping>
    88. <servlet-name>default</servlet-name>
    89. <url-pattern>*.png</url-pattern>
    90. </servlet-mapping>
    91. <servlet-mapping>
    92. <servlet-name>default</servlet-name>
    93. <url-pattern>*.bmp</url-pattern>
    94. </servlet-mapping>
    95. <servlet-mapping>
    96. <servlet-name>default</servlet-name>
    97. <url-pattern>*.jpeg</url-pattern>
    98. </servlet-mapping>
    99. <servlet-mapping>
    100. <servlet-name>default</servlet-name>
    101. <url-pattern>*.swf</url-pattern>
    102. </servlet-mapping>
    103. <servlet-mapping>
    104. <servlet-name>default</servlet-name>
    105. <url-pattern>*.flv</url-pattern>
    106. </servlet-mapping>
    107. <servlet-mapping>
    108. <servlet-name>default</servlet-name>
    109. <url-pattern>*.xml</url-pattern>
    110. </servlet-mapping>
    111. <servlet-mapping>
    112. <servlet-name>default</servlet-name>
    113. <url-pattern>*.txt</url-pattern>
    114. </servlet-mapping>
    115. <servlet-mapping>
    116. <servlet-name>default</servlet-name>
    117. <url-pattern>*.htm</url-pattern>
    118. </servlet-mapping>
    119. <servlet-mapping>
    120. <servlet-name>default</servlet-name>
    121. <url-pattern>*.html</url-pattern>
    122. </servlet-mapping>
    123. </web-app>

    四、添加其他的配置文件
    在web.xml的配置中,我们还加了一个其他配置文件。这里我们就在WEB-INF下面再加入三个配置文件,分别是applicationContext-database.xmlapplicationContext-servlet.xmlspring-security.xml。我们将分别说明。

    4.1、applicationContext-database.xml

    这是阿里巴巴Druid数据连接池的配置。网站需要访问数据库,需要数据库连接池来管理数据库连接。我们使用的是druid工具。里面配置了用户名、密码、连接数、等待时间等等。不是本篇重点。我们只列出来,不说具体了。

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans
    3. xmlns="http://www.springframework.org/schema/beans"
    4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    6. <!-- 数据库连接池配置 -->
    7. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    8. <property name="url"><value>jdbc:mysql://127.0.0.1:3306/Enterprise</value></property>
    9. <property name="username"><value>root</value></property>
    10. <property name="password"><value>11111111</value></property>
    11. <!-- 配置初始化大小、最小、最大 -->
    12. <property name="initialSize" value="1" />
    13. <property name="minIdle" value="1" />
    14. <property name="maxActive" value="20" />
    15. <!-- 配置获取连接等待超时的时间 -->
    16. <property name="maxWait" value="60000" />
    17. <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    18. <property name="timeBetweenEvictionRunsMillis" value="60000" />
    19. <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    20. <property name="minEvictableIdleTimeMillis" value="300000" />
    21. <property name="validationQuery" value="SELECT 'x'" />
    22. <property name="testWhileIdle" value="true" />
    23. <property name="testOnBorrow" value="false" />
    24. <property name="testOnReturn" value="false" />
    25. <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
    26. <property name="poolPreparedStatements" value="true" />
    27. <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
    28. <!-- 配置监控统计拦截的filters -->
    29. <property name="filters" value="stat" />
    30. </bean>
    31. </beans>
    4.2、applicationContext-servlet.xml

    这里主要配置SpringMVC的一些信息,包括对自动标注的支持,设置需要扫描的拦截器目录等。具体如下:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:aop="http://www.springframework.org/schema/aop"
    6. xmlns:tx="http://www.springframework.org/schema/tx"
    7. xmlns:mvc="http://www.springframework.org/schema/mvc"
    8. xmlns:security="http://www.springframework.org/schema/security"
    9. xsi:schemaLocation="http://www.springframework.org/schema/beans
    10. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    11. http://www.springframework.org/schema/context
    12. http://www.springframework.org/schema/context/spring-context-4.0.xsd
    13. http://www.springframework.org/schema/aop
    14. http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
    15. http://www.springframework.org/schema/mvc
    16. http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
    17. http://www.springframework.org/schema/tx
    18. http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    19. http://www.springframework.org/schema/security
    20. http://www.springframework.org/schema/security/spring-security-4.0.xsd" default-autowire="byName">
    21. <mvc:annotation-driven>
    22. <!-- 返回json数据,@response使用 -->
    23. <mvc:message-converters register-defaults="true">
    24. <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    25. <property name="supportedMediaTypes">
    26. <list>
    27. <value>text/html;charset=UTF-8</value>
    28. <value>application/json;charset=UTF-8</value>
    29. </list>
    30. </property>
    31. </bean>
    32. </mvc:message-converters>
    33. </mvc:annotation-driven>
    34. <!--end-->
    35. <!-- 对静态资源放行 -->
    36. <mvc:default-servlet-handler />
    37. <context:annotation-config />
    38. <!-- 扫描拦截器目录 -->
    39. <context:component-scan base-package="org.test" />
    40. <!-- 启用security对service层方法保护的注解 -->
    41. <security:global-method-security jsr250-annotations="enabled" secured-annotations="enabled" pre-post-annotations="enabled"/>
    42. <!-- 视图解析器,我们把所有的页面都放到views文件夹下,这里需要配置好 -->
    43. <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    44. <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    45. <property name="prefix" value="/WEB-INF/views/"/>
    46. <property name="suffix" value=".jsp"/>
    47. </bean>
    48. </beans>
    4.3、spring-security.xml文件配置

    这个就是配置spring-security权限控制的文件了。具体如下:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans:beans xmlns="http://www.springframework.org/schema/security"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:beans="http://www.springframework.org/schema/beans"
    5. xsi:schemaLocation="http://www.springframework.org/schema/beans
    6. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    7. http://www.springframework.org/schema/security
    8. http://www.springframework.org/schema/security/spring-security-4.0.xsd">
    9. <!-- 配置为none的不经过任何spring的过滤器,一下主要是静态资源,我们不需要经过过滤器 -->
    10. <http pattern="/resources/**" security="none" />
    11. <http pattern="/sitemap.xml" security="none" />
    12. <http pattern="/favicon.ico" security="none" />
    13. <!-- 配置为permitAll允许所有已登录或者未用户访问,但依然经过过滤器处理。除此之外所有的页面都需要登录访问 -->
    14. <http auto-config="true" use-expressions="true">
    15. <intercept-url pattern="/" access="permitAll" />
    16. <intercept-url pattern="/index*" access="permitAll" />
    17. <intercept-url pattern="/signin*" access="permitAll" />
    18. <intercept-url pattern="/login*" access="permitAll" />
    19. <intercept-url pattern="/register*" access="permitAll" />
    20. <intercept-url pattern="/invalidsession*" access="permitAll" />
    21. <intercept-url pattern="/404*" access="none" />
    22. <!-- 配置登录的路径,已经认证失败的页面,认证成功的页面 -->
    23. <form-login login-page="/signin" authentication-failure-url="/signin?login_error" default-target-url="/query"/>
    24. <logout logout-success-url="/query" delete-cookies="JSESSIONID" />
    25. <!-- 配不同页面的权限,/admin下面需要role_admin权限,其他都可以 -->
    26. <intercept-url pattern="/admin" access="hasRole('ROLE_ADMIN')" />
    27. <intercept-url pattern="/**" access="hasAnyRole('ROLE_ADMIN','ROLE_USER')" />
    28. <csrf disabled="true" />
    29. <access-denied-handler error-page="/403" />
    30. <remember-me data-source-ref="dataSource" token-validity-seconds="1209600" remember-me-parameter="remember-me" />
    31. <session-management invalid-session-url="/">
    32. <concurrency-control max-sessions="1"/>
    33. </session-management>
    34. </http>
    35. <authentication-manager erase-credentials="false">
    36. <authentication-provider>
    37. <password-encoder ref="bcryptEncoder" />
    38. <jdbc-user-service data-source-ref="dataSource" />
    39. </authentication-provider>
    40. </authentication-manager>
    41. <beans:bean id="messageSource"
    42. class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    43. <beans:property name="basenames">
    44. <beans:list>
    45. <beans:value>classpath:myMessages</beans:value>
    46. </beans:list>
    47. </beans:property>
    48. </beans:bean>
    49. <!-- 配置加密的算法,表明在登录后密码需要加密验证 -->
    50. <beans:bean name="bcryptEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />
    51. </beans:beans>

    在上述配置文件都创建好了之后,我们的目录应该如下所示(这里把第5步骤的创建的首页也放进来了。)


    五、创建首页

    好了。在所有的配置文件都写好之后,我们开始创建一个首页。首先,我们在WEB-INF文件夹下创建一个views文件夹。这个之前说过了,我们在配置文件中写了。我们创建一个简单的jsp页面,如下:

    1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    2. <!DOCTYPE html>
    3. <html lang="zh">
    4. <head>
    5. <title>首页</title>
    6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    7. <meta http-equiv="pragma" content="no-cache" />
    8. <meta http-equiv="cache-control" content="max-age=3600" />
    9. <meta http-equiv="expires" content="0" />
    10. <meta http-equiv="keywords" content="">
    11. <meta http-equiv="description" content="">
    12. <meta name="viewport" content="width=device-width, initial-scale=1">
    13. </head>
    14. <body>
    15. <h1>你好</h1>
    16. </body>
    17. </html>

    然后,我们需要创建一个Contoller来控制这个首页访问。在Java Resource下src上右键单击创建一个包,然后创建一个Java类,如下:


    1. package org.test.controller;
    2. import javax.servlet.http.HttpServletRequest;
    3. import org.springframework.stereotype.Controller;
    4. import org.springframework.web.bind.annotation.PathVariable;
    5. import org.springframework.web.bind.annotation.RequestMapping;
    6. import org.springframework.web.bind.annotation.ResponseBody;
    7. import org.springframework.web.servlet.ModelAndView;
    8. @Controller
    9. public class ViewRedirectController {
    10. @RequestMapping("/")
    11. public ModelAndView index() {
    12. ModelAndView mav = new ModelAndView();
    13. mav.setViewName("/index");
    14. return mav;
    15. }
    16. }

    这里我们在类名上加上@Controller表明这是一个控制类,Spring监听器会把这个里面的方法加入到监听。然后我们创建了一个方法,声明@RequestMapping("/")表明这个方法是用来处理/请求的,就是我们常见的默认的首页。然后返回index这个页面。是使用setViewName("/index")方法。注意,这个类所在的包一定要和 applicationContext-servlet.xml 中配置的扫描的包要一致,至少要在那个包下面,负责会扫描不到这个控制类,就无法控制了。

    好了,下面右键单击这个项目,点击Run As - Run on server之后,我们就可以启动这个系统(如果没有配置tomcat请先配置一下)。然后看到首页了。


    本项目已经上传到GitHub中,请查看https://github.com/df19900725/WebTemplate

  • 相关阅读:
    响应式开发
    css3的2D和3D的转换
    前端CSS3笔记
    DOM精简版笔记
    JS进阶
    linux 修改时间同步到BIOS
    linux-设置代理和取消代理
    linux-rpm强制安装跳过依赖包
    [linux] VNC the connection was refused by the computer
    Linux vim 常用命令(不定时update)
  • 原文地址:https://www.cnblogs.com/binzhou75/p/13728107.html
Copyright © 2020-2023  润新知