通过eclipse配置Spring MVC项目
上一篇刚建立了一个简单的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项目的更多相关文章
- 改造继续之eclipse集成tomcat开发spring mvc项目配置一览
在上一篇的环境配置中,你还只能基于maven开发一个javase的项目,本篇来看如果开发一个web项目,所以还得配置一下tomcat和spring mvc. 一:Tomcat安装 在.net web开 ...
- Eclipse Maven构建Spring MVC项目
工作中项目开发使用Maven管理项目的构建.打包.编译,框架採用的是Spring MVC框架,而且实现了多模块.多项目的管理.自己也简单的參与了架构的设计.对于刚開始学习的人来说,使用Maven构建项 ...
- Java Spring MVC项目搭建(二)——项目配置
1.站点配置文件web.xml 每一个Spring MVC 项目都必须有一个站点配置文件web.xml,他的主要功能吗....有一位大哥已经整理的很好,我借来了,大家看看: 引用博客地址: http: ...
- Spring MVC 项目搭建 -6- spring security 使用自定义Filter实现验证扩展资源验证,使用数据库进行配置
Spring MVC 项目搭建 -6- spring security使用自定义Filter实现验证扩展url验证,使用数据库进行配置 实现的主要流程 1.创建一个Filter 继承 Abstract ...
- 使用JavaConfig和注解方式实现零xml配置的Spring MVC项目
1. 引言 Spring MVC是Spring框架重要组成部分,是一款非常优秀的Web框架.Spring MVC以DispatcherServlet为核心,通过可配置化的方式去处理各种web请求. 在 ...
- 如何在Web项目中配置Spring MVC
要使用Spring MVC需要在Web项目配置文件中web.xml中配置Spring MVC的前端控制器DispatchServlet <servlet> <servlet-name ...
- IntelliJ IDEA上创建maven Spring MVC项目
IntelliJ IDEA上创建Maven Spring MVC项目 各软件版本 利用maven骨架建立一个webapp 建立相应的目录 配置Maven和SpringMVC 配置Maven的pom.x ...
- maven Spring MVC项目
IntelliJ IDEA上创建maven Spring MVC项目 各软件版本 利用maven骨架建立一个webapp 建立相应的目录 配置Maven和SpringMVC 配置Maven的pom.x ...
- Intellij IDEA创建spring MVC项目
相信各位未来的Java工程师已经接触到了spring MVC这个框架的强大之处,看了很多的教程,都是eclipse的,在intellij IDEA这个强大的工具面前居然不能很顺畅的,今天我就带领大家用 ...
随机推荐
- Jquery-控制table的奇偶数色列
css代码 <style> .even{background:#FFF38F;} .odd{background:#FFFFEE;} .selected{background:#FF990 ...
- 【kAri OJ】621. 廖神的树
时间限制 3000 ms 内存限制 65536 KB 题目描述 廖神和男神在植树节的时候准备玩一个奇怪的游戏,他们现在有一个被分割成n*n个格子的矩形土地,他们现在准备往这个地里种树,但这个种树游戏必 ...
- OI历程日常
之前的一直没来的及记录,表示从今往后连载 10.29 蒟蒻正在紧张的备战NOIP 整改了一下faebdc学长的模拟题,T1直接可以暴力破解,T2二分,O(nlog^2n)开始二分写残了,调了半天唉,现 ...
- Erlang练习题----shopping
直接就上代码了: -module(shop). -export([cost/1,total/1]). cost(orange) -> 5; cost(newspaper) -> 8; co ...
- HD1561The more, The Better(树形DP+有依赖背包)
The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- JavaScript模块化学习基础
http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 一.原始写法 模块就是实现特定功能的一组方法. 不同函数简单放在一起就算一个 ...
- 初学structs2,简单配置
一.structs2-demo1项目下新建structs.xml文件,文件名必须是structs 二.package节点配置及其子节点配置 <!--name:单纯给包起个名字,保证和其他包不重名 ...
- 使用Redis SETNX 命令实现分布式锁
基于setnx和getset http://blog.csdn.net/lihao21/article/details/49104695 使用Redis的 SETNX 命令可以实现分布式锁,下文介绍其 ...
- WinsockExpert+NC抓包上传之拿WEBSHELL
知识补充: nc上传漏洞在原理上同动网上传漏洞一样,都是利用计算机在读取字符串时,遇到'\0'(00)时,认为字符串结束了,从而丢掉后面的字符串,正如unicode编码特性一样,可被人利用,尽管在这里 ...
- Java操作xml文件
Bbsxml.java public class Bbsxml { private String imgsrc; private String title; private String url; p ...