SpringMVC支持使用注解方式配置,比配置文件方式更加的灵活易用,是SpringMVC使用的主流模式。
传统的servlet是单例,如果业务复杂,存在很多的servlet,就会创建很多对象,造成内存浪费等一系列问题,SpringMVC就很好的解决了这些问题。
1.项目创建文件目录结构及导包
A.创建项目
新建立的项目在WEB-INF目录下没有lib包和classes包的话,手动创建一下。
WEB-INF 文件夹下的文件是被保护的,不能被外部访问,所以编译好的class文件,jar包web.xml放到这里比较安全(web.xml这种配置文件很重要肯定不能暴露出去,让用户访问到)。
B.在WEB-INF目录下创建lib包、classes包
C.导入相关的jar包
注意:此时导入的jar包不能采用之前javase项目添加jar包的方式Add as Library,因为这是web项目,到时编译发布的都是WEB-INF下的,将jar包添加到项目中是没有用的,到时发布到tomcat中会导致不能正常运行
D.配置classes和lib目录
在右上角1位置点击按钮进入到Project Structure
然后选择位置2的Paths
然后选择位置3的Use module compile output path
在位置4选择刚刚创建的classes文件目录,用来保存编译好的class文件
最后在5位置先选择apply,此时不要点击OK
选择Dependencies,然后点击”+”,在弹出框中选择到刚刚创建的lib包然后OK
此时可以看到lib包已经添加成功,点击Apply---OK 完成jar包的导入
此时可以看到之前创建的classes文件夹已经变为了橙色,lib文件夹中的jar包已经可以展开,说明WEB项目创建成功
web项目的结构层级关系
|--静态web资源,html,css,js,图片,音频。视频,动画等
|--WEB-INF
|--classes //动态web资源class文件
|--lib //动态web资源依赖的jar包
|--web.xml //web应用的核心配置文件
|--xxxxx //其他不希望外界直接访问的文件
2.创建SpringMVC项目
方式一:
A.在web.xml中配置前端控制器
<?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">
<!--前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--/* 范围太大:*.do ,*.action 都行,可以自己自由命名-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
B.创建SpringMVC核心配置文件
因为SpringMVC默认会自动在web应用的WEB-INF目录下去寻找[前端控制器ServletName]-servlet.xml作为当前SpringMVC的核心配置文件,所以就在WEB-INF目录下创建文件。
关于文件名:
上面web.xml中配置的前端控制器的<servlet-name>是springmvc,所以按照要求正确的文件名应该是(springmvc-servlet.xml)
创建springmvc-servlet.xml这个文件,这个文件本身其实就是Spring的配置文件,所以导入Spring相关的约束信息,包括 beans、context、mvc
创建如下:
目录结构如下
在springmvc-servlet.xml中配置,配置注解方式MVC开关时主要选择后缀为mvc的
springmvc-servlet.xml中具体配置如下:
视图解析器中prefix为前缀,suffix为后缀
<?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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--配置包扫描-->
<context:component-scan base-package="cn.wyy.web"/>
<!--配置注解方式MVC开关-->
<mvc:annotation-driven/>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
C. 在src目录下创建控制器类MyController,并返回视图test01
D.根据前缀中配置的路径及控制器中返回的视图名称,创建如下目录及文件
在test01.jsp中通过EL表达式获取Controller中设置的值
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
控制器中设置的值为:<br/>
${k1}<br/>
${k2}<br/>
</body>
</html>
E. 部署运行程序
根据@RequestMapping中的配置可知,访问的地址为
http://localhost/springmvctest01_war_exploded/web01/test01.action
访问验证成功
方式二
对于上面的步骤B,
SpringMVC默认会自动在web应用的WEB-INF目录下去寻找[前端控制器ServletName]-servlet.xml作为当前SpringMVC的核心配置文件,也可以在servlet的配置中自己指定核心配置文件位置,这样就可以改变这个核心配置文件的路径及名称了。
具体的操作:在web.xml中的servlet标签中加入<init-param>标签实现,一般习惯于将该配置文件放置在src根目录下
修改后的web.xml内容如下,可以自由命名:如:springmvc-my.xml
<?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">
<!--前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-my.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--/* 范围太大:*.do ,*.action 都行,可以自己自由命名-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
修改后的目录结构如下:
其他与方式一保持一致,部署项目,测试如下,访问成功