SpringMVC初探-HelloWorld
MVC的概念
MVC是一种设计模式,即Model--View-Controller,模型--视图--控制器
-
Model(模型)表示应用程序核心(比如数据库记录列表)。
-
View(视图)显示数据(数据库记录)。
-
Controller(控制器)处理输入(写入数据库记录)
Model常常是向数据库中存取数据
View一般根据Model的数据来创建
Controller一般负责从视图读取数据,将数据发给模型
SpringMVC
在CSDN的专栏里看到一张图,很好的讲到了SpringMVC的结构
首先是DispatcherServlet,即前端控制器,它不要我们自己来创建,而是SpringMVC框架内置的,但需要在Bean.xml
中配置它,之后它根据web.xml中的配置,得到URL的相关信息,再根据HandlerMapping找到一个合适Handler即(Controller)
,随后,再交由HandlerAdapter来执行这个Handler,handler执行后,向HandlerAdapter返回一个ModelAndView对象,
HandlerAdapter再向前端控制器返回这个ModelAndView对象,之后,前端控制器再找到一个解析器,即ViewResolver,
处理ModelAndView对象,返回一个真正的视图(jsp).然后前端控制器从ModelAn的View中解析出参数得到数据,组成
View返回给浏览器或者客户端
HelloWorld实战
第一步在WEB-INF的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> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
前端配置器的名字不能随便乱取,接下来的SpringMVC的配置文件的名字和他有联系
接下来创建[前端控制器名字]-servlet,xml文件,即springmvc-servlet.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 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="controller" /> <bean id="irViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/page/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
<context>标签是用来查找使用构造型(stereotype)注解所标注的类,如@Component(组件),@Service(服务),
@Controller(控制器),@Repository(数据仓库),这里当然就是查找控制器的了
下面bean的两个属性是表示视图文件所在的相对路径,prefix表示前缀,suffix表示后缀,这里则表示/WEB-INF/page文件夹
下面的jsp文件
package controller; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping(value = "/hello") public class HelloController { @RequestMapping(method = RequestMethod.GET) public String hello(ModelMap modelMap){ modelMap.addAttribute("message","Hello world"); return "hello"; } }
然后在WEB-INF新建一个page文件夹存放我们的视图,即jsp文件,对应上面解析器的配置
新建hello.jsp
<%-- Created by IntelliJ IDEA. User: 31786 Date: 2018/10/16 Time: 11:35 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>${message}</h1> </body> </html>
这里message和HelloController里面的modelMap对象中的message对应,hello.jsp的名字和HelloController中hello方法中
返回的字符串对应
之后启动项目,大功告成