简单介绍:
对于SpringMVC的理论知识方面,我们只需要知道这是应用在表现层的,用于接收用户浏览器发送的请求,并将数据相应到浏览器的框架就可以,然后本章我们主要介绍如何搭建一个SpringMVC程序,搭建的步骤以及如何启动我们的SpringMVC的项目
使用方法:
在JavaEE的开发中,经典的三层架构包括表现层,业务层和持久层。三层架构互相配合完成整体的项目,比如持久层负责 与数据库进行交互,使用的比如MyBatis;业务层负责进行业务逻辑需求,比如我们的JavaBean;表现层就是负责接收用户 的请求,并向用户响应数据。 接下来我们要介绍的SpringMVC就是用于表现层的,负责接收客户端的请求并进行响应。 关于SpringMVC的一些理论知识有很多,比如SpringMVC的优点和特点,此处我们并不过多的解释,而是注重于我们 如何去实现他。 首先因为我们的SpringMVC是用于表现层,需要接收和响应用户的请求,那么首先我们需要在我们的项目中添加 web框架:
首先点击文件,点击项目结构:
然后点击左上角的模块,然后是点击加号:
然后点击最下面的web:
然后我们就能看见web目录出现了,在web框架中,我们需要配置两个地方,第一个是配置描述符,还有一个是配置资源目录:
一般情况下,在我们点击确定之后,它会自动帮我们创建webapp文件夹,我们继续进行下一步就可以了。
在添加完框架支持之后,我们就来添加我们的依赖坐标,在pom文件中,我们需要添加spring的web包和tomcat的插件 以及我们的servlet的依赖和jsp页面的依赖,添加完成之后,我们就可以继续进行下一步:
<!-- servlet的依赖坐标-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!-- jsp的依赖坐标-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<!-- 添加SpringMVC的web包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.21.RELEASE</version>
</dependency>
添加完成框架之后,我们开始配置我们的SpirngMVC的配置文件,先回想一下之前我们学习JavaWeb的时候 我们是如何让一个Java类实现接受用户从浏览器发送的请求的呢?
我们是通过让类去显示servlet接口,重写get或者post方法来将这个类变成可以处理来自浏览器的请求的servlet类 然后通过一个@Servlet注解,设定访问路径,当浏览器访问这个路径的时候,就会将请求拦截到我们自己编写的 servlet类中处理请求,然后将结果响应回去。 这是我们之前javaWeb的内容,但是现在,我们要通过控制反转的方式去获取对象,也就是说我们并不能去新建一个类 去实现接口,那么现在我们怎么让自己创建的类变成一个servlet呢?并且我们在将自己的类变成一个servlet之后要如何设置让他去接收来自某个请求路径的请求呢?
要解决这两个问题,首先我们要认识一个新的东西,叫做前端控制器,使用这个就可以解决刚才我们提出的两个问题 这个前端配置器的作用就是在SpringMVC中用来拦截来自客户端的请求并且进行转发的一个东西。
这个前端控制器 本身也是一个Servlet,所以我们需要在web.xml中进行配置:
<!-- 配置前端控制器,因为前端控制器的本质就是一个servlet,所以这里用servlet的配置即可-->
<servlet>
<!-- 配置类名,这个类名可以随意写-->
<servlet-name>DispatcherServlet</servlet-name>
<!-- 配置servlet的类的全路径名-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置一些初始参数,因为我们是基于IoC,所以我们的servlet的类的创建是基于spring的配置文件,这里我们需要指定我们的spring容器的配置文件的地址-->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 配置我们的servlet类创建的容器的XML配置文件的地址-->
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!-- 配置在项目启动的时候同时加载前端控制器-->
<load-on-startup>1</load-on-startup>
</servlet>
前端控制器的意义在于,之前我们是通过自己创建servlet类,我们可以直接实现接口来将我们自己的类变成一个 servlet来获取请求,即浏览器直直接到servlet,但是现在我们无法直接创建类,所以我们需要一个前端控制器 来将服务器的请求拦截下来,转发到我们通过springMVC规则的注解中配置的路径的类中,之后我们会在代码中 对如何寻找路径进行一个详细的注解说明。
然后是配置视图解析器,视图解析的作用是将我们的访问页面时候的路径简化。 他会配置一个页面的前缀和后缀,因为我们最终是要给用户展示一个界面,而我们的界面需要一个完整的路径,写起来 会非常的麻烦,就可以通过配置我们的视图解析器来简化我们编写的页面路径,我们可以通过配置一个前缀用来定位页面 所在的包,配置一个后缀来定位这个文件是一个什么类型的文件,这样我们需要自己写的地方就只剩下一个文件名了 极大的简化了我们定位页面时需要编写的大量路径。页面解析器的配置需要在spring的Bean管理XML配置文件中编写
<!-- 配置页面解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置页面的前缀,表示定位页面的包-->
<property name="prefix" value="/SpringMVC/pages"/>
<!-- 配置文件的后缀,表示定位页面的类型-->
<property name="suffix" value=".jdp"/>
</bean>
在完成了前端控制器和页面解析器之后,我们还需要配置注解扫描,因为告诉我们的Spring我创建的类是一个 用来处理用户请求的类,并且我还要告诉Spring我要处理来自哪一个路径请求,这些配置全部都是基于注解来完成的。
<!--配置包扫描器,因为我们的SpringMVC的配置主要是基于注解,所以我需要配置一个注解扫描 -->
<context:component-scan base-package="Semester_4.SpringMVC"/>
在完成上面的配置之后,我们就可以来创建我们的业务处理类了,就在我们之前注解扫描的包下面创建,我们的业务也是非常的简单,只需要在访问一个url的时候在控制台输出一句话,并跳转到相当的页面即可:
package Semester_4.SpringMVC.GettingStartedProgram;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
//这个注解就相当于是继承servlet接口,表示这个类是一个用于处理用户请求的servlet类
@Controller
public class UserServer {
// 这个注解就相当于是servlet注解,后面的路径就是当我访问这个路径时,我的请求就会被转发到这个方法中进行处理
@RequestMapping("/sayHello")
public String sayHello(){
// 返回值就是响应的页面,本来因该是全路径,但是因为之前我们配置了页面解析器,所以我们只需要写文件名就可以了
// 如果不写这个返回值,默认会去找跟方法名同名的jsp页面
return "index";
}
}
然后我们使用Maven来启动Tomcat的插件,我们需要做一些简单的配置,在使用maven插件的tamcat的时候,需要有几个注意点,主要就是我们的依赖里面的servlet的版本要注意统一 还有就是我们的web框架生成的webapp文件夹要放在我们的main文件夹下,并且在我们的配置文件中一定要注意 这个配置文件的位置,否则会导致tomcat启动不起来的问题:
我们正常在工作界面右击,然后选择Run Maven,然后就可以看到tomcat的运行选项,我们点击这个选项之后,就可以正常的使用Tomcat的插件运行
之后我们会在控制台看到一堆的日志,知道最后显示日期或者能看到一个路径,这个路径就是Tomcat的访问路径,我们点击这个网址,就会自动跳转到默认的浏览器:
正常应该是访问不到资源,不用慌,我们打开之前我们编写的业务处理类的方法中的RequestMapping注解后面的值,不要漏掉斜杠,然后粘贴到浏览器的路径后面,然后点击回车访问:
如果配置正确,你会看到在浏览器上输出了这句话。那么就表示你的SpringMVC配置正确,并且已经成功启动了。
代码实现:
我们把完整的web.xml和Bean管理XML配置文件,以及我们整体的文件结构整体的展示一下:
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的配置即可-->
<servlet>
<!-- 配置类名,这个类名可以随意写-->
<servlet-name>DispatcherServlet</servlet-name>
<!-- 配置servlet的类的全路径名-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置一些初始参数,因为我们是基于IoC,所以我们的servlet的类的创建是基于spring的配置文件,这里我们需要指定我们的spring容器的配置文件的地址-->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 配置我们的servlet类创建的容器的XML配置文件的地址-->
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!-- 配置在项目启动的时候同时加载前端控制器-->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 配置servlet的转发来自什么范围的路径的亲求-->
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<!-- 只有一个斜杠表示将拦截转发来自所有路径的请求-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Bean管理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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://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">
<!-- 配置页面解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置页面的前缀,表示定位页面的包-->
<property name="prefix" value="SpringMVC/pages/"/>
<!-- 配置文件的后缀,表示定位页面的类型-->
<property name="suffix" value=".jsp"/>
</bean>
<!-- 测试复杂数据绑定中的将数据绑定到Java类中的绑定类-->
<bean id="user" class="SpringMVC.DataBindingAndResponse.user"/>
<!-- 添加有关数据绑定的controller类-->
<bean id="dataBinger" class="SpringMVC.DataBindingAndResponse.textDataBinger"/>
<!-- 配置包扫描器,因为我们的SpringMVC的配置主要是基于注解,所以我需要配置一个注解扫描 -->
<context:component-scan base-package="SpringMVC.GettingStartedProgram"/>
<!-- 添加格式转换工厂类-->
<bean class="org.springframework.context.support.ConversionServiceFactoryBean" id="conversionServiceFactoryBean">
<property name="converters">
<array>
<!-- 此处配置我们自己编写的格式转换类-->
<bean class="SpringMVC.DataBindingAndResponse.DataConverter"/>
</array>
</property>
</bean>
<!-- 然后装载我们的格式工厂-->
<mvc:annotation-driven conversion-service="conversionServiceFactoryBean"/>
</beans>
文件结构:
主要是注意这个webapp文件夹的位置
注意点:
这一章主要的注意点就是需要注意webapp文件夹的创建和内部文件的编写。还有一个问题是可能出现的,如果出现Tomcat运行之后没有挂起而是直接结束了,需要在pom.xml文件中添加一行配置:
<!-- 设置打包方式--> <packaging>war</packaging>
这句话的意思是指定项目打包成一个war包,然后Tomcat才能进行解析,否则会打包成jar包,直接就结束了。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153281.html