用SpringMVC搭建基本Web项目

[size=medium]因为觉得Struts2的路径映射方式很难看,就像学习一下Spring的web框架。这是第一篇学习记录

开发环境
IDE工具: Eclipse Java EE IDE for Web Developers
Spring版本:3.2
Server: Tomcat 7[/size]

[b][size=medium]操作一:导入Jar包[/size][/b]

各个模块是分着的,像jms和aspects这样的包可能用不到,不管三七二十一统统拷贝到/WEB-INF/lib下。但Spring比较坑的地方还需要一个:commons-logging-X.X.X.jar没提供,需自己去下。
问题:各个包都是做什么的?
看来我需要仔细看文档了。

[b][size=medium]操作二:配置web.xml(学名叫:deployment descriptor,部署描述文件)[/size][/b]

[color=red]注意mapping不能写成/*[/color]

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">


<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>spring</servlet-name>
<!--下面千万不能写成/*-->
<url-pattern>/</url-pattern>
</servlet-mapping>


<display-name>Demo</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


问题:为什么不能写成/*呢?
好像造成循环映射,具体我也说不清

[b][size=medium]操作三:创建DispatcherServlet的配置文件[/size][/b]

文件名称和位置有一个约定:web.xml中<servlet-name>,加“-”,再加“servlet”,放在/WEB-INF下。
我的servlet名称是spring,那么我需要创建一个/WEB-INF/spring-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:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<mvc:annotation-driven/>

<!--使spring自动搜寻test包下用@Component注解的类-->
<context:component-scan base-package="test"/>

<!--viewResolver常见的配置,具体怎么回事,在控制器类说明-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
<property name="contentType" value="text/html; charset=utf-8"/>
</bean>

</beans>


在这个xml配置文件中还可以定义一些DispatcherServlet用到的特殊的类,有:
HandlerMapping
HandlerAdaptor
HandlerExceptionResolver
ViewResolver(如上例)
LocaleResolver
ThemeResolver
MultipartResolver
FlashMapManager
它们都有一些合理的默认值,所以不需要配置。这些默认值包含在
org.springframework.web.servlet.DispatcherServlet.properties文件中

问题:这些类都有什么作用?
问题:<mvc:annotation-driven/>都做了什么?

[b][size=medium]操作四:创建控制器。[/size][/b]
这里再说明一下spring mvc的整体工作流程
根据web.xml中的配置,Tomcat会把所有的请求派发给名为spring的ServletDispatcher实例处理
ServletDispatcher会根据它配置文件中的设定,把请求映射给合适的控制器处理。控制器是处理业务逻辑的地方。具体是如何映射的继续往下看。

在src下创建包test,再创建类HelloController

package test;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {

@RequestMapping("/hello")
public String sayHello(Model model){
model.addAttribute("msg", "Hello, how are you?");
return "hello";
}

}

说明:
1. 类注释@Controller说明这个类是一个Controller,有了这个标记就能被component-scan搜索到。(因为操作三中的配置文件中我们这样写到<context:component-scan base-package="test"/>)
注意:Spring提供了四种类标记@Component,@Controller,@Service和@Repository。他们的关系大概是这样的:后三者是第一个的“子类”。(加引号,是因为我不知道注释有没有子类的概念,不知道这样说是否科学)。虽然所有的类都可以标记成为@Component,但标记成其他三种会更具体,多一些功能(问题:具体有什么区别?)

2. @RequestMapping标记了sayHello方法,这类方法官方学名叫handller。handler的返回类型(这里是String)和参数类型(这里就有Model一个参数)有好多种。总之就是很灵活的,不像struts只能返回String。
问题:handler支持的返回类型和参数类型都有哪些?

3. 返回的"hello"将被看成是一个view名称,被viewResolver处理,根据设定(见操作三)在前面加上/WEB-INF/jsp/,在后面加上.jsp就成了/WEB-INF/jsp/hello.jsp。所以呢我们要创建这个文件。

[size=medium][b]操作五:创建视图/WEB-INF/jsp/hello.jsp[/b][/size]

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>${msg }</h1>
</body>
</html>


eclipse把jsp的默认encoding设置iso-8859什么的,特别讨厌。可以这样改成utf-8
Window->Preferences->Web->JSP Files->修改Encoding下拉项

[b][size=medium]操作六:测试[/size][/b]
测试前发现WebRoot下index.jsp还没有呢,先建一个吧。

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="hello">Hello example</a>
</body>
</html>


在浏览器中输入网址http://localhost:8080/Demo/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值