博文

乱码问题(2007-03-12 22:59:00)

摘要:一。URL: 修改%TOMCAT_HOME%\conf\server.xml文件 找到如下内容:     <Connector port="80"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"                enableLookups="false" redirectPort="8443" acceptCount="100"                debug="0" connectionTimeout="20000"                disableUploadTimeout="true" /> 添加:URIEncoding="utf-8" 修改后内容如下:     <Connector port="80"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"                enableLookups="false" redirectPort="8443" acceptCount="100" &......

阅读全文(2143) | 评论:0

上传(2007-03-12 22:55:00)

摘要:struts中含有支持文件上传功能的包org.apache.struts.upload。可以创建一个包含FormFile类型的属性的ActionForm。如: package cn.rolia.struts.upload; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.upload.FormFile; public class UploadForm extends ActionForm {     private FormFile theFile;     public ActionErrors validate(ActionMapping mapping,            HttpServletRequest request) {        return null;     }     public void reset(ActionMapping mapping, HttpServletRequest request) {     }     public FormFile getTheFile() {        return theFile;     }     public void setTheFile(FormFile theFile) {     ......

阅读全文(1752) | 评论:0

日志 log4j(2007-03-12 22:55:00)

摘要:日志分两种: 1.  系统日志:处理应用程序内部操作而不是基于用户的特定操作。例如:SMTP主机没有响应。 2.  应用程序日志:特定用户操作中的记录。   日志作用 记录异常; 安全检查 非法用户跟踪 测试 日志种类 1.  容器日志文件。日志文件的名称和位置依赖与文件。可在类中直接从获取日志记录器。如:        javax.servlet.ServletContext context = getServlet().getServletContext();        context.log("日志"); 2. 使用common-logging。具体不介绍。 3. 使用common-logging和log4j的结合。下面详细介绍如何使用log4j 使用log4j进行记录 配置步骤: 1.       下载log4j的 jar 文件 2.       将jar文件复制到应用程序的WEB-INF/lib目录里 3.       配置log4j.properties。举例如下: log4j.rootLogger=WARN,Console,File   log4j.logger.cn.rolia.top.LoggingListener=INFO,Console,File   log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d %-5p %c - %m%n   log4j.appender.File=org.apache.log4j.FileAppender log......

阅读全文(2877) | 评论:0

模块间的切换(2007-03-12 22:54:00)

摘要:问题 想从一个模块(源模块)切换到另一个模块(目标模块)。 解决方案 在你的源模块中建立一个type为“org.apache.struts.actions.SwitchAction”的action: <action path="/ChangeModuleTest"         type="org.apache.struts.actions.SwitchAction"/> 使用这个action,向它传递两个参数prefix和page。prefix指明了目标模块名称,必须是以斜扛开头(“/”),page指明了相对于目标模块的位置。如: <html:link page="/ChangeModuleTest.do?prefix=moduleName&page=/SomeAction.do">     Change Module </html:link>如果你要连接到一个action,别忘了加上”.do”。 讨论 SwitchAction能将应用程序从一个模块转到另一个模块,然后跳转到目标模块的指定位置。 同ForwardAction、IncludeAction一样SwitchAction不需要子类化。   当我们在浏览器中使用http://hostaddress/contextpath/module/action.do式样的的url时,actionservlet会根据module选择模块对象,下面是actionservlet处理http请求的代码:   protected void process(HttpServletRequest request,                            HttpServletResponse response)    ......

阅读全文(1860) | 评论:0

模块化(2007-03-12 22:53:00)

摘要:需求 需要将一个模块分割成多个子模块,每个模块有自己的配置文件。 解决方案 在web.xml中配置如下: <!-- Action Servlet Configuration --> <servlet>   <servlet-name>action</servlet-name>   <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>   <init-param>     <param-name>config</param-name>     <param-value>/WEB-INF/struts-config.xml</param-value>   </init-param>   <init-param>     <param-name>config/module1</param-name>     <param-value>/WEB-INF/struts-config-module1.xml</param-value>   </init-param>   <init-param>     <param-name>config/module2</param-name>     <param-value>/WEB-INF/struts-config-module2.xml</param-value>   </init-param>   <load-on-startup>1</load-on-startup> </servlet> 讨论 struts引入模......

阅读全文(2539) | 评论:0

使用多个struts-config配置文件(2007-03-12 22:52:00)

摘要: 可以将一个struts-config.xml分割成多个小的struts-config.xml。每个都必须按照struts-config DTD文件的格式进行编写。配置距举例如下: <servlet>   <servlet-name>action</servlet-name>   <servlet-class>     org.apache.struts.action.ActionServlet   </servlet-class>   <init-param>     <param-name>config</param-name>     <param-value>       /WEB-INF/struts-config.xml,       /WEB-INF/struts-config-2.xml     </param-value>   </init-param>   <load-on-startup>1</load-on-startup> </servlet> 当载入ActionServlet类时,struts将多个配置文件拼成单个的配置文件。 如果多个配置文件中有重复的元素则使用最后一个配置文件中的。 你也可以为多个字模块指定多个配置文件。如下所示: <servlet>   <servlet-name>action</servlet-name>   <servlet-class>     org.apache.struts.action.ActionServlet   </servlet-class>   <init-para......

阅读全文(2186) | 评论:0

全局常量(2007-03-12 22:52:00)

摘要:可以声明一个plug-in。在plug-in中声明常量并将其保存在ServletContext中 举例如下: Constants.java: package com.yourcompany.struts.constants; import java.util.HashMap; import java.util.Map; public class Constants {         public Map globalConstants;         public Constants(){         globalConstants = new HashMap();         globalConstants.put("userName","Rolia");         globalConstants.put("path",new java.util.Date());     }       public Map getGlobalConstants() {         return globalConstants;     }       public void setGlobalConstants(Map globalConstants) {         this.globalConstants = globalConstants;     }   } ConstantsPlugin.java: package com.yourcompany.s......

阅读全文(2213) | 评论:0

tag library(2007-03-12 22:49:00)

摘要:可以在JSP中创建引用绝对路径的一个taglib,这样的话就不许要在WEB.XML中声明了。如:<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %><%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %><%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   <!-- start taglib --> <%@ include file="/includes/taglibs.inc.jsp" %> <!-- end taglib -->   <html:html>   <body> ... 当你用绝对URL指定taglib时,你不需要将相应的taglib中加入到web.xml中去。   Servlet2.3之前必须在web.xml中声明taglib 从2.3开始才可以使用绝URI。绝对URI是由相应的TLD文件确定的。   如果你想在整个应用程序中使用同一个talib库,可以创建一个包含taglib的文件,然后将此文件包含到任意的JSP页面中去。   struts1.1和struts1.2中的taglib是有区别的: Tag......

阅读全文(1905) | 评论:0

ActionForward(2007-03-12 22:48:00)

摘要:使用forward可以定义URL的逻辑名称,然后使用逻辑名称来应用URL。这样,在更新URL时,不必更新URL的每个引用,只须在struts-config.xml中更改一次这个引用。
可以定义两类forward:全局forward和针对具体请求的forward。全局forward在整个应用程序中都可以使用,针对具体请求的forward只可以在他各自的请求action中使用。
全局forward的定义示例:
    <forward
      name="for"
      path="/forward/for.jsp"
      redirect="true"
      contextRelative="true" />
针对具体请求的局部forward的定义通过在action标记中嵌套forward标记来定义:
  <action-mappings >
    <action path="/forac" type="com.yourcompany.struts.action.ForacAction">
      <forward name="success" path="/for.jsp" />
    </action>
  </action-mappings>
......

阅读全文(1889) | 评论:0

Struts的控制层(2007-03-12 22:45:00)

摘要:
担任MVC/Model 2控制器角色核心的是ActionServlet.
ActionServlet必须在web.xml里进行配置。具体配置参数参见“web.xml参数设置.doc”
Servlet容器在启动时,或者用户首次请求ActionServlet时加载ActionServlet类,在上述情况下,Servlet容器都会在ActionServlet被加载后立即执行它的init()方法。具体的init()方法代码解读参见“ActionServlet的init()方法.doc”。
可以继承ActionServlet来定义自己的控制器,通常的目的是重新定义ActionServlet的init()方法,增加自己的初始化动作:
定义如下的类:
import sample;
public class ExtendedActionServlet extends ActionServlet {
        public void init() throws ServletException {
               super.init();
               //加入自己的代码
               ……………
        }
}
扩展完类后,还应该在web.xml文件中如下配置:
<servlet>
        <servlet-name>sample</servlet-......

阅读全文(2023) | 评论:0