且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

spring 配置

更新时间:2022-09-03 23:25:25

引用:http://www.ideawu.net/person/spring_hibernate_web_dev/ch01.html

本章讲 Spring 的环境配置和 Spring Web 应用的一般结构和开发方法.

1.1. 配置 JSP 运行环境

1.1.1. 网站所需的库文件

Tomcat安装目录下的webapps目录是放置网站的目录, 在该目录里建立一个 ideashopx 目录, 这就是我们的博客网站的目录, 它的访问地址是 http://localhost:8080/ideashopx/

到 Spring 的官方网站下载 Spring Framework 2.0(一定要下载 with-dependencies 的包, 因为里面包含了所需要的依赖文件, 例如你可以下载 spring-framework-2.0.6-with-dependencies.zip).

我们要开发的网站的目录结构如下:

spring 配置

Figure 1.1. 网站的目录结构


然后按照下面的路径建立以下5个文件:

<Tomcat Home>/webapps/ideashopx/
    index.jsp
    WEB-INF/
        applicationContext.xml
        ideashopx-servlet.xml
        web.xml

然后解压缩Spring Framework的压缩文件, 分别从dist和lib目录下找到并将下面jar文件拷贝到网站目录下的WEB-INF/lib目录下, 这些文件是一般网站开发都要用到的:

antlr-2.7.6.jar
cglib-nodep-2.1_3.jar
commons-collections.jar
commons-dbcp.jar
commons-fileupload.jar
commons-io.jar
commons-logging.jar
commons-pool.jar
dom4j-1.6.1.jar
ehcache-1.2.jar
hibernate3.jar
jstl.jar
jta.jar
log4j-1.2.13.jar
spring.jar
standard.jar

解压缩standard.jar文件, 从里面的META-INF文件夹中拷贝 c.tld, fmt.tld 两个文件拷贝到 WEB-INF/tld 目录下.

1.1.2. 编辑网站的配置文件

编辑WEB-INF/目录下的以下配置文件:

Example 1.1. web.xml

<?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>webAppRootKey</param-name>
        <param-value>ideashopx.root</param-value>
    </context-param>

    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.properties</param-value>
    </context-param>
	
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/applicationContext.xml
        </param-value>
    </context-param>
    
    <filter>
        <filter-name>encodingFilter</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>encodingFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
    
    <servlet>
        <servlet-name>ideashopx</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

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

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

</web-app>
	

ideashopx-servlet.xml 文件没有实质的内容, 因为我们目前还用不上它:

Example 1.2. ideashopx-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="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <value>
            </value>
        </property>
    </bean>

</beans>
	

applicationContext.xml 也只是个空壳文件:

Example 1.3. applicationContext.xml

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

</beans>
	

log4j.properties 配置日志输出. 日志在开发和运行过程中是非常重要的.

Example 1.4. log4j.properties

log4j.rootLogger=INFO, stdout, logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${ideashopx.root}/WEB-INF/logs/ideashopx.log
log4j.appender.logfile.MaxFileSize=1024KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
	

log4j.properties 配置日志输出. 日志在开发和运行过程中是非常重要的.

1.1.3. 用 JSP Hello World 页面验证环境是否配置成功

我们先运行JSP的Hello World例子, 确保我们的环境设置正确. 编辑 ideashopx/index.jsp文件, 让它输出Hello World!.

ideashopx/index.jsp文件内容为:

Example 1.5. index.jsp

<%@ page contentType="text/html; charset=UTF-8" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Hello World from JSP!</title>
<style type="text/css">
body{
    font-size: 12px;
    font-family: arial;
}
</style>
</head>
<body>

<h1>Hello World from JSP!</h1>

${param.name}

</body>
</html>
	

启动 Tomcat. 如果是从命令行启动, 你会看到类似的启动信息:

E:\Tomcat5.5\bin>tomcat5.exe
2007-7-4 19:32:02 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
2007-7-4 19:32:02 org.apache.coyote.http11.Http11BaseProtocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2007-7-4 19:32:02 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 937 ms
2007-7-4 19:32:02 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2007-7-4 19:32:02 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/5.5.23
2007-7-4 19:32:02 org.apache.catalina.core.StandardHost start
信息: XML validation disabled
...
FrameworkServlet 'ideashopx': initialization completed in 234 ms
Servlet 'ideashopx' configured successfully
2007-7-15 20:53:07 org.apache.coyote.http11.Http11BaseProtocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2007-7-15 20:53:07 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2007-7-15 20:53:07 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/31  config=null
2007-7-15 20:53:07 org.apache.catalina.storeconfig.StoreLoader load
信息: Find registry server-registry.xml at classpath resource
2007-7-15 20:53:07 org.apache.catalina.startup.Catalina start
信息: Server startup in 3172 ms

建议你总是使用命令行方式启动Tomcat, 这样, 在以后的开发中你能通过控制台立即查看出错信息, 了解网站的运行情况, 特别是调试Hibernate时, 可以查看生成的SQL语句.

如果启动正常, 在浏览器地址栏中输入http://localhost:8080/ideashopx/, 你应该能看到index.jsp的运行结果:

spring 配置

Figure 1.2. 测试实例运行效果


在浏览器地址栏中输入http://localhost:8080/ideashopx/?name=myshop, 你看到了什么? 你应该看到显示的文本增加了小号的 myshop 字样. 这就是index.jsp文件中${param.name}的效果. ${param.name}是JSTL语句, 用来输出变量, param.name是网页请求中的name参数. JSTL在后面的章节中有详细介绍.

目前为止, 我们还没有应用到Spring框架. 接下来, 我们要编写Spring的Hello World例子. 通过这个例子, 你将看到基于Spring的网站的一般结构.