注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

j2e站点一些关键配置文件  

2015-03-13 16:04:35|  分类: java应用 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

-1)web.xml位于web-inf下,是本子站点个性化配置的入口点
       WEB-INF/web.xml     标签的配置,过滤器,项目的名称,servlet的配置,默认首页等,总之基本的重要的配置都在定web.xml 文件写定。
        参考:
1.Jsp属性组:用于定义jsp页面的基础属性;
    
<jsp-property-group>
   
<url-pattern>/pages/*</url-pattern>
    <el-ignore>true</el-ignore>
    <page-encoding>UTF-8</page-encoding>
    <include-prelude>/include/header.jspf</include-prelude>
    <include-coda>/include/copyright.jspf</include-coda>
</jsp-property-group>
                       这个设置可以指定页面编码,页头页脚等等。

设置 <page-encoding>UTF-8</page-encoding> 的好处是不用在每个页面像这样指定编码:<%@page contentType="html/text;charset=UTF-8" %>
而设置 <include-prelude>/include/header.jspf</include-prelude> 使得每个页面都在头部包含header.jspf文件(通常把对标签的包含放在这里)。
       此处使用了include指令,文后收集此指令的两种用法。
 
2.数据库资源的引用
<resource-ref>
       
<description>CourseDesign JDNI datasource</description>
       
<res-ref-name>jdbc/test</res-ref-name>
       
<res-type>javax.sql.DataSource</res-type>
       
<res-auth>Container</res-auth>
</resource-ref>
      在TOMCAT的中配置内容:
<Context path="/Course" docBase="Course" debug="0" crosscontext="true" reloadable="true">
       
<Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"
               maxActive
="100" maxIdle="30" maxWait="10000"
               username
="root" password="123456" 
driverClassName
="com.mysql.jdbc.Driver" 
url
="jdbc:mysql://localhost:3306/databaseName?useUnicode=true&amp;characterEncoding=UTF-8" />
</Context>
           在程序中可以这样获取连接
public static Connection getConnection()
       
{
Connection conn
=null;
              
try   
              
{            
                     Context initContext 
= new InitialContext();
                     Context envContext 
= (Context)initContext.lookup("java:/comp/env");
                     DataSource ds 
= (DataSource)envContext.lookup("jdbc/test");
                     conn 
= ds.getConnection();
              }
catch(Exception e){            }
              
return conn;
       }
3.过滤器
一般来说,字符编码的处理,我们会写一个过滤器。这个过滤器的JAVA类在TOMCAT的例子中有提供,可以按需来更改再拿来用。只要在配置文件中设置:
 
<filter-name>setCharacterEncoding</filter-name>
        
<filter-class>powerwind.filter.SetCharacterEncodingFilter</filter-class>
        
<init-param>
                
<param-name>encoding</param-name>
                
<param-value>UTF-8</param-value>
        
</init-param>
</filter>
  <!--   -------    -----   -->
<filter-mapping>
        
<filter-name>setCharacterEncoding</filter-name>
        
<url-pattern>/pages/*</url-pattern>
</filter-mapping>
 
4.  标签的URI
JSTL是个东西,里面提供了很好用的标签(Tag),但也不一定满足我们的要求,就自己写标签了。把 *.tld 文件直接放到WEB-INF下,在自己定义的tld文件中加上<uri>元素,如:
         <uri>http://myuri/course</uri> 
 
5   日志
只用过log4j这个日志包。首先是配置文件 log4j.properties (比较完整的配置,应根据情况选择):
log4j.rootLogger = DEBUG,INFO, A1, A2,A3
log4j.appender.A1 
= org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout 
= org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern 
= %4p [%t] (%F:%L) - %m%n
 
log4j.appender.A2 
= org.apache.log4j.RollingFileAppender
log4j.appender.A2.File 
=../../log/test.log
log4j.appender.A2.MaxFileSize 
= 1KB
log4j.appender.A2.MaxBackupIndex 
= 3
log4j.appender.A2.layout 
= org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern 
= %d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n
 
log4j.appender.A3
=org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.A3.URL
= jdbc:mysql://localhost:3306/log4jTest
log4j.appender.A3.driver
= com.mysql.jdbc.Driver
log4j.appender.A3.user
= root
log4j.appender.A3.password
= 123456
log4j.appender.A3.layout 
= org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern 
= INSERT INTO log4j (createDate, thread, level, class, message) values('%d', '%t', '%-5p', '%c', '%m')

 接着写个Servlet来加载log4j:

 

 
package powerwind.servlet;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
 
import javax.servlet.*;
import javax.servlet.http.*;
 
public class Log4jInit extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
        
super.init(config);
        String prefix 
= getServletContext().getRealPath("/");
        String file 
= getInitParameter("log4j"); 
        System.out.println(
"init log4j...");
        
if (file != null){
          PropertyConfigurator.configure(prefix
+file);
        }
else
        {
                 PropertyConfigurator.configure(prefix
+"log4j.properties");
        }
}
}

 然后同时要在web.xml下servlet的配置:

 

<servlet>
         
<servlet-name>log4jInit</servlet-name>
         
<servlet-class>powerwind.servlet.Log4jInit</servlet-class>
              
<init-param>
                
<param-name>log4j</param-name>
                
<param-value>WEB-INF/classes/log4j.properties</param-value>
              
</init-param>
         
<load-on-startup>1</load-on-startup>
</servlet>

 6.国际化的实施思路,还可以结合json来做;

 

#test_zh_CN.properties
#login page
login.title
=登录页面

 

小型的应用中,我们并不常需要国际化。但是,如果站点同时要中文版和英文版的话,这个就不错啦。
        方法使用时很简单,即:
                  1)把资源test_zh_CN.properties文件放到classes目录下;
                   2)然后用JSTL的fmt标签调用。
<fmt:setLocale value="zh_CN"  scope=”session” />
<fmt:setBundle basename="test" scope=”session” var=”hehe” />
<fmt:message key="login.title" bundle=”${hehe}” scope=”session” />

                   其中var和scope属性不是必需的。三者结合,就可以实现国际化了,即跟据不同的语言区显示不同语种的页面。


      
 

0)  关于CATALINA_HOME和CATALINA_BASE的区别理解

       简单的说,CATALINA_HOME是Tomcat的安装目 录,CATALINA_BASE是Tomcat的工作目录。如果我们想要运行Tomcat的 多个实例,但是不想安装多个Tomcat软件副本。那么我们可以配置多个工作目录,每个运行实例独占一个工作目录,但是共享同一个安装目录。当然每一个tomcat都要运行在不 同端口。

 Tomcat每个运行实例需要使用自己的conf、logs、temp、webapps、work和shared目录,因此CATALINA_BASE就指向这些目录。 而其他目录主要包括了Tomcat的二进制文件和脚本,CATALINA_HOME就指向这些目录。
         如再运行另一个Tomcat实例,那么我们可以建立一个目录,把conf、logs、temp、webapps、work和shared拷贝到该目录下,然后让CATALINA_BASE指向该目录即可。

          可以采用不同的多用户来代替多个tomcat实例。以newuser用户为例,拷贝/usr/local/apache-tomcat-8.0目录到/home/tnewuser下,删除/home/newuser/apache-tomcat-8.0/bin子目录(此目录不需要),编辑/home/test/.bash_profile文件,设置CATALINA_HOME指向刚才的安装目录比如/usr/local/apache-tomcat-8.0,设置JAVA_HOME指向刚才的安装目录/usr/java/jdk1.7.0_XX。设置CATALINA_BASE指向/home/newuser/apache-tomcat-8.0,设置CATALINA_OPTS跟/root/.bash_profile的一致(jmx管理端口用不同的端口号)
server.xml中部分参数的意义:

元素名

属性

解释

server

port

指定一个端口,这个端口负责监听关闭tomcat 的请求

shutdown

指定向端口发送的命令字符串

service

name

指定service 的名字

Connector

( 表示客户端和service 之间的连接)

port

指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求

minProcessors

服务器启动时创建的处理请求的线程数

maxProcessors

最大可以创建的处理请求的线程数

enableLookups

如果为true ,则可以通过调用request.getRemoteHost() 进行DNS 查询来得到远程客户端的实际主机名,若为false 则不进行DNS 查询,而是返回其ip 地址

redirectPort

指定服务器正在处理http 请求时收到了一个SSL 传输请求后重定向的端口号

acceptCount

指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

connectionTimeout

指定超时的时间数( 以毫秒为单位)

Engine ( 表示指定service 中的请求处理机,接收和处理来自Connector 的请求)

defaultHost

指定缺省的处理请求的主机名,它至少与其中的一个host 元素的name 属性值是一样的

Context ( 表示一个web 应用程序,通常为WAR 文件,关于WAR 的具体信息见servlet 规范)

docBase

应用程序的路径或者是WAR 文件存放的路径:重点参数(代表新发布的应用)

path

表示此web 应用程序的url 的前缀,这样请求的urlhttp://localhost:8080/path/ ****

reloadable

这个属性非常重要,如果为true ,则tomcat 会自动检测应用程序的/WEB-INF/lib /WEB-INF/classes 目录的变化,自动装载新的应用程序,我们可以在不重起tomcat 的情况下改变应用程序

host ( 表示一个虚拟主机 )

name

指定主机名

appBase

应用程序基本目录,即存放应用程序的目录

unpackWARs

如果为true ,则tomcat 会自动将WAR 文件解压,否则不解压,直接从WAR 文件中运行应用程序

Logger ( 表示日志,调试和错误信息)

className

指定logger 使用的类名,此类必须实现org.apache.catalina.Logger 接口

prefix

指定log 文件的前缀

suffix

指定log 文件的后缀

timestamp

如果为true ,则log 文件名中要加入时间,如下例:localhost_log.2001-10-04.txt

Realm ( 表示存放用户名,密码及role 的数据库)

className

指定Realm 使用的类名,此类必须实现org.apache.catalina.Realm 接口

Valve ( 功能与Logger 差不多,其prefixsuffix 属性解释和Logger 中的一样)

className

指定Valve 使用的类名,如用org.apache.catalina.valves.AccessLogValve 类可以记录应用程序的访问信息

directory

指定log 文件存放的位置

pattern

有两个值,common 方式记录远程主机名或ip 地址,用户名,日期,第一行请求的字符串,HTTP 响应代码,发送的字节数。combined 方式比common 方式记录的值更多

windows下tomcat配置参考:
tomcat一些关键文件 - itoedr - itoedr的it学苑
*************************
tomcat的启动过程:
*************************
1.init方法 
Catalina_Home和Catalina_Base 
初始化类加载器体系 
Tomcat的类加载器体系
initClassLoaders的代码
一个疑问 
Catalina对象
load方法
catalina类的命令行参数
加载过程 
start方法
await状态 
etAwait方法 
await方法

**********************************
1) jsp 两种包含include指令写法与的区别
*********************************

   1)) include指令,写法是'<% @  include file="/header.jsp" %>'


        它这是静态包含,也就是说先把被包含的文件插入到jsp文件中。被插入的文件可以使任意的文件或者只是一段Java代码,融合是在jsp被转化成servlet的之前进行的。。

         当插入jsp文件时要注意他们的contentType中的charset和pageEconding中的内容要对应相同。

         如果include的包含路径以"/"开头,那么这个路径主要是参照JSP应用的上下关系路径,如果路径是以文件名或目录名开头,那么这个路径就是正在使用的JSP文件的当前路径。这种规则直接使用了html的一规范。

   2)) jsp:include   <jsp:include page="" flush="true">

            与'<jsp:include page="" flush="true">'不同的是,前者是include指令后者是动作元素。 并且include行为元素是在请求处理阶段完成的。

          include行为元素是翻译成单独的servlet文件,被调用运行的。把输出的内容放在调用它的 位置上,可以想成include指令一样的效果。

         servlet文件也可以被include指令调用。由于在主页面被请求时,这些页面还没有被引入到主页 面中,所以你可以对page属性使用一个请求时属性值,以便根据运行时的情况来决定要引入哪一个页面.还可以添加一些将被引入的页面读取的请求参数.如下:

<jsp:include page=”<% @=pageSelectedAtRuntime %>” flush=”true” >
<jsp:param name=”fitstParamer” value=”firstValue”>
<jsp:param name=”lastParamer” value=”lastValue”>
</jsp:include>

     两种include指令用法的区别,主要有两个方面:

     执行时间上:

<% include file=”relativeURI” %> -------------------是在翻译阶段执行;

<jsp:include page=”relativeURI” flush=”true” /> --------------在请求处理阶段执行.

引入内容的不同:

<%@ include file=”relativeURI”%>引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起。

<jsp:include page=”relativeURI” flush=”true” />引入执行页面或servlet所生成的应答文本。

        另外在两种用法中file和page属性都被解释为一个相对的URI.如果它以斜杠开头,那么它就是一个环境相关的路径.将根据赋给应用程序的URI的前缀进行解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释(这里的规范与html规则一至)。

2)jsp文件的执行过程
      比如执行<%@ include file=”date.jsp”%>的过程。
       jsp文件由jsp容器将jsp转化成了servlet而得到的对应.java文件,同时还生成对应的.class文件,即编译.java的servlet产生的类文件。打开所产生的 servlet文 件(.java),我们就能发现,在原.jsp 文件转化成servlet(.java)文件时,在输出的<haed>之间加入 了一些非.jsp页面里面的代码,新加入的内容就是new.jsp里面的代码。

      用<%@ include file=”new.jsp”%>这种形式一并参考运算的过程.

      换用<jsp:include page=”new.jsp” flush=”true”/>也就是将<%@ include file=”new.jsp”%>换成<jsp:include page=”new.jsp” flush=”true”/>,然后请求原来的.jsp页面.

       回顾jsp----

       JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司(现在已归于甲骨文公司)倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似php技术(与lua语句就完全不一样了),它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag)(php则是插入php代码段),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
       它实现了Html语法中的java扩展(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
       JSP 技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访 问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
        Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。

*************************
2) Servlet的配置案例
*************************
        总述:1)Servlet的配置包括Servlet的名字;2)Servlet的类(如果是JSP,就指定JSP文件,当然也可以是java所在地);3)初始化参数;4)启动装入的优先级,5)servlet的映射;6)运行的安全设置。
 
下面举例介绍其配置:(一个完整的servlet配置参考)
    <servlet> 
        <description>Study Servlet Config</description> 
        <display-name>HelloWorld Config</display-name> 
        <servlet-name>HelloWorld</servlet-name> 
        <servlet-class>jp.co.xiehl.servlet.ch7.HelloWorldServlet</servlet-class> 

        <init-param> 
            <param-name>driver</param-name> 
            <param-value>aaaaaa-8</param-value> 
        </init-param> 

        <init-param> 
            <param-name>url</param-name> 
            <param-value>127.1.1.1</param-value> 
        </init-param> 

        <load-on-startup>30</load-on-startup> 

    </servlet> 
     
    <servlet-mapping> 
        <servlet-name>HelloWorld</servlet-name> 
        <url-pattern>/hello</url-pattern> 
    </servlet-mapping> 
     
    <servlet-mapping> 
        <servlet-name>HelloWorld</servlet-name> 
        <url-pattern>/count/*</url-pattern> 
    </servlet-mapping> 

解说:
 1)Servlet的名字,类和其他杂项
        在配置Servlet时,首先必须指定Servlet的名字,Servlet的类(如果是JSP,必须指定JSP文件的位置)。另外,可以选择性地给Servlet增加一定的描述,并且指定它在部署时显示的名字,部署时显示的icon。

    <description>Study Servlet Config</description> 
    <display-name>HelloWorld Config</display-name> 
    <servlet-name>HelloWorld</servlet-name> 
    <servlet-class>jp.co.xiehl.servlet.ch7.HelloWorldServlet</servlet-class> 

2.初始化参数
     初始化参数配置后,在serlvet中可以取得。
    <init-param> 
        <param-name>driver</param-name> 
        <param-value>aaaaaa-8</param-value> 
    </init-param> 

    <init-param> 
        <param-name>url</param-name> 
        <param-value>127.1.1.1</param-value> 
    </init-param> 
 
3.启动装入的优先级
    启动装入的优先级通过<load-on-startup></load-on-startup>来配置。
    <load-on-startup>1</load-on-startup>

4.Servlet的映射
   可以给一个Servlet做多个映射,这样我们可以通过不同的方式来访问这个Servlet。

 <servlet-mapping>
  <servlet-name>HelloWorld</servlet-name>
  <url-pattern>/hello</url-pattern>
 </servlet-mapping>
 
 <servlet-mapping>
  <servlet-name>HelloWorld</servlet-name>
  <url-pattern>/count/*</url-pattern>
 </servlet-mapping>
 

根据以上配置可以用下列URl来访问该Servlet。
http://localhost/HibernateStudy/hello
  评论这张
 
阅读(169)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017