上一篇刚建立了一个简单的Spring项目,其实Spring MVC是一个和Struts2一样的基于MVC设计模式的web框架,并且继承了MVC的优点,是基于请求驱动的轻量级的web框架,spring mvc可以认为是spring其中的一个web扩展,小巧灵活,但是功能强大,可以直接传入ServletAPI使用起来开发会比较简单顺手,并且通过配置注解的方式,很轻松的对web资源进行管理,提高了开发的速度和应用程序的可维护性

  使用spring mvc可以设计出干净的web层和薄薄的web层;目前非常流行的就是SSM的这种整合,就是Spring + Spring MVC + MyBatis的结合,这样更适合复杂的企业级web应用,下面开发一个简单的Spring MVC应用

  需要的jar包和Spring一样,直接将上篇Spring配置需要的jar包拷贝过去即可,并且以后整合的时候也不需要额外添加jar包了,更简单

  首先是配置web.xml原理就是在web容器初始化时加载配置,让DispatcherServlet过滤器过滤浏览器发出的请求,从而启动Spring MVC进行处理,web.xml全部代码如下:

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" metadata-complete="true" version="3.1">
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> <!-- spring 过滤器 防止post乱码 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

  后面使用了一个spring内置的过滤器,为了防止post请求出现乱码的情况,这样可以不用request和response设置编码了,但务必保证源代码文件之间编码的统一性,最好还是建议通过自定义过滤器设置编码

  然后在web.xml同目录下,也就是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: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/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <context:component-scan base-package="net.zengzhiying.controller" /> <!-- 模板存放位置 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean> <!-- 请求URL处理 -->
<bean name="/hello" class="net.zengzhiying.controller.HelloWorldController"/> </beans>

  首先,上面两个<bean>是必须配置的,<context:>是控制器包存放的位置,模板存放在/WEB-INF下,只能由控制器去渲染,浏览器是无法访问的,最下面一个<bean>就是请求的资源路由,例如这里就是:http://localhost:8080/项目名称/hello

  然后我们建立一个控制器,一个控制器只处理一个请求,必须实现Controller接口,位置必须是org.springframework.web.servlet.mvc.Controller,代码如下:

 package net.zengzhiying.controller;

 import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller; public class HelloWorldController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
ModelAndView mv = new ModelAndView();
//添加数据
mv.addObject("message", "Hello World!");
//设置视图名,视图解析器会根据该名字解析到具体的视图页面
mv.setViewName("hello");
return mv;
}
}

  我们的控制器命名必须是XxxController,首字母大写;实现Controller接口则必须重写handleRequest方法来实现请求,返回视图;视图在/WEB-INF/jsp下,文件名为:hello.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>Hello World</title>
</head>
<body>
${message}
</body>
</html>

  这样就可以正常完成请求了,现在启动服务器访问页面如下:

  

  我们现在有个疑问,一个控制器只能写一个方法确实太局限了,我们如果想处理多个请求怎么办,其实我们更常用的就是在一个控制器里面写多个方法,这样将功能模块分开,更加容易维护,除了配置spring-servlet.xml文件外,我们还可以使用,Spring3.1之后的新特性这个特性是和Servlet3.0兼容的,那就是使用注解的方式来进行定义,更加简单了,首先我们在spring-servlet.xml添加配置引入注解:

 <!-- spring 3.1之后由RequestMappingHandlerAdapter和RequestMappingHandlerMapping代替 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>

  现在我们就可以使用注解了,上面的Context标签其实就是指定我们注解所生效的包的,现在我们建立一个新的控制器,这时候就不用实现Controller接口了,这个时候控制器位置是:org.springframework.stereotype.Controller,代码如下:

 package net.zengzhiying.controller;

 import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; @Controller("PostTest")
public class PostTest { @RequestMapping("/post.htm")
public ModelAndView post() {
return new ModelAndView("post");
} @RequestMapping("/post.html")
public ModelAndView post2() {
return new ModelAndView("hello");
} @RequestMapping("post3")
public String post3() {
return "hello";
} @RequestMapping("/post")
public ModelAndView post1(HttpServletRequest request, HttpServletResponse response) {
String input = request.getParameter("name");
ModelAndView mv = new ModelAndView();
mv.addObject("input", input);
mv.setViewName("post");
return mv;
} }

  看这个控制器我们会发现Spring MVC注解作用其实非常强大,我们首先通过@Controller对控制器进行注解,然后通过@RequestMapping进行注解,要访问的路由也可以自由定义,配合数组和通配符可以实现更多样化更强大的处理功能;返回视图可以是ModelAndView类型的,也可以简单的返回String类型的,直接以字符串返回文件名就可以了,并且在参数里可以直接使用HttpServletRequest、HttpServletResponse等ServletAPI可以用Servlet的方式直接编写,难度也降低了不少

  以上就是基本的spring mvc配置的过程,总体来说spring mvc是一个非常简洁优雅的框架,使用Spring MVC开发web应用同样是个不错的选择!

