zoukankan      html  css  js  c++  java
  • Spring简单的文件配置

    Spring简单的文件配置

    “计应134(实验班) 凌豪”

    一、Spring文件配置

    spring至关重要的一环就是装配,即配置文件的编写,接下来我按刚才实际过程中一步步简单讲解。
      首先,要在web.xml中配置DispatcherServlet,它是作为Spring MVC的前端控制器.必须在web.xml中配置好,如下:

    <servlet>
    <servlet-name>ntx</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>

    实际上,spring的配置文件可以分切到多个xml文件,我们这个简单的示例就把它配置到ntx.xml中

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC
    "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">

    <beans
    default-autowire="no"
    default-lazy-init="false"
    default-dependency-check="none"


    <bean id="loginService" class="ntx.service.serviceimpl.LoginServiceImpl"/>

    <bean id="loginController" class="ntx.controller.LoginController">
    <property name="loginService">
    <ref bean="loginService"/>
    </property>
    <property name="gotoUrl">
    <value>/showResult.jsp</value>
    </property>
    </bean>

    <bean id="SimpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
    <props>
    <prop key="/userLogin.do">loginController</prop>
    </props>
    </property>
    </bean>
    </beans>

    配置好上面的这些后,要在WEB-INF下要建立ntx-servlet.xml如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property>
     <property name="prefix"><value></value></property>
     <property name="suffix"><value></value></property>
    </bean>
    </beans>

     接下来,要指明哪些请求将交给spring的DispatcherServlet来处理,所以在web.xml中添加<servlet-mapping>

    <servlet-mapping>
     <servlet-name>ntx</servlet-name>
     <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    为了能正确载入DispatcherServlet等配置文件,我们要在web.xml中配置一个上下文载入器ContextLoaderListener或者ContextLoaderServlet,我们这里为了兼容版本较低的Servlet容器(实际上我采用的2.4),采用第二种:

    <servlet>
     <servlet-name>context</servlet-name>
     <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
     <load-on-startup>100</load-on-startup>
    </servlet>

    这样就全部配置完毕了,当然,上面的ntx.xml是我在项目完成以后才配置完成的,这里不再多讲,有bean元素的配置大家可以参考有关资料理解,很容易理解的,下面再给出完整的web.xml配置以及java<?xml version="1.0" encoding="UTF-8"?>

    <web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>/WEB-INF/ntx.xml</param-value>
    </context-param>
    <servlet>
     <servlet-name>ntx</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
     <servlet-name>context</servlet-name>
     <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
     <load-on-startup>100</load-on-startup>
    </servlet>
    <servlet-mapping>
     <servlet-name>ntx</servlet-name>
     <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
     <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    </web-app>

     根据ntx.xml知道,总共有三个java文件,LoginController.java是控制器,继承了最简单的Controller(实际上spring有很多控制器供我们选择),接下来是一个简单控制器的源码:

    /** *//**
    * program NtxSpring
    * date 2006-9-27
    * @author 张逸轩
    */
    package ntx.controller;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;

    import ntx.service.LoginService;

    /** *//**@spring.bean id="loginController"
    * @spring.property name="gotoUrl" value="/showResult.jsp"
    * @spring.property name="loginService" ref="loginService"
    */

    /** *//**
    * 作用描述:spring示例
    *
    * 说明:spring示例,以上的spring标签方便使用xdoclet生成spring配置文件
    *
    * @author 张逸轩
    * Copyright(c)2006 cleverfox
    */
    public class LoginController implements Controller...{

    private LoginService loginService ;
    private String gotoUrl;
    public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception ...{
     String userName = request.getParameter("userName");
     this.getUserInfo(request, userName);
     return new ModelAndView(this.getGotoUrl());
    }

    private void getUserInfo(HttpServletRequest request,String userName)...{
     String userInfo = loginService.getUserInfo(userName);
     request.setAttribute("userInfo", userInfo);
    }

    public String getGotoUrl() ...{
     return gotoUrl;
    }
    public void setGotoUrl(String gotoUrl) ...{
     this.gotoUrl = gotoUrl;
    }
    public LoginService getLoginService() ...{
     return loginService;
    }
    public void setLoginService(LoginService loginService) ...{
     this.loginService = loginService;
    }

    }

     还有service层的接口以及实现,较简单。

    package ntx.service;
    public interface LoginService ...{
     public String getUserInfo(String userName);
    }package ntx.service.serviceimpl;

    import ntx.service.LoginService;

    public class LoginServiceImpl implements LoginService ...{
     public String getUserInfo(String userName)...{
      return "你的名字是:" + userName;
     }
    }

     好了,最后是两个jsp文件,一个index.jsp用来显示一个表单,输入名字,一个showResult.jsp用来显示结果,只贴出相关的代码:

    <body>
    This is my Test Spring page. <br>
    <div>
    <form method="post" action="/userLogin.do">
    <input type="text" name="userName" size="30"/><br/>
    <input type="submit" value="提交"/>
    </form>
    </div>
    </body>

    <body>
    This is the Result: <br>
    <c:out value="${userInfo}" default="没有结果"/>
    </body>

      发布到tomcat或者其它Servlet容器可以正常使用,提交以后将显示:
      This is the Result:
      你的名字是:gavin


    这是一个简单的入门示例,希望有助于刚接触spring的人加深对spring的理解。

    二、控制反转和依赖注入

    控制反转(Ioc/Inverse Of Control):调用者不再创建被调用者的实例,由Spring框架实现(容器创建)所以称为控制反转。

    依赖注入(DI/Dependence injection):容器创建好实例后再注入被调用者称为依赖注入。

    当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例),被调者的协助时,在传统的程序设计中,通常由调用者来创建被调者的实例。如果创建调用者的实例的工作不再由调用者来完成,而是由外部容器完成,因此称为控制反转;创建被调者实例的工作通常由外部容器来完成,然后注入调用者,因此称为依赖注入

    依赖注入的三种实现形式:

    1.Type1-接口注入(Interface Injection)

    它是在一个接口中定义需要注入的信息,并通过接口完成注入。Apache Avalon是一个较为典型的Type1型IOC容器,WebWork框架的IoC容器也是Type1型。

    当然,使用接口注入我们首先要定义一个接口,组件的注入将通过这个接口进行。我们还是以用户注册为例,我们开发一个InjectUserDao接口,它的用途是将一个UserDao实例注入到实现该接口的类中。InjectUserDao接口代码如下:

    public interface InjectUserDao {

        public void setUserDao(UserDao userDao);

    }

    UserRegister需要容器为它注入一个UserDao的实例,则它必须实现InjectUserDao接口。UserRegister部分代码如下:

    public class UserRegister implements InjectUserDao{

        private UserDao userDao = null;//该对象实例由容器注入

        public void setUserDao(UserDao userDao) {

            this.userDao = userDao;

        }

    // UserRegister的其它业务方法

    }

    同时,我们需要配置InjectUserDao接口和UserDao的实现类。如果使用WebWork框架则配置文件如下:

    <component>

            <scope>request</scope>

            <class>com.dev.spring.simple.MemoryUserDao</class>

            <enabler>com.dev.spring.simple.InjectUserDao</enabler>

    </component>

    这样,当IoC容器判断出UserRegister组件实现了InjectUserDao接口时,它就将MemoryUserDao实例注入到UserRegister组件中。

    2.Type2-设值方法注入(Setter Injection)

    在各种类型的依赖注入模式中,设值注入模式在实际开发中得到了最广泛的应用(其中很大一部分得力于Spring框架的影响)。

    基于设置模式的依赖注入机制更加直观、也更加自然。前面的用户注册示例,就是典

    型的设置注入,即通过类的setter方法完成依赖关系的设置。

    3.Type3-构造子注入(Constructor Injection)

    构造子注入,即通过构造函数完成依赖关系的设定。将用户注册示例该为构造子注入,UserRegister代码如下:

    public class UserRegister {

        private UserDao userDao = null;//由容器通过构造函数注入的实例对象

        public UserRegister(UserDao userDao){

            this.userDao = userDao;

        }

        //业务方法

    }

  • 相关阅读:
    57.适合自己的就是最好的
    45.懂得放弃
    ASP.NET碎知识点
    app性能测试理论基础一篇
    记一次踩坑docker+Jenkins+python3.6.8+gitee
    IT测试人从浓密到稀疏的的发量之路
    一天基本上没什么效率
    如此复杂的心情,如此失落的感觉…
    String.Replace 方法 (String, String)
    《见与不见》原题《班扎古鲁白玛的沉默》 作者:扎西拉姆·多多
  • 原文地址:https://www.cnblogs.com/linghao713/p/4571810.html
Copyright © 2011-2022 走看看