posts - 60, comments - 116, trackbacks - 1, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

单独使用Spring建立简易开发框架(四)

Posted on 2007-09-11 19:11 匪客 阅读(1450) 评论(0)  编辑  收藏 所属分类: 开发技术

5. web.xml 配置

5.1. 基本配置

   web.xml 采用 servlet2.4 规范,默认配置了会话过期时间和网站首页文件。

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_ID" 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">

 

    <!-- 会话的时间 -->

    <session-config>

              <session-timeout>30</session-timeout>

       </session-config>

 

       <!-- 欢迎页面 -->

       <welcome-file-list>

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

       </welcome-file-list>

      

</web-app>

5.2. 加载 spring 监听

   在 web.xml 文件中加入如下配置:

<!-- 设置环境变量,将 web 应用根目录存储到环境变量中 -->

<context-param>

    <param-name>webAppRootKey</param-name>

    <param-value>webapp.root</param-value>

</context-param> 

 

<!-- 设置环境变量指定 applicationContext.xml 配置文件 -->

<context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>

        /WEB-INF/applicationContext.xml

        /WEB-INF/applicationContext-admin.xml

        /WEB-INF/applicationContext-quartz.xml

    </param-value>

</context-param>   

 

<!-- 设置 context 的监听,启动时加载 applicationContext.xml 文件,初始化 applicationContext 实例 -->

<listener>

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

</listener>

5.3. Log4j 日志

   首先,在 web.xml 文件中加入如下配置:

<!-- 设置环境变量指定 log4j 的配置文件 -->

<context-param>

    <param-name>log4jConfigLocation</param-name>

    <param-value>/WEB-INF/log4j.properties</param-value>

</context-param>

 

<!-- 设置 log4j 的监听,使日志组件能够使用,调用 log4jConfigLocation 中设置的环境变量 -->

<listener>

    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

</listener>

 log4j.properties 文件放在 /WEB-INF/ 目录下, 文件内容如下例,其中根日志级别为 warn ,而在包 cn.idtag 中的类的日志级别为 info

# 定义根日志的级别和输出路径 fatal, error, warn, info, debug

log4j.rootCategory=warn, stdout, logfile

 

# 在包 cn.idtag 中的类的日志级别

log4j.logger.cn.idtag=info

 

# 日志输出参数

#%c: 日志信息所在类名

#%d: 日志信息产生时间

#%p: 日志信息级别

#%m: 产生的日志具体信息

#%n: 输出日志信息换行

log4j.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %c%n%m%n%n

 

# 控制台输出

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=${log4j.ConversionPattern}

 

# 日志文件输出

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender

log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/log.txt

log4j.appender.logfile.Append = true

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=${log4j.ConversionPattern}

5.4. 解决中文乱码

 在 web.xml 文件中加入如下配置,可以解决表单提交的编码,不需要在每个 *.jsp *.htm 等页面上编写代码“ <%@ page contentType="text/html; charset=gbk" language="java"%> ”了,并且为浏览器端设置的“ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ”代码也不需要写了,浏览器会自动识别,注意建立文件时一定要使用 UTF-8 字符集。

<!-- 设置字符串过滤器,解决表单 Post 提交中的乱码问题 -->

<filter>

    <filter-name>characterEncoding</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>

    <init-param>

        <param-name>forceEncoding</param-name>

        <param-value>true</param-value>

    </init-param>

</filter>

<filter-mapping>

    <filter-name>characterEncoding</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

 

<!-- 设置 jsp,htm,html 页面的字符集,是否使用标签,是否使用 jsp 脚本等,头尾载入页面等 -->

<jsp-config>

    <jsp-property-group>

        <description> 指定 JSP 文件的配置属性 </description>

        <display-name>jspConfiguration</display-name>

        <url-pattern>*.jsp</url-pattern>

        <el-ignored>false</el-ignored>

        <page-encoding>utf-8</page-encoding>

        <scripting-invalid>false</scripting-invalid>

        <include-prelude></include-prelude>

        <include-coda></include-coda>

    </jsp-property-group>

 

    <jsp-property-group>

        <description> 指定 htm 文件的配置属性 </description>

        <display-name>jspConfiguration</display-name>

        <url-pattern>*.htm</url-pattern>

        <el-ignored>false</el-ignored>

        <page-encoding>utf-8</page-encoding>

        <scripting-invalid>false</scripting-invalid>

        <include-prelude></include-prelude>

        <include-coda></include-coda>

    </jsp-property-group>

 

    <jsp-property-group>

        <description> 指定 html 文件的配置属性 </description>

        <display-name>jspConfiguration</display-name>

        <url-pattern>*.html</url-pattern>

        <el-ignored>false</el-ignored>

        <page-encoding>utf-8</page-encoding>

        <scripting-invalid>false</scripting-invalid>

        <include-prelude></include-prelude>

        <include-coda></include-coda>

    </jsp-property-group>

 

</jsp-config>

 如果应用服务器是 Tomcat ,编辑 Tomcat 根目录下的“ /conf/server.xml ”文件,找到 Connector 配置部分,在配置结尾加入“ URIEncoding="utf-8" ”:

<Connector port="8080" maxThreads="150" …… disableUploadTimeout="true"/>

改为:

<Connector port="8080" maxThreads="150" …… disableUploadTimeout="true" URIEncoding="UTF-8"/>

 可解决系统内部 GET 方法传递中文字符参数的乱码问题,但是在外部 URL 请求中参数值带有中文的,必须使用 URLEncode 编码。

5.5. 配置 servlet

 在 web.xml 文件中配置 servlet 请求路径和实现类:

<servlet>

    <servlet-name>sendSms</servlet-name>

    <servlet-class>cn.idtag.test.servlet.SendSmsServlet</servlet-class>

</servlet>

<servlet-mapping>

    <servlet-name>sendSms</servlet-name>

    <url-pattern>/servlet/sendsms</url-pattern>

</servlet-mapping>

 而 SendSmsServlet.java 文件需要继承 HttpServlet 类,如果 response 要输出内容并包含非英文字符,要设置输出的字符集为 UTF-8

package cn.idtag.test.servlet;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpServlet;

import javax.servlet.ServletException;

import java.io.IOException;

 

public class SendSmsServlet extends HttpServlet

{

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException

{

        response.setContentType("text/html;charset=utf-8");

        PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "utf-8"));

        try

        {

        //do something…

        } finally

        {

            out.close();

        }

    }

 

    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException

    {

        doGet(request, response);

    }

}


只有注册用户登录后才能发表评论。


网站导航: