第一个Spring程序-Annotation驱动

Title: 第一个Spring程序-Annotation驱动
Author: kagula
Date: 2016-4-22
Environment:
[1]JDK 1.7.x
[2]Eclipse-jee-mars-2-win32
[3]Tomcat7
[4]Spring 3.1.0

前言:

    几年没写J2EE,先写个Spring程序复习下,让自己有个概念。

    所以这里没有理论只有实践,开始前可以先跳到后面看下项目总体结构。


准备:

为Eclipse添加Tomcat7环境变量,
Eclise主菜单->[Window]->[Perferences]->[Server]->[Runtime Environment]


Eclipse配置JDK环境,因为默认指到JRE上,这一步可能不是必须的。
Eclipse主菜单->[Perferences]->[Java]->[Installed JREs]。


第一部分:maven项目

Step1:

Eclipse中新建maven项目"HelloWorld",存储位置为“D:\JWorkspace\HelloWorld”。

Artifact Id选 “maven-archetype-webapp”模板。
Group Id: com.kagula
Artifact Id: HelloWorld
Package: 自动更新为“ com.kagula . HelloWorld


Step2:
修改maven项目自动生成的pom.xml文件,pom.xml源码清单如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.kagula</groupId>
  <artifactId>HelloWorld</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>HelloWorld Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <packaging>war</packaging>  
  
  <properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	<spring.version>3.1.0.RELEASE</spring.version>
  </properties>
	
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
		<version>${spring.version}</version>
		<!-- <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> 
			</exclusion> </exclusions> -->
	</dependency>
	
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-tx</artifactId>
		<version>${spring.version}</version>
	</dependency>
	
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-test</artifactId>
		<version>${spring.version}</version>
	</dependency>
	
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-beans</artifactId>
		<version>${spring.version}</version>
	</dependency>
	
	
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aop</artifactId>
		<version>${spring.version}</version>
	</dependency>
	
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-orm</artifactId>
		<version>${spring.version}</version>
	</dependency>
	
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>${spring.version}</version>
	</dependency>
  </dependencies>
  
  <build>
    <finalName>HelloWorld</finalName>
     <plugins>  
       <!--  为了解决“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误需要下面的plugin -->
        <plugin>  
          <groupId>org.apache.maven.plugins</groupId>  
          <artifactId>maven-compiler-plugin</artifactId>  
          <version>2.3.2</version>  
          <configuration>  
              <source>1.6</source>  
              <target>1.6</target>  
          </configuration>  
        </plugin>  
    </plugins>  
  </build>
</project>

step3:

    修改好pom.xml后在Eclipse里右键项目名称弹出菜单[Maven]->[Update Project...] 如果pom.xml没有问题的话,就会把依赖的jar下载到本地。

    如果 pom.xml文件配置错误,Debug的时候,就不会自动部署项目到Server了。

第二部分:再写spring代码

Step1:
右键单击HelloWrold项目弹出菜单,添加"Tomcat7 Runtime"的依赖。
[Build Path]->[Configure Build Path]->[Libraries]->[Add Library]->
[Server Runtime]->[Apache Tomcat v7.0]

Step2:
在Java Resouces这个节点下,右键弹出菜单,添加class,
设置Package为“com.kagula”,Name为“LoginController”。
LoginController.java源代码清单如下。
package com.kagula;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping(value = "/user")
public class LoginController {

	@RequestMapping(value = "/login.do")
	public ModelAndView Login(@RequestParam("userID") String userID) {		
		//如果用户访问的时候不带userID参数,就不会映射到这个handler中。在Web browser中会提示400错误。
		ModelAndView mav = new ModelAndView();
		mav.setViewName("loginSuccess");
		mav.addObject("userID", userID);
		
		return mav;
	}
}



Step3:

src->main->webapp->WEB-INF节点下,修改web.xml,配置spring信息。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	version="3.0">
	
	<servlet>
	    <!-- 使用springmvc这个名称,会指向WEB-INF下的springmvc-servlet.xml配置文件   -->
		<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>*.do</url-pattern>
	</servlet-mapping>
</web-app>

src->main->webapp节点下,添加index.jsp,这个文件是为了测试Debug的时候项目有没有部署到Server.

<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

src->main->webapp->WEB-INF节点下,新建springmvc-servlet.xml文件,配置annotation驱动。

<?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.1.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context-3.1.xsd
         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
         
    <!-- Scan Controller Range -->  
	<context:component-scan base-package="com.kagula" />
	
	<!-- HandlerMapping -->  
    <bean  
        class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />  
  
    <!-- HandlerAdapter -->  
    <bean  
        class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
    
	<!-- enable spring mvc annotation driven-->
	<mvc:annotation-driven/>
	    
	<bean id="jspViewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>
	
</beans>


Step4:
src->main->webapp->WEB-INF节点下,新建jsp节点,添加loginSuccess.jsp文件,用来测试视图mapping。
<%@ 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>Hello,World</title>
</head>
<body>
	<p>Login Success! ${userID}</p>
</body>
</html>



Step5:
然后在Eclipse中要调试代码还需要添加“ Maven Dependency”,否则Tomcat找不到依赖包。
右键单击项目名称->[properties]->[Deployement Assembly]->[Add]->
[Java Build Path Entries]->[Maven Dependencies]->[Finish].


Step6:
Eclipse-Markers窗口
出现类似“ Cannot change version of project facet Dynamic web module to 2.5”错误
配置项目->[Properties]->[Project Facets]->[Dynamic Module]参数,极其相关参数。


Final Step:测试
如果xml配置正确的话,启动Tomcat会出现下面的提示
信息: Mapped "{[/user/login.do],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.web.servlet.ModelAndView com.kagula.LoginController.Login(java.lang.String)
然后用下面的地址访问。
http://localhost:8080/ HelloWorld/user/login.do?userID=aaa


路径prefix为 HelloWorld是因为我们的项目名称为 HelloWorld,否则path不会被我们的Spring处理。
pom.xml中的packing属性必须为war,否则就不会作为web app自动在Eclipse中部署,也就是说无法调试程序。


参考资料[2]可以建立各种url同controller之间的映射关系。


本HelloWorld项目主要有六个文件组成,包括index.jsp文件。
参考控制流排序,依次为以下五个重要文件(index.jsp文件除外)

pom.xml  web.xml  springmvc-servlet.xml  LoginController.java  loginSuccess.jsp

目录树结构参考下图



参考资料

[1]《java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet》
http://stackoverflow.com/questions/11227395/java-lang-classnotfoundexception-org-springframework-web-servlet-dispatcherserv
[2]《@RequestMapping 用法详解之地址映射(转)》

http://www.cnblogs.com/qq78292959/p/3760560.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kagula086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值