DispatcherServlet
如图为SpringMVC工作的流程图
和大多数的webMVC框架一样, 请求驱动, 通过派遣, 控制器, 和提供其他的方法来对web应用进行开发
在SpringMVC中, DispatcherServlet就充当着FrontController的职责
从名字上看, DispatcherServlet是一个servlet, 而且事实上, 它确实是一个servlet, 因此在web开发中需要在web.xml对它进行配置, 配置代码如下:
<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要配置成如下, 不能配置成<url-pattern>/*</url-pattern> -->
<!-- 如果配置多加了”*”那么Spring会将jsp文件当成txt文件直接输出到浏览器上 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
上述DispatcherServlet初始化中, SpringMVC默认会自动寻找一个在web-inf目录下的名为[servletName]-servlet.xml(也就是SpringMVC-servlet.xml)的配置文件,因此我们需要自行创建一个xml文件, 如果你不想按照默认的来加载配置文件,你也可以自己通过servlet初始化参数(init-param)来自行指定配置加载方式
自定义具体参数定义如下:
配置格式如下:
在相应的DispatcherServlet添加如下初始化参数:
这里以改变配置文件的命名空间为例:
<init-param>
<param-name>namespace</param-name>
<param-value>HelloWorld_servlet</param-value>
</init-param>
改变之后, 服务器启动时加载的配置文件不再是默认的了, 而是改变后名为
HelloWorld_servlet.xml文件
Controller
配置完DispatcherServlet后就可以开始进入下一个环节了, 建立controller,
bean
以下为例:
package com.wenj.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloWorldController {
@RequestMapping(value = "/helloWorld")
public String helloWorld(Model model) {
model.addAttribute("helloWorld", "Hello World!");
return "hello";
}
}
这里是采用注解的方式,
@Controller表明这是一个Controller
@RequestMapping 进行url的匹配
Model表示的是Controller处理返回的模型对象,
return回来的是视图jsp的名称, 如: ‘hello.jsp’
也可以改为如下处理代码
@RequestMapping(value = "/helloWorld")
public ModelAndView helloWorld() {
ModelAndView mv = new ModelAndView();
mv.addObject("helloWorld", "Hello World!");
mv.setViewName("hello");
return mv;
}
ModelAndView类别就如其名称所示,是代表了MVC Web程序中Model与View的对象,不过它只是方便您一次返回这两个对象的holder,Model与View两者仍是分离的概念。
配置Spring XML配置文件
PS:这里以我的配置文件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:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 配置自动扫描controller注解 -->
<context:component-scan base-package="com.wenj.controller" />
</beans>
配置完毕
编写视图文件(JSP)和配置视图
JSP:
/**********hello.jsp**********/
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>HelloWorld Page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
${helloWorld}
</body>
</html>
配置视图:
在Spring中的xml配置文件添加如下代码:
<!-- 配置视图 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
全部工作准备完毕!
完毕:
还差一步, 启动服务器, 打开浏览器, 输入如下URL:
http://localhost:8080/SpringMVC/helloWorld
确认,你会看到网页输出:
HelloWorld!