zoukankan      html  css  js  c++  java
  • 通过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全部代码如下:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <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">
     3     <servlet>
     4         <servlet-name>spring</servlet-name>
     5         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     6         <load-on-startup>1</load-on-startup>
     7     </servlet>
     8     <servlet-mapping>
     9         <servlet-name>spring</servlet-name>
    10         <url-pattern>/</url-pattern>
    11     </servlet-mapping>
    12     
    13     
    14     
    15     <!-- spring 过滤器 防止post乱码 -->
    16     <filter>
    17         <filter-name>CharacterEncodingFilter</filter-name>
    18         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    19         <init-param>
    20             <param-name>encoding</param-name>
    21             <param-value>utf-8</param-value>
    22         </init-param>
    23     </filter>
    24     <filter-mapping>
    25         <filter-name>CharacterEncodingFilter</filter-name>
    26         <url-pattern>/*</url-pattern>
    27     </filter-mapping>
    28 </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,代码如下:

     1 package net.zengzhiying.controller;
     2 
     3 
     4 
     5 import javax.servlet.http.HttpServletRequest;
     6 import javax.servlet.http.HttpServletResponse;
     7 import org.springframework.web.servlet.ModelAndView;
     8 import org.springframework.web.servlet.mvc.Controller;
     9 
    10 
    11 
    12 public class HelloWorldController implements Controller {
    13     @Override
    14     public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    15        ModelAndView mv = new ModelAndView();
    16        //添加数据
    17        mv.addObject("message", "Hello World!");
    18        //设置视图名,视图解析器会根据该名字解析到具体的视图页面
    19        mv.setViewName("hello");
    20        return mv;
    21     }
    22 }

      我们的控制器命名必须是XxxController,首字母大写;实现Controller接口则必须重写handleRequest方法来实现请求,返回视图;视图在/WEB-INF/jsp下,文件名为:hello.jsp,视图代码如下:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>Hello World</title>
     8 </head>
     9 <body>
    10 ${message}
    11 </body>
    12 </html>

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

      

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

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

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

     1 package net.zengzhiying.controller;
     2 
     3 import javax.servlet.http.HttpServletRequest;
     4 import javax.servlet.http.HttpServletResponse;
     5 
     6 import org.springframework.stereotype.Controller;
     7 import org.springframework.web.bind.annotation.RequestMapping;
     8 import org.springframework.web.servlet.ModelAndView;
     9 
    10 
    11 @Controller("PostTest")
    12 public class PostTest {
    13     
    14     @RequestMapping("/post.htm")
    15     public ModelAndView post() {
    16         return new ModelAndView("post");
    17     }
    18     
    19     
    20     @RequestMapping("/post.html")
    21     public ModelAndView post2() {
    22         return new ModelAndView("hello");
    23     }
    24     
    25     @RequestMapping("post3")
    26     public String post3() {
    27         return "hello";
    28     }
    29     
    30     
    31     @RequestMapping("/post")
    32     public ModelAndView post1(HttpServletRequest request, HttpServletResponse response) {
    33         String input = request.getParameter("name");
    34         ModelAndView mv = new ModelAndView();
    35         mv.addObject("input", input);
    36         mv.setViewName("post");
    37         return mv;
    38     }
    39     
    40 }

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

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

  • 相关阅读:
    自定义NHibernate映射类型
    IIS AppCreate子目录的错误(0x80020006)
    NHibernate 慎用IList
    開發記要 詭異的變量
    发布个jquery的绑定工具 jquery.bindTools 1.5
    Python学习笔记:jupyter notebook设置自动换行
    Python学习笔记:pandas透视表之pivot_table、pivot
    Python学习笔记:一道stack & pivot搞定的练习题
    Python学习笔记:描述性统计describe
    Python学习笔记:类别设置之category与set_categories
  • 原文地址:https://www.cnblogs.com/freeweb/p/5100309.html
Copyright © 2011-2022 走看看