`
icarusliu
  • 浏览: 238087 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring配置及简单实例

阅读更多

 

配置

1. Web.xml

a. ContextLoaderListener:

配置该选项后,服务器将会自动去WEB-INF目录下面查找applicationContext.xml文件来加载Spring的相关配置;也可以使用context-param来指定其它位置,如classpath,表示的是在源文件目录下去查找applicationContext.xml文件。当然也可以指定其它名称的配置文件,甚至可以同时加载多个配置文件(当配置的Bean很多的时候,很有必要将不同作用的Bean分别在不同的配置文件中进行配置,在这种情况下多配置文件就很有用处)。

b. Context-param:

在指定的位置去查找Spring的相关配置

c. ServletServlet-mapping

众所周知,在WEB开发中,Servlet用于处理浏览器的请求;因此,如果需要Spring来处理Servlet请求,就需要进行相关的配置,来让Spring加载与MVC相关的Bean

当配置完这两个选项后,有新的浏览器请求到来时,如果发现请求格式符合要求(如接下来的配置文件中配置的以.do结束的请求,当然也可以配置成其它名称),就会跳转到SpringdispatcherServlet中进行统一处理,然后由其寻找到合适的Controller中进行处理。也就是说,dispatcherServlet相当于一个转发器,将所有交给Spring处理的请求正确的分发到不同的Controller中去。

当配置springmvcservletservlet-mapping后,服务器启动时将会去WEB-INF目录下寻找MVC的配置文件进行加载。寻找的规则就是配置的servlet的名称 + -servlet.xml,如配置的名称一般是springmvc,则查找的配置文件的名称就会是springmvc-servlet.xml

 

具体的配置文件如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
    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">
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
 
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
 
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>       
    </context-param>
 
    <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   </servlet>
 
    <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>
 

 

当然,也可以将所有的MVC配置项都配置在同一个配置文件applicationContext.xml中去:

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
    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">
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
 
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
 
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>       
    </context-param>
 
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>       
        </init-param>
    </servlet>
 
    <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>
 

 

 

2. ApplicationContext.xml

a. Context:annotation-config

表明Spring是基于注解来进行配置的

b. Context:cpmponent-scan

指定需要扫描的包,也可以指定相关的过滤条件来指定需要装载的或者不需要装载的Bean

Spring将会去所配置的包中扫描那些被注解的Bean@Controller/@Service等注解的Class。注意一般在applicationContext.xml中将Controller的注解忽略,而是在MVC的配置文件中单独进行Controller相关的扫描装配。

这样做的好处就是,用户可以配置多个DispatcherServlet,每个对应于一个配置文件,相互之间配置的Controller不被干扰。这样可以方便地将不同作用的Controller分组存放,修改与更新不影响其它组的Controller。 

 

<?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:mvc="http://www.springframework.org/schema/mvc"
    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/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
 
    <context:annotation-config/>
    <context:component-scan base-package="com.liuqi.web.webtest">
        <context:exclude-filter type="annotation" expression="org.springframework.web.servlet.mvc.Controller"/>          
    </context:component-scan>
</beans>
 

 

3. Springmvc-servlet.xml

a. Context:annotation-configapplicationContext.xml中的配置意义是一样的。

b. viewResolver

指定视图渲染器,以一个示例来说明其作用:

 

@RequestMapping("/aaa")
   public String test() {
      System.out.println("The test controller!");
     
      return "test";
}
 

 

如上述代码,其返回的是一个test的字符串,Spring将会根据viewResolver中配置的相关项来进行组合,加上前缀与后缀,最终得到/WEB-INF/jsp/test.jsp这样一个地址,因此,该Servlet返回后浏览器将会跳转到该页面去。

因此,viewResolver的作用就是指定Servlet返回时跳转到的页面的前缀与后缀。

需要注意的是,在配置文件中指定的前缀是/web-inf/jsp/,我们知道这个目录下的东西是无法直接通过输入地址来访问的,这样也能够在一定的程度上保证网站的安全性:在这个目录下的页面只能通过Servlet来进行访问,这就保证了所有对页面的该都能在我们的监控下进行,当然再需要添加其它的功能如访问日志的记录等就要简单的多。

 <?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:mvc="http://www.springframework.org/schema/mvc"
    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/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
 
    <context:annotation-config/>
    <context:component-scan base-package="com.liuqi.web.webtest">
            <context:include-filter type="annotation" expression="org.springframework.web.servlet.mvc.Controller"/>          
    </context:component-scan>
   
    <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>
 

4. 完整的配置文件就这样,以下是一个相关的Controller

 

package com.liuqi.web.webtest;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 
@Controller
@RequestMapping("test")
public class ControllerTest {
    @RequestMapping("/aaa")
    public String test() {
        System.out.println("The test controller!");
       
        return "test";
    }
}
 

 

 

以下对Controller的编写进行说明:

1)  requestMapping:用于指定该Controller的请求路径;有两种用法:

a. 用于类文件头

b. 用于各个方法上

用于方法上时,如果此时未在类上进行相关指定,表明这个方法将会处理指定名称+.do的请求,如aaa.do的请求;如类上指定的RequestMapping,如指定的名称是test,那么这个方法将会处理/test/aaa.do的请求。

因此,用于类上时,将会为该类里面所有处理请求的Controller方法添加一个共同的前缀——这跟文件夹类似,所有同一类的Controller,都可以包含一个相同的目录与一个不同的名称,这样这一类的Controller就可以与其它类的Controller区别开来。

 

2) 在方法中指定参数

在方法中可以指定多个参数,如HttpServletRequestHttpServletResponseHttpSession等。可以指定其中一个或者多个或者0个。

 

@RequestMapping("/bbb")
    public String bbb(HttpServletRequest request, HttpServletResponse response,
            PrintWriter out, HttpSession session) {
        System.out.println("The test of bbb!");
       
        return "bbb";
    }
 

 

 

3) 建立AjaxController

那么怎么处理Ajax请求呢?使用返回类型为void类型的方法即可:

 

@RequestMapping("/c")
    public void cajax(PrintWriter out) {
       
    }
 

 

 

4) 传递参数

另外,还有一点很重要的,如何向Controller传递参数?主要有两种方式:

a. 比较传统的方式:使用HttpServletRequest来传递参数,也就是说在URL中直接附带参数:

 

    @RequestMapping("/bbb")
    public String bbb(HttpServletRequest request, HttpServletResponse response,
            PrintWriter out, HttpSession session) {
        String temp = request.getParameter("a");
        System.out.println(temp);
       
        System.out.println("The test of bbb!");
       
        return "bbb";
    }
 

 

访问时,可以使用以下地址进行访问:

http://localhost:8080/webtest/test/bbb.do?a=test

 

b. RequestParam

 

  @RequestMapping("/aaa")
    public String test(@RequestParam String test) {
        System.out.println("The test controller!");
        System.out.println(test);
       
        return "test";
    }
 

 

访问地址:

http://localhost:8080/webtest/test/aaa.do?test=test

c. PathVariable

 

@RequestMapping("/{id}/{p1}/{p2}/c")
    public void cajax(PrintWriter out,
            @PathVariable String id,
            @PathVariable String p1,
            @PathVariable String p2) {
        System.out.println(id);
        System.out.println(p1);
        System.out.println(p2);
    }
 

 

访问地址:

http://localhost:8080/webtest/test/test/test1/test2/c.do

 

d. 直接使用参数:该方式是最为简单的一种方式,但缺点就是不能获取get方式传递的参数。

 

@RequestMapping("/d")
    public void test(int id, String name) {
        System.out.println(id);
    }

 

完整示例见附件,运行时需要自己添加上Spring所使用的那些包。

 

分享到:
评论

相关推荐

    简单spring aop 例子

    现在,我们来看如何创建一个简单的Spring AOP例子: 1. **定义切面(Aspect)**:切面是包含通知(Advice)和切入点(Pointcut)的类。通知定义了要执行的逻辑,切入点定义了何时执行。例如,我们可以创建一个名为`...

    spring的aop简单例子

    这个简单例子将帮助我们理解AOP的基本概念和如何在Spring框架中实现它。 首先,我们要知道AOP的核心概念:切面、通知、连接点、切点、目标对象和代理。切面是包含横切关注点(如日志记录、事务管理等)的模块化组件...

    Spring例子

    在Spring MVC中,Controller通常是一个简单的Java类,使用了`@Controller`注解来标识。它包含了处理HTTP请求的方法,这些方法通常使用`@RequestMapping`注解来定义请求映射。例如,一个处理获取医院叫号信息的请求的...

    spring 的简单例子工程适合初学者

    这个"spring 的简单例子工程"为初学者提供了一个全面的起点,涵盖了 Spring 框架中与数据库交互的基础知识,包括 JdbcTemplate 的使用、DataSource 配置,以及 Spring MVC 和注解驱动开发的基本概念。通过这个项目,...

    spring的一个简单的例子

    例如,一个简单的Spring配置文件(如`applicationContext.xml`)会定义Bean的实例化和它们之间的依赖关系。 6. **lib 文件夹**: 这个文件夹通常存储项目所依赖的外部库,比如Spring框架的JAR文件,以及其他可能...

    spring一些简单的例子

    在这个名为"spring一些简单的例子"的压缩包中,你可能会找到一系列帮助初学者理解并掌握Spring框架基础知识的代码示例。以下是一些相关的知识点和详细说明: 1. **依赖注入(Dependency Injection)**:Spring的...

    spring整合jpa简单实例

    **Spring 整合 JPA 简单实例** 在现代的Java开发中,Spring框架与JPA(Java Persistence API)的结合使用已经成为了一个常见的实践,它简化了数据库操作,提供了对象关系映射(ORM)的功能。JPA是Java EE的一部分,...

    spring+mybatis 简单实例图书管理系统

    【标题】"Spring+MyBatis 简单实例图书管理系统"揭示了这是一个结合了Spring框架和MyBatis持久层框架的项目实例,主要用于管理图书数据。在IT领域,Spring和MyBatis是两个非常流行的开源Java技术,它们在企业级应用...

    Spring最简单工程例子

    本教程将深入探讨Spring最简单的工程实例,旨在帮助初学者快速理解并上手Spring框架。 首先,Spring框架的核心特性是依赖注入(Dependency Injection,DI),它允许开发者在运行时通过配置来管理对象及其相互之间的...

    spring-quartz简单实例

    在这个"spring-quartz简单实例"中,我们将探讨如何在Spring环境下配置和使用Quartz。 首先,我们需要引入Quartz和Spring的依赖。在Maven项目中,这通常通过在pom.xml文件中添加以下依赖来完成: ```xml ...

    使用Spring配置文件实现AOP

    以下是一个简单的Spring AOP配置文件示例: ```xml (* com.example.service.*.*(..))"/&gt; &lt;!-- 设置相关属性 --&gt; ``` 在这个例子中,我们定义了一个名为`loggingAspect`的切面,包含一个前置...

    spring-Security简单例子

    这个"spring-Security简单例子"旨在展示如何在项目中配置和使用Spring Security进行用户登录和访问权限控制的基本操作。下面将详细阐述Spring Security的核心概念、配置步骤以及实现原理。 1. **核心概念** - **...

    mybatis-spring整合简单的实例代码

    【标题】"mybatis-spring整合简单实例代码"所涉及的知识点主要集中在如何将MyBatis与Spring框架进行集成,以便在Spring应用中利用MyBatis进行数据访问。这一过程通常包括以下几个关键步骤: 1. **环境配置**:首先...

    spring quartz简单例子

    这个“spring quartz简单例子”旨在帮助初学者快速理解如何在Spring环境中配置和使用Quartz进行定时任务调度。通过实际运行和观察,你可以深入理解Spring与Quartz的集成原理,为更复杂的定时任务场景打下基础。

    spring数据源配置

    ### Spring 数据源配置详解 #### 一、Spring与数据源简介 在Java企业级应用开发中,数据库操作是必不可少的一部分。Spring框架作为一种流行的轻量级Java应用开发框架,提供了强大的数据库访问支持,其中包括对数据...

    Spring boot + Spring Security 简单配置实例

    在本文中,我们将深入探讨如何使用Spring Boot与Spring Security进行简单的安全配置,同时结合MongoDB作为数据存储。Spring Boot以其简化Spring应用开发的特性而受到广泛欢迎,而Spring Security则是Java安全领域的...

    spring远程调用简单实例

    在Spring配置文件中定义一个bean,标记为`@Service`,并指定接口类型。此外,还需要配置`HttpInvokerServiceExporter`,暴露这个服务为HTTP Invoker可访问。 2. **客户端配置**:在客户端,同样需要定义一个bean,...

    spring配置文件详解

    接着,`&lt;beans&gt;`标签是Spring配置的根元素,它包含了所有bean的定义。在这个例子中,我们看到多个命名空间的引入: 1. `xmlns:beans` 是Spring核心配置的命名空间,用于定义bean。 2. `xmlns:xsi` 是XML Schema ...

    Spring的基本配置

    一、Spring配置概述 Spring的配置方式主要有两种:XML配置和Java配置。早期,XML配置是主流,而现在,随着Spring Boot的兴起,Java配置逐渐成为首选,因为它更加简洁和直观。不过,理解XML配置对于学习Spring的基础...

Global site tag (gtag.js) - Google Analytics