通过eclipse配置Spring MVC项目的更多相关文章

  1. 改造继续之eclipse集成tomcat开发spring mvc项目配置一览

    在上一篇的环境配置中,你还只能基于maven开发一个javase的项目,本篇来看如果开发一个web项目,所以还得配置一下tomcat和spring mvc. 一:Tomcat安装 在.net web开 ...

  2. Eclipse Maven构建Spring MVC项目

    工作中项目开发使用Maven管理项目的构建.打包.编译,框架採用的是Spring MVC框架,而且实现了多模块.多项目的管理.自己也简单的參与了架构的设计.对于刚開始学习的人来说,使用Maven构建项 ...

  3. Java Spring MVC项目搭建(二)——项目配置

    1.站点配置文件web.xml 每一个Spring MVC 项目都必须有一个站点配置文件web.xml,他的主要功能吗....有一位大哥已经整理的很好,我借来了,大家看看: 引用博客地址: http: ...

  4. Spring MVC 项目搭建 -6- spring security 使用自定义Filter实现验证扩展资源验证,使用数据库进行配置

    Spring MVC 项目搭建 -6- spring security使用自定义Filter实现验证扩展url验证,使用数据库进行配置 实现的主要流程 1.创建一个Filter 继承 Abstract ...

  5. 使用JavaConfig和注解方式实现零xml配置的Spring MVC项目

    1. 引言 Spring MVC是Spring框架重要组成部分,是一款非常优秀的Web框架.Spring MVC以DispatcherServlet为核心,通过可配置化的方式去处理各种web请求. 在 ...

  6. 如何在Web项目中配置Spring MVC

    要使用Spring MVC需要在Web项目配置文件中web.xml中配置Spring MVC的前端控制器DispatchServlet <servlet> <servlet-name ...

  7. IntelliJ IDEA上创建maven Spring MVC项目

    IntelliJ IDEA上创建Maven Spring MVC项目 各软件版本 利用maven骨架建立一个webapp 建立相应的目录 配置Maven和SpringMVC 配置Maven的pom.x ...

  8. maven Spring MVC项目

    IntelliJ IDEA上创建maven Spring MVC项目 各软件版本 利用maven骨架建立一个webapp 建立相应的目录 配置Maven和SpringMVC 配置Maven的pom.x ...

  9. Intellij IDEA创建spring MVC项目

    相信各位未来的Java工程师已经接触到了spring MVC这个框架的强大之处,看了很多的教程,都是eclipse的,在intellij IDEA这个强大的工具面前居然不能很顺畅的,今天我就带领大家用 ...

随机推荐

  1. html中设置锚点定位的几种常见方法(#号定位)

    在html中设置锚点定位我知道的有几种方法,在此和大家分享一下: 1.使用id定位: <a href="#1F">锚点1</a> <div id=&q ...

  2. MyEclipse------黑科技

    自动计算器(+,-,*,/) <form method="post" oninput="o.value = parseInt(a.value) + parseInt ...

  3. Ubuntu14.04编译安装mysql5.6.26

    Ubuntu14.04编译安装mysql5.6.26 (1)安装编译源码需要的包 sudo apt-get install make cmake gcc g++ bison libncurses5-d ...

  4. Kd-tree算法原理

    参考资料: Kd Tree算法原理 Kd-Tree,即K-dimensional tree,是一棵二叉树,树中存储的是一些K维数据.在一个K维数据集合上构建一棵Kd-Tree代表了对该K维数据集合构成 ...

  5. C/S B/S 及WEB工作原理

     一.C/S B/S区别 (http://wenku.baidu.com/link?url=e8bxaqz_lYCXws6TlDRJEq1qsLumNTBhr3Es6eA1ZuhHhq9FZGbVgo ...

  6. C# 三种实现抖屏的方式

    //int a = -2; //this.BringToFront(); //for (int i = 0; i < 20; i++) //{ // a = -a; // this.Locati ...

  7. NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool

    错误:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/pool/impl ...

  8. 如何用sqlyog实现远程连接mysql

    1,sqlyog客户端,用root用户远程链接mysql时,提示“访问被拒绝”,在网上搜索了一下原因. 原来是mysql没有授权其远程链接,所以你只能在客户端里面链接. 怎么解决呢? 原表数据 mys ...

  9. JavaScript 最佳实践

    这个文档是基于JavaScript社区众多开发者的意见和经验,在开发JavaScript代码上的最佳实践和首选的方案的明细表.因为这是一个推荐的表而非原则性的方案,经验丰富的开发者可能对下面的表达会有 ...

  10. SELinux入门

    导读 如果你在之前的Linux生涯中都禁用或忽略了SELinux,这篇文章就是专门为你写的:这是一篇对存在于你的Linux桌面或服务器之下的SELinux系统的介绍,它能够限制权限,甚至消除程序或守护 ...