SpringMVC系列一之入门程序
SpringMVC是MVC中的一个非常优秀的框架。它是前台网页和后台代码的桥梁。
一、MVC
MVC是 model、view、和controller的缩写,分别代表web应用程序中的三种职责:
model-模型:用于存储数据。类比于student表和Student这个实体类
view-视图:向控制器提交数据,显示模型中的数据。类比于网页页面
controller-控制器:根据视图提出的请求,判断将请求和数据交给哪个模型处理,处理后的有关结果交给哪个视图更新显示。类比于一个规则。这个规则规定了输入某个url地址后,由哪个类的哪个方法来处理,之后会返回哪个页面。
二、入门程序
创建工程以及说明
- 创建工程。此工程不再是普通的Java Project。而是一个动态网页工程(Dynamic Web Project)
说明:
上图中需要设置Tomcat的版本和安装路径。版本选择8.5,安装路径选择Tomcat解压后的路径。Tomcat使用时,只需解压不用配置。
- 工程目录说明
相比普通java projet,动态网页工程目录结构有了比较大的变化,例如,src文件放在了JavaResource下。还有许多新的文件夹。没关系,随着后面的学习慢慢的加深了解。
导入Jar包
- 在动态工程中,我们直接将jar包复制粘贴到:工程名/WeContent/lib这个目录下。所需的jar包有如下9个
编写配置文件
- web.xml
这个配置文件是Tomcat启动时,用来初始化web应用的配置信息,例如设置欢迎页。咱们配置的目的是使用SpringMVC框架来处理URL请求。具体内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>SpringMVC01</display-name>
<welcome-file-list>
<!--设置欢迎页-->
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--
配置servlet。通俗来讲,servlet专门用来接收客户端的请求,接收客户端的请求数据,然后调用底层service,进行相关业务处理,并生成结果。
执行路线:浏览器http请求------》tomcat服务器-------》到达servlet-----》调用某些方法----》返回数据
-->
<servlet>
<!--给servlet起个名字-->
<servlet-name>SpringMVC</servlet-name>
<!--设置servlet的具体实现,使用spriMVC的DispatcherServlet-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--具体使用哪个servlet-->
<servlet-name>SpringMVC</servlet-name>
<!--对什么样的路径进行拦截处理。-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
- SpringMVC- servlet.xml
在WebContent目录下创建一个名为SpringMVC- servlet的xml。它其实是一个spring类型的配置文件。SpringMVC也属于Spring框架,它要想运行,必须要有配置文件,类似于之前的Spring项目中的applicationContext.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">
<!--SpringMVC 项目需要使用注解,配置要扫描的包名-->
<context:component-scan base-package="com.edu.tjdz.geng"></context:component-scan>
<!--配置SpringMVC的一个固定bean,这个bean内部的属性用来指定DispatcherServlet处理请求后,要返回页面所在的目录和后缀>
<bean id="viewResolve" class="org.springframework.web.servlet.view.InternalResourceViewResolve">
<!--指定目录-->
<property name="prefix" value="/WEB-INF/view/view/"></property>
<!--指定后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
编写程序
- 在src下创建com.edu.tjdz.geng.control包。包下创建一个类:MyControl.java
package com.edu.tjdz.geng.test;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MyController {
@RequestMapping("hello")
public String test() {
System.out.println("in hello");
return "success";
}
}
编写测试页
7.在 在WebContent目录下创建一个名为index的jsp文件
创建方法:
在页面中添加一个超链接标签,href设置为hello。修改页面编码,变为UTF-8
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="hello">测试</a>
</body>
</html>
此时,jsp中有一个错误,是因为现在tomcat的Library还未导入。解决方法:https://blog.csdn.net/Sunny5319/article/details/80794184
运行项目
- 配置tomcat
- 将项目添加到Tomcat中
在网页中访问项目的时候,需要输入localhost:8080/项目名
在上图中点击测试这个链接后最后出了一个404错误。这是为什么呢????
通常出现404,不是项目代码有错误,而是要访问的资源不存在。具体有两种情况:第一种、要访问的html或jsp页面现在还没有在项目中存在。第二种、访问的url路径写错了
大家仔细看一下红框中的路径,里边有一个success.jsp。这个文件目前还无法在工程中找到,因为我们从没有创建过
我们创建这个文件。在/WEB-INF/下创建view文件夹,在view下创建success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>my</title>
</head>
<body>
<h1>Hello, SpringMVC</h1>
</body>
</html>
现在重新访问,便可以访问到了。
思考
到底是在哪里指定了点击 测试 这个连接就会返回success.jsp呢?
三、入门程序说明
SpringMVC流程
流程图如下所示,大家要明白url各个部分都是对应了哪一个环节。其中ip是由域名服务器来处理的,没有在图中画出来。
配置文件说明
上面的web.xml配置文件中采用的是文件名默认和路径默认的spring配置文件,也可以自定义,方式是在servlet中使用initparam标签配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>SpringMVC02</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--自定义SpringMVC配置文件的路径。配置文件名任意 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:SpringMVC.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
在JavaResources下新建名为conf的source floder。将SpringMVC配置文件放到该文件夹下
RequestMapping注解说明
RequestMapping注解用来将url中的请求路径映射到具体的请求处理方法。
如下所示,除了可以在方法上添加RequestMapping注解,还可以在类上面添加RequestMapping注解,相应的访问时候的url也有localhost:8080/SpringMVC02/hello变为localhost:8080/SpringMVC02/user/hello
这样做的目的是分类,将不同controller 根据业务归为不同类别。
RequestMapping常用的属性有vale,method,params。这些属都是属于限制性条件,只有都符合这些条件的url才能被该方法处理。下面代码中指定了请求访问时使用的http方式。
package com.edu.tjdz.geng.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/user")
public class MyController {
@RequestMapping(value="/hello", method = RequestMethod.GET)
public String test() {
System.out.println("in test:get");
return "success";
}
@RequestMapping(value="/hello", method = RequestMethod.POST)
public String test1() {
System.out.println("in test:POST");
return "success";
}
}
对应的jsp测试页index.jsp。大家运行起来项目,感受一下两种方式的不同。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="user/hello">测试</a>
<br/>
<form action="user/hello" method="post">
<input type="submit" value="提交"/>
</form>
</body>
</html>