一、关于开发环境

  1. Eclipse IDE for Java EE Developers
  2. Jdk 1.7 (32位版本)
  3. SpringMVC 4.1.5.RELEASE
  4. apache-tomcat-7.0.53
  • Eclipse:官网(http://www.eclipse.org/downloads/)。使用Eclipse IDE for Java EE Developers版本更合适,自行下载安装。
  • JDK,官网(http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html#javasejdk)。
  • SpringMVC4,官网(http://maven.springframework.org/release/org/springframework/spring/4.1.5.RELEASE/),实际上http://maven.springframework.org/release/org/springframework/ 这个地址可以下载spring的很多东西。
  • Tomcat,官网(http://tomcat.apache.org/download-70.cgi)

二、关于开发文档

  1. 官方好多文档,但都是英文的。所以多学点英语,有好处。
  2. 俺英语不好,不说了,一直百度。

三、写在前面

调试时,请使用Tomcat来运行代码,使用自带的J2EE Preview将出现很多问题(困扰了我很长时间才发现的,原因不明,未解决),错误如下

2015-03-17 11:18:20.372:INFO:oejs.Server:jetty-8.1.14.v20131031
2015-03-17 11:18:21.006:WARN:oejw.StandardDescriptorProcessor:Could not instantiate listener org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)

以上说是没找到类,所以我把spring的jar加到classpath后,解决了这个问题,但又出现以下错误提示

2015-03-17 11:21:44.450:INFO:oejs.Server:jetty-8.1.14.v20131031
2015-03-17 11:21:45.128:INFO:/hello1:Initializing Spring root WebApplicationContext
三月 17, 2015 11:21:45 上午 org.springframework.web.context.ContextLoader initWebApplicationContext
信息: Root WebApplicationContext: initialization started
三月 17, 2015 11:21:45 上午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing Root WebApplicationContext: startup date [Tue Mar 17 11:21:45 CST 2015]; root of context hierarchy
三月 17, 2015 11:21:45 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
三月 17, 2015 11:21:45 上午 org.springframework.web.context.ContextLoader initWebApplicationContext
严重: Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from ServletContext resource [/WEB-INF/dispatcher-servlet.xml]; nested exception is org.springframework.beans.FatalBeanException: Class [org.springframework.context.config.ContextNamespaceHandler] for namespace [http://www.springframework.org/schema/context] does not implement the [org.springframework.beans.factory.xml.NamespaceHandler] interface
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:414)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from ServletContext resource [/WEB-INF/dispatcher-servlet.xml]; nested exception is org.springframework.beans.FatalBeanException: Class [org.springframework.context.config.ContextNamespaceHandler] for namespace [http://www.springframework.org/schema/context] does not implement the [org.springframework.beans.factory.xml.NamespaceHandler] interface

这个错误百度了很多方法,但都不能解决。排除了代码的问题,最后发现使用tomcat运行程序时是正常的。

四、步骤

  1. 新建一个动态网页工程,File-New-Dynamic Web Project,如下图:
  2. 在弹出的窗口中,输入工程名hellomvc,并选择一个位置存置项目中的文件,如下图配置后,点Finish创建工程文件,Eclipse会自动帮忙生成相关的文件夹
  3. 将Spring MVC相关的包(另外需要从http://commons.apache.org/proper/commons-logging/download_logging.cgi下载commons-logging-1.2.jar)拷贝到WebContent\WEB-INF\lib中,并按F5刷新列表,或在工程名hellomvc上右键点Refresh。
  4. 新建一个包com.web.controller,在src文件夹上右键,new-package,包名为com.web.controller
  5. 新建一个类helloController放在包com.web.controller中。这是mvc中的c,当访问网址时,spring mvc将先解析网址后转到这里执行相应的controller
    package com.web.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam; @Controller
    public class helloController {
    @RequestMapping("/hello")
    public String hello(@RequestParam(value = "name", required = false, defaultValue = "World") String name,
    Model model) {
    model.addAttribute("name", name);
    return "helloworld"; // 通过这里跳转到helloworld.jsp
    }
    }
  6. 新建一个WEB-INF下新建一个views文件夹,用于存储jsp网页。并将新建一个helloworld.jsp放在views中
    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <!doctype html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Spring MVC Tutorial</title>
    </head>
    <body>
    <h1>Hello ${name}</h1>
    </body>
    </html>
  7. 编辑web.xml,因为程序启动是从这个配置开始的,我们需要让默认的配置转向springmvc的配置
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.5"
    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_2_5.xsd"> <display-name>Spring MVC 测试</display-name> <servlet>
    <servlet-name>mydispatcher</servlet-name>
    <servlet-class>
    org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet> <servlet-mapping>
    <servlet-name>mydispatcher</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping> <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/mydispatcher-servlet.xml</param-value>
    </context-param> <listener>
    <listener-class>
    org.springframework.web.context.ContextLoaderListener
    </listener-class>
    </listener>
    </web-app>

    这里我们创建的servlet名为mydispatcher,记得springmvc的配置必须一致,格式为[servlet名称]-servlet.xml;这里我的配置名为mydispatcher-servlet.xml

  8. 新建一个mydispatcher-servlet.xml放在WEB-INF中,因为在web.xml中配置了在这个路径。这是springmvc的配置。
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <context:component-scan base-package="com.web.controller" />
    <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
    <value>/WEB-INF/views/</value>
    </property>
    <property name="suffix">
    <value>.jsp</value>
    </property>
    </bean>
    </beans>

    其中<context:component-scan base-package="com.web.controller" />就表示让springmvc扫描包com.web.controller所有相关的controller,我们新建的helloController.java就是此类东西。<value>/WEB-INF/views/</value>是让controller在views文件夹找相关的文件,这里与上面的第5点相关联。

五、调试运行

  1. 第一次运行时,点击运行按钮,选择 Run on Server
  2. 在弹出来的窗口中选择Tomcat v7.0 Server,并勾选下方的Always use this server when running this project,这样eclipse会自动帮你建立tomcat的配置文件。
  3. 点finish运行,在ie中输入http://127.0.0.1:8080/hellomvc/hello或http://127.0.0.1:8080/hellomvc/hello?name=lin557,效果如下
  4. 配置tomcat后出现HttpServlet was not found on the Java错误时,可以参考http://jingyan.baidu.com/article/f79b7cb34f40569144023ef9.html进行处理。
  5. 目录结构

从零开始学JAVA(07)-使用SpringMVC4写helloworld的更多相关文章

  1. 从零开始学JAVA(09)-使用SpringMVC4 + Mybatis + MySql 例子(注解方式开发)

    项目需要,继续学习springmvc,这里加入Mybatis对数据库的访问,并写下一个简单的例子便于以后学习,希望对看的人有帮助.上一篇被移出博客主页,这一篇努力排版整齐,更原创,希望不要再被移出主页 ...

  2. 从零开始学JAVA(08)-使用SpringMVC4 Restful 风格引用静态文件 css/js/png

    在写完helloworld后想给网页加点样式(*.css),结果怎么也显示不了,百度了很多种方法后试行尝试,试验成功并记录下来,方便以后查看. 时隔两年,继续学习JAVA,太久没学了,忘记得差不多,还 ...

  3. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  4. 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)

    硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...

  5. 从零开始学 Java - 我放弃了 .NET ?

    这不是一篇引起战争的文章 毫无疑问,我之前是一名在微软温暖怀抱下干了近三年的 .NET 开发者,为什么要牛(sha)X一样去搞 Java 呢?因为我喜欢 iOS 阿!哈哈,开个玩笑.其实,开始学 Ja ...

  6. 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)

    从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...

  7. 从零开始学 Java - log4j 项目中的详细配置

    你还会用笔来写字么 我是不怎么会了,有时候老是拿起笔之后不知道这个字怎么写,这时候就会拿起手机去打出来:有时候还会写出来这个字之后越看越不像,这时候就开始怀疑自己的能力了:有时候写出来了一大堆字之后, ...

  8. 从零开始学 Java - Spring AOP 实现用户权限验证

    每个项目都会有权限管理系统 无论你是一个简单的企业站,还是一个复杂到爆的平台级项目,都会涉及到用户登录.权限管理这些必不可少的业务逻辑.有人说,企业站需要什么权限管理阿?那行吧,你那可能叫静态页面,就 ...

  9. 从零开始学 Java - Spring 一主多从、多主多从 数据库配置

    待会苹果要开发布会 我写完这篇文章就准备去看发布会了,因为我买了好几包瓜子和啤酒.由于苹果的保密做的越来越差劲,该曝光的信息差不多全部曝光了,我们这种熬夜看发布会的只不过是让这些信息更加真实,或者说是 ...

随机推荐

  1. 如何让你的项目同时支持go vendor和go module

    目录 如何让你的项目同时支持go vendor和go module 1. go module简介 2. 使用go mod命令管理项目 2.1 初始化环境 2.2 构建 3. 保持兼容性 4. 使用go ...

  2. Spring Boot 学习系列(06)—采用log4j2记录日志

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 为什么选择log4j2 log4j2相比于log4j1.x和logback来说,具有更快的执行速度.同时也支 ...

  3. python--类的约束,异常处理,MD5加密,日志处理logging模块

    1.类的约束 在开发中,如果项目经理需要对类进行约束,可以有两种方式 1. 对子类进行约束 Base: #对子类进行约束,必须重写这个方法 # 在工作中发现了NotImplementedError之后 ...

  4. Android 音视频开发入门指南

    Android 音视频从入门到提高 —— 任务列表 http://blog.51cto.com/ticktick/1956269(以这个学习为基础往下面去学习) Android 音视频开发学习思路-- ...

  5. WORD wFormatTag; /* format type */ //设置波形声音的格式

    0x0000   Microsoft   Unknown   Wave   Format       0x0001   Microsoft   PCM   Format       0x0002    ...

  6. parseInt/类型转换/字符串

    1.pa'rseInt整型 1.1parseInt必须以数字开头的 var topVal = parseInt("28px"); console.log(topVal); 1.2非 ...

  7. [文文殿下]基本的DP技巧

    . 二进制状态压缩动态规划 对于某些情况,如果题目中所给的限制数目比较小,我们可以尝试状态压缩动态规划.例如,题目中给出数据范围\(n<=20\),这个一般情况下是一个状压DP的提示. 状态压缩 ...

  8. zTree第四章,异步加载,后端

    后端 ------------------------------------------------------------------------------------------------- ...

  9. linux系统无法启动,提示give root password for maintenance错误

    电脑的虚拟机安装的是centos6.2操作系统,今天打开虚拟机时候,提示 give root password for maintenance (or type control-D to contin ...

  10. Instant low voltage or power off to make computer power burn down

    严重则可造成硬盘直接报废! 原理:瞬间低压或者断电,滤波电容上存储的电能已经被使用,此时再瞬间供电则会重新对电容充电,而限流电阻还没有恢复到保护状态,于是会产生很大的冲击电流,从而导致了全桥元件或保险 ...