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
Eclise主菜单->[Window]->[Perferences]->[Server]->[Runtime Environment]
Eclipse配置JDK环境,因为默认指到JRE上,这一步可能不是必须的。
Eclipse主菜单->[Perferences]->[Java]->[Installed JREs]。
Group Id: com.kagula
Artifact Id: HelloWorld
Package: 自动更新为“ com.kagula . HelloWorld”
Step2:
修改maven项目自动生成的pom.xml文件,pom.xml源码清单如下
右键单击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源代码清单如下。
Step3:
src->main->webapp节点下,添加index.jsp,这个文件是为了测试Debug的时候项目有没有部署到Server.
Step4:
src->main->webapp->WEB-INF节点下,新建jsp节点,添加loginSuccess.jsp文件,用来测试视图mapping。
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文件除外)
[1]《java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet》
http://stackoverflow.com/questions/11227395/java-lang-classnotfoundexception-org-springframework-web-servlet-dispatcherserv
[2]《@RequestMapping 用法详解之地址映射(转)》
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