zoukankan      html  css  js  c++  java
  • [Java,MVC] Eclipse下搭建Spring MVC

    转自:http://blog.csdn.net/blue_jjw/article/details/8752466

    一、新建Dynamic Web Project

    一个web工程最基本的,只看3个地方,在根目录下(这个目录一般习惯叫WebContent或WebRoot)有 :
    1.WebRoot/WEB-INF/web.xml  启动引导文件
    2.WebRoot/WEB-INF/classes/  编译的class文件,会根据package建立子路径 
    3.WebRoot/WEB-INF/lib/      jar包 (注意,lib下不可以再建子目录)
    这就是一般比较常用的web工程的结构. 有了这三个结构, 然后把WebRoot的绝对路径告诉tomcat这样的web容器,就可以启动了(当然里面要有相应的东西才行)。
    因此虽然我们一般项目的结构是: projectname/src, projectname/WebRoot 但实际上src里的.java源代码是tomcat完全不关心的,它的解析是从WebRoot开始的, .class才是它认识的.

    参考:搭建简单web项目: spring3.0基础配置(1)

    二、添加Spring的依赖包

    其中commons-logging-1.1.1.jar是spring日志依赖jar包,jstl-api-1.2.jar与jstl-impl-1.2.jar是Oracle官方的JSTL接口与实现,如果选Apche的也可以。

    在打war包时,将这些依赖包拷贝到WebContent/WEB-INF/lib下:

    三、配置web.xml

    WebContent/WEB-INF/web.xml:

    <?xml version="1.0" encoding="UTF-8"?>  
        <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  
        <display-name>ContentManagementSystem</display-name>  
            <!-- 添加spring3控制器, DispatcherServletDispatcherServlet是Spring MVC 的入口  
                所有进入Spring Web的 Request都经过 DispatcherServlet   
            -->  
            <servlet>   
                <servlet-name>LoadBalanceAlg</servlet-name>   
                <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   
                <load-on-startup>1</load-on-startup>   
            </servlet>     
            <!-- 配置spring3的映射规则 -->   
            <servlet-mapping>   
                <servlet-name>LoadBalanceAlg</servlet-name>   
                <url-pattern>*.htm</url-pattern>   
            </servlet-mapping>  
            <!-- 配置log4j -->  
            <!-- spring log4j configuration -->  
            <context-param>            
                <param-name>webAppRootKey</param-name>             
                <param-value>LBAProject</param-value>        
            </context-param>      
            <!-- 由Spring加载的log4j配置文件的位置 -->  
            <context-param>  
                <param-name>log4jConfigLocation</param-name>  
                <param-value>/WEB-INF/classes/log4j.conf</param-value>  
            </context-param>  
            <!-- Spring刷新log4j配置文件的间隔,单位为millisecond -->  
            <context-param>  
                <param-name>log4jRefreshIntercal</param-name>  
                <param-value>60000</param-value>  
            </context-param>     
            <!-- Web项目Spring加载log4j的监听 -->  
            <listener>  
                <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
            </listener>    
            <!-- 默认跳转到根目录下的页面 -->  
            <welcome-file-list>  
                <welcome-file>index.htm</welcome-file>  
            </welcome-file-list>   
            <!-- session timeout setup, 10 mins -->  
            <session-config>  
                <session-timeout>10</session-timeout>  
            </session-config>   
        </web-app>

    加载DispatcherServlet时Spring会尝试读取配置文件,默认的配置文件位于web.xml相同的路径下,文件名与注册的Servlet名有关:Servlet注册名跟上"-servlet.xml"。 
    例如:上面的Servlet注册名为 LoadBalanceAlg,那么默认的配置文件名为:LoadBalanceAlg-servlet.xml。

    当然 也可以明确配置文件,需要在注册servlet时设定初始化参数 :

    <init-param>   
    <param-name>contextConfigLocation</param-name>   
    <param-value>   
      <!-- 配置文件名 -->   
    </param-value>   
    </init-param>

    参考:Spring mvc的配置

    四、Spring配置文件

    文件名需与web.xml中的<servlet-name></servlet-name>中的名字一致

    <?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/context    
        http://www.springframework.org/schema/context/spring-context-3.0.xsd"  
        >   
        
        <!-- 开启spring MVC注解功能,完成请求和注解POJO的映射 -->  
        <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>   
        <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>   
        <!-- 默认扫描的包路径 -->   
        <context:component-scan base-package="cn.ac.dsp.controller"/>   
        <context:component-scan base-package="cn.ac.dsp.service"/>   
        
        <!-- 模型视图名称的解析,即模型前后添加前后缀 -->    
        <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>/WEB-INF/jsp/</value></property>   
           <property name="suffix"><value>.jsp</value></property>   
        </bean>  
    </beans>

    五、log4j的配置

    第一步:导入jar包

    第二步:在web.xml中的配置:

    <!-- 配置log4j -->  
    <!-- spring log4j configuration -->  
    <context-param>            
            <param-name>webAppRootKey</param-name>             
        <param-value>LBAProject</param-value>        
    </context-param>      
    <!-- 由Spring加载的log4j配置文件的位置 -->  
       <context-param>  
        <param-name>log4jConfigLocation</param-name>  
        <param-value>/WEB-INF/classes/log4j.conf</param-value>  
       </context-param>  
       <!-- Spring刷新log4j配置文件的间隔,单位为millisecond -->  
       <context-param>  
        <param-name>log4jRefreshIntercal</param-name>  
        <param-value>60000</param-value>  
       </context-param>     
       <!-- Web项目Spring加载log4j的监听 -->  
       <listener>  
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
       </listener>

    其中webAppRootKey表示Web项目根目录的绝对路径,如果不配置webAppRootKey参数,则webAppRootKey 就是缺省的"webapp.root",最好设置,以免项目之间的名称冲突。然后,log4j配置文件中就可以用${LBAProject}表示Web项目目录的绝对路径,如果不设置webAppRootKey,可用${webapp.root}表示Web项目目录的绝对路径。

    注意:

    1、log4j的配置文件的文件名不能为"log4j.properties",而要改为别的名字,要不然报异常:
    log4j:ERROR setFile(null,true) call failed. 
    java.io.FileNotFoundException: WEB-INFlogabc.log (系统找不到指定的路径。)

    原因是log4j.properties与tomcat的log4j重名,改个名字就好了.因为在tomcat启动是默认去找log4j.properties,但此时Listener还没有起来,tomcat就要往WEB-INFlogabc.log 写日志就找不到了.

    2、${webapp.root}表示工程目录,可以把它加入到log4j配置文件中输入路径的前面,如:
    log4j.appender.appender_demo.File = ${webapp.root}/WEB-INF/log/abc.log

    3.该配置文件一定要放在src目录下,使其自动生成到/WEB-INF/classes/目录下.否则,spring报异常:
    log4j:WARN No appenders could be found for logger (...).
    log4j:WARN Please initialize the log4j system properly.

    第三步:在src下创建配置文件log4j.conf
    log4j.conf:

    log4j.rootLogger = INFO, stdout, A1, A2  
      
    ##log message to console  
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender  
    log4j.appender.stdout.Target = System.out  
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout  
    log4j.appender.stdout.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] %c:%l - %m%n  
      
    ##log message to file  
    log4j.appender.A1.Threshold = INFO  
    log4j.appender.A1 = org.apache.log4j.DailyRollingFileAppender  
    log4j.appender.A1.File = ${LBAProject}/WEB-INF/log/LBA-info.log  
    log4j.appender.A1.DatePattern = '-'yyyy-MM-dd'.log'  
    log4j.appender.A1.layout = org.apache.log4j.PatternLayout  
    log4j.appender.A1.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] %c:%l - %m%n  
      
    ##log warn/error to file  
    log4j.appender.A2.Threshold = WARN  
    log4j.appender.A2 = org.apache.log4j.DailyRollingFileAppender  
    log4j.appender.A2.File = ${LBAProject}/WEB-INF/log/LBA-error.log  
    log4j.appender.A2.DatePattern = '-'yyyy-MM-dd'.log'  
    log4j.appender.A2.layout = org.apache.log4j.PatternLayout  
    log4j.appender.A2.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %c:%l - %m%n

    参考:log4j注意的问题

    Spring中配置log4j问题

    搭建简单web项目:spring3.0基本配置(2)

    在Spring的项目中配置Log4j存放日志文件到指定目录下

    六、前后台代码

    首先,在WEB-INF/jsp下新建一个jsp包,与上文中prefix的值相对应(LoadBalanceAlg-servlet.xml中配置了视图解析模块

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"  
        pageEncoding="ISO-8859-1"%>  
    <!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=ISO-8859-1">  
    <title>DB Operation</title>  
    </head>  
    <body>  
        DB Operation Success!  
    </body>  
    </html>

    在src下编写后台代码(在LoadBalanceAlg-servlet.xml配置的包中),如DBOperation.java:

    package cn.ac.dsp.controller;  
      
    import java.util.List;  
      
    import org.apache.log4j.Logger;  
    import org.springframework.stereotype.Controller;  
    import org.springframework.web.bind.annotation.RequestMapping;  
      
    import cn.ac.dsp.dao.ResourceDAO;  
    import cn.ac.dsp.entity.ResourceEntity;  
      
    @Controller  
    public class DBOperation {  
      
        private final static Logger log = Logger.getLogger(DBOperation.class);  
      
        @RequestMapping("/dbOperation.htm")  
        public String start(){  
            log.info("request for dbOperation");  
            List<ResourceEntity> resDAOList = ResourceDAO.getInstance().selectAll();  
            for(ResourceEntity re : resDAOList){  
                System.out.println(re.hashCode());  
            }  
            return "dbOperation";  
        }  
        /** 
         * @param args 
         */  
        public static void main(String[] args) {  
            DBOperation d = new DBOperation();  
            d.start();  
        }  
    }

    七、测试

    将Eclipse中的项目打成war包(注意要将依赖包拷贝到WEB-INF/lib下),放到tomcat的webapps下,启动tomcat。

    浏览器中打开页面如下:


    参考:spring3 mvc系列一:架构基本配置(注解版)

    --------------------------------------

    欢迎您,进入 我系程序猿 的cnBlog博客。

    你不能改变你的过去,但你可以让你的未来变得更美好。一旦时间浪费了,生命就浪费了。

    You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.

    --------------------------------------

    分享到QQ空间  

  • 相关阅读:
    NameNode格式化后HBase创建新表提示旧表已存在:table already exists
    多次NameNode执行format后DataNode启动不了解决方案
    Zookeeper群起脚本启动失败及查看状态出现:Error contacting service. It is probably not running
    Spark中的术语图解总结
    Spark架构角色及基本运行流程
    大牛博客链接
    python pip安装解决方法
    自动化测试学习路线
    深入理解计算机系统(第三版)
    汇编语言(王爽 第三版)--笔记
  • 原文地址:https://www.cnblogs.com/jqmtony/p/3713709.html
Copyright © 2011-2022 走看看