??xml version="1.0" encoding="utf-8" standalone="yes"?>
1、服务查?/span>
默认情况下,Linuxpȝ在默认安装中已经安装了Samba服务包的一部分 Qؓ了对整个q程有一个完整的了解Q在此先这部分卸蝲掉?/span> 使用命o
rpm -qa | grep samba Q默认情况下可以查询C个已l存在的包:
samba-client-3.0.33-3.7.el5
samba-common-3.0.33-3.7.el5
2、卸载Samba
用rpm -e 两个包卸蝲掉。对于samba-common-3.0.33-3.7.el5Q因Z其它rpm包之间存在依赖关p,所以必d参数-f?-nodepsQ?f是指强制Q?-nodeps是指不检查依赖关p,具体完整命o为:
rpm -e samba-common-3.0.33-3.7.el5 -f --nodeps
rpm -e samba-client-3.0.33-3.7.el5 -f --nodeps
3、安装Samba
用以下命令安装:
rpm -ivh samba-3.0.33-3.29.el5_6.2.i386.rpm -f --nodeps
安装完成后,使用命o rpm -qa | grep samba q行查询Q发现搭建samba服务器所依赖的所有服务器都已l安装好了即可?/span>
4、配|smb.conf文g
Samba的配|文件一般就攑֜ /etc/samba 目录中,主配|文件名?/span> smb.conf Q文件中记录着大量的规则和׃n信息Q所以是samba服务非常重要的核心配|文Ӟ完成samba服务器搭建的大部分主要配|都在该文g中进行?/span>
Samba 服务器的工作原理是:客户端向Samba服务器发赯求,h讉K׃n目录QSamba服务器接收请求,查询smb.conf文gQ查看共享目录是否存在,以及来访者的讉K权限Q如果来访者具有相应的权限Q则允许客户端访问,最后将讉Kq程中系l的信息以及采集的用戯问行Z息存攑֜日志文g中?/span>
首先备䆾一下samba的配|文?/span>
cd /etc/samba
mv smb.conf smb.conf bak
然后重新创徏一个smb.conf文g
touch smb.conf
然后我们把这D写入smb.conf?/span>
[global]
netbios name = LinuxSir05
server string = Linux Samba Server TestServer
security = share
[linuxsir]
path = /opt/linuxsir
writeable = yes
browseable = yes
guest ok = yes
[global] q段是全局配置Q是必段写的。其中有如下的几行;
workgroup 是Windows中显C的工作l;在这里我讄的是LINUXSIR Q用大写Q;
netbios name 是在Windows中显C出来的计算机名Q?/span>
server string 是Samba服务器说明,可以自己来定义;q个不是什么重要的Q?/span>
security q是验证和登录方式,q里我们用了share Q验证方式有好多U,q是其中一U;另外一U常用的是user的验证方式;如果用share呢,是不用讄用户和密码了Q?/span>
[linuxsir]
q个在Windows中显C出来是׃n的目录;
path = 可以讄要共享的目录攑֜哪里Q?/span>
writeable 是否可写Q这里我讄为可写;
browseable 是否可以览Q可以;可以览意味着Q我们在工作l下能看到共享文件夹。如果您不想昄出来Q那p|ؓ browseable=no
guest ok 匿名用户以guestw䆾是登录;
W二步:建立相应目录q授权;
[root@localhost ~]# mkdir -p /opt/linuxsir
[root@localhost ~]# chown -R nobody:nobody /opt/linuxsir
注释Q?/span>
关于授权nobodyQ我们先用id命o查看了nobody用户的信息,发现他的用户l也是nobodyQ我们要以这个ؓ准。有些系lnobody用户lƈ非是nobody Q?/span>
W三步:启动smbd和nmbd服务器;
[root@localhost ~]# nmbd
Q?span>1Q?span>RequestDispatcher.forwardҎ只能请求{发给同一?span>WEB应用中的lgQ?span>HttpServletResponse.sendRedirect Ҏ不仅可以重定向到当前应用E序中的其他资源Q还可以重定向到同一个站点上的其他应用程序中的资源,甚至是用绝?span>URL重定向到其他站点的资源。如果传递给HttpServletResponse.sendRedirect Ҏ的相?span>URL以?span>/”开_它是相对于整?span>WEB站点的根目录Q如果创?span>RequestDispatcher对象时指定的相对URL以?span>/”开_它是相对于当?span>WEB应用E序的根目录?/span>
Q?span>2Q调?span>HttpServletResponse.sendRedirectҎ重定向的讉Kq程l束后,览器地址栏中昄?span>URL会发生改变,由初始的URL地址变成重定向的目标URLQ而调?span>RequestDispatcher.forward Ҏ的请求{发过E结束后Q浏览器地址栏保持初始的URL地址不变?/span>
Q?span>3Q?span>HttpServletResponse.sendRedirectҎҎ览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一?span>URL的访问请求,q个q程好比有个l号叫“浏览器”的人写信找张三借钱Q张三回信说没有钱,让“浏览器”去找李四借,q将李四现在的通信地址告诉l了“浏览器 ”。于是,“浏览器”又按张三提供通信地址l李四写信借钱Q李四收C后就把钱汇给了“浏览器”。可见,“浏览器”一共发Z两封信和收到了两ơ回复, “浏览器”也知道他借到的钱李四之手?span>RequestDispatcher.forwardҎ在服务器端内部将h转发l另外一个资源,览器只知道发出了请求ƈ得到了响应结果,q不知道在服务器E序内部发生了{发行为。这个过E好比Ԓ号叫“浏览器”的人写信找张三借钱Q张三没有钱Q于是张三找李四借了一些钱Q甚臌可以加上自己的一些钱Q然后再这些钱汇给了“浏览器”。可见,“浏览器”只发出了一信和收C一ơ回复,他只知道从张三那里借到了钱Qƈ不知道有一部分钱出自李四之手?/span>
Q?span>4Q?span>RequestDispatcher.forwardҎ的调用者与被调用者之间共享相同的request对象?span>response对象Q它们属于同一个访问请求和响应q程Q?span>HttpServletResponse.sendRedirectҎ调用者与被调用者用各自的request对象?span>response对象Q它们属于两个独立的讉Kh和响应过E。对于同一?span>WEB应用E序的内部资源之间的跌{Q特别是跌{之前要对hq行一些前期预处理Qƈ要?span>HttpServletRequest.setAttributeҎ传递预处理l果Q那应该?span>RequestDispatcher.forwardҎ。不?span>WEB应用E序之间的重定向Q特别是要重定向到另外一?span>WEB站点上的资源的情况,都应该?span>HttpServletResponse.sendRedirectҎ?/span>
Q?span>5Q无论是RequestDispatcher.forwardҎQ还?span>HttpServletResponse.sendRedirectҎQ在调用它们之前Q都不能有内容已l被实际输出C客户端。如果缓冲区中已l有了一些内容,q些内容被从缓冲区中清除?br />
怎么选择是重定向q是转发呢?通常情况下{发更快,而且能保持request内的对象Q所以他是第一选择。但是由于在转发之后Q浏览器中URL仍然指向开始页面,此时如果重蝲当前面Q开始页面将会被重新调用。如果你不想看到q样的情况,则选择转发?br />不要仅仅Z把变量传C一个页面而用session作用域,那会无故增大变量的作用域Q{发也许可以帮助你解决q个问题。?br /> 重定向:以前的request中存攄变量全部失效Qƈq入一个新的request作用域。?br /> 转发Q以前的request中存攄变量不会失效Q就像把两个面拼到了一赗?/span>
Q.
a計書の作成について
1
つのa計書はQつのレビュヹ{きる成果物です。不同の使用者向け、設a書に該当の内容を明aすくVであります?/span>
?span style="FONT: 7pt 'Times New Roman'">
SD
の方?/span>
SD
階段の設a書は構成設a書です。書く時に、以下の観点を注意されます?/span>
?span style="FONT: 7pt 'Times New Roman'">
このa計書の使用者は
MK1
の担当者と
MK3
の担当者です。この設a書によって、ソヹ{は作成することができます。しかも他の問題を考慮する必要がありません?/span>
MK3
の担当者はこのa計書よりテわVa計書を作成することができます?/span>
?span style="FONT: 7pt 'Times New Roman'">
このa計書の詟끗い程度、品質の要求の高低と時間に係ります。最低の要求は、すくVのクラスとメソッドにインѝェーわVパラメーѝはっきり書きなければならなくて、簡単な処理フロヹ{書きます。しかもa語は曖昧な意呟끌あることができません?/span>
?span style="FONT: 7pt 'Times New Roman'">
このa計書を書く時、きっと先にクラわVメソッドの一覧を作成して、且つ根拠を書き出します。また?/span>
FD
の設a書のすくVの機能を全部含ます?/span>
?span style="FONT: 7pt 'Times New Roman'">
a計書を書く時、条理があって、入力から出力ま?/span>
1
つのわVップずつを説明します。一飛た끮ロジックがあることができません?/span>
?span style="FONT: 7pt 'Times New Roman'">
a語は分かり易くなって、多性があることができません。且つレビュヹ{易いために多くの細い炏V注意します?/span>
?span style="FONT: 7pt 'Times New Roman'">
BD
の方面。これらは近?/span>
FJ
Dѝ
BD
a計書から習いました。間違いの場所を指摘してください?/span>
?span style="FONT: 7pt 'Times New Roman'">
BD
階段の設a書は基本設a書です。ユヹ{Q例えばQ本製品の用者)の立場からこの設a書を作成します。ユヹ{のすくVの需要に寑ֿして、説明を行います?/span>
?span style="FONT: 7pt 'Times New Roman'">
テムのソフトウェア、ハヹ{ウェアの規模性と複雑性に対して、設a書に対応することがあるかどうか?/span>
?span style="FONT: 7pt 'Times New Roman'">
テムの拡弉|、設a書に対応することがあるかどうか?/span>
?span style="FONT: 7pt 'Times New Roman'">
使用された技術の複雑性と難しくに対して、製品の高い品質のために、設a書に対応することがあるかどうか?/span>
?span style="FONT: 7pt 'Times New Roman'">
性能とセキュリティなど方面、設a書に対応することがあるかどうか?/span>
?span style="FONT: 7pt 'Times New Roman'">
この製品はどれくらいの時間をѝことができます。設a書に対応することがあるかどうか?/span>
?span style="FONT: 7pt 'Times New Roman'">
ユーザの需要が曖昧の場合、設a書に対応することがあるかどうか。そして増えるまたは減らす作業量、複雑性などに対して、考えることがあるかどうか?/span>
?span style="FONT: 7pt 'Times New Roman'">
a語は分かり易くなって、多性があることができません。設a書を書く時、どのようにレビューし易いと考えます?/span>
?span style="FONT: 7pt 'Times New Roman'">
FD
の方面?/span>
?span style="FONT: 7pt 'Times New Roman'">
FD
階段の設a書は機能設a書です。主に基本設a書を対応して、コミ냔ューѝ上でどのように実現します?/span>
?span style="FONT: 7pt 'Times New Roman'">
基本a計書と構成a計書の間すくVの設aは能a計書の内容だと思います。この設a書は開のҎです。内容必ずは合理的と正しいです?/span>
?span style="FONT: 7pt 'Times New Roman'">
a語は分かり易くなって、多性があることができません。且つレビュヹ{易いために多くの細い炏V注意します?/span>
Q.
レビューについて
?span style="FONT: 7pt 'Times New Roman'">
a計書では、プロジェクトと会社の規約によって?/span>
Excel
版文書または
Word
版文書があります?/span>
Excel
版の文書は分かり易くて、しかしレビューに役立ちません?/span>
Word
版の文書はレビュヹ{役立って、しかし分かることは苦労しています?/span>
?span style="FONT: 7pt 'Times New Roman'">
a計書の難しい程度と会社のデヹ{によって、予定するバッグ数を定します?/span>
?span style="FONT: 7pt 'Times New Roman'">
a計書を書きiわった後に、自己レビュヹ{て、向かうしレビュヹ{ることが必要です?/span>
?span style="FONT: 7pt 'Times New Roman'">
レビュー前に、本回のレビュー観点を明します?/span>
?span style="FONT: 7pt 'Times New Roman'">
レビューの時に、担当者はa計書を読むんで、レビュDは問題を指摘します。問のѝプによって、分します?/span>
?span style="FONT: 7pt 'Times New Roman'">
レビューiわったから、レビュー結果報告書と結果分析報告を作成します。指摘されたバッグ、バッグの原因、予定するバッグ数によって、分析して、見解を提出します。また、もう一回レビュヹ{必要かどうかとレビュD炏V定します。合aするバッグ数は予定するバッグ数より大きくまたはなく場合、管理者はこの問題を重視する必要があります?/span>
?span style="FONT: 7pt 'Times New Roman'">
レビューi果報告書とi果分析報告によって、管理者はa計書の品質と担当者の問題を見ます?/span>
Q.
プロジェクト理について?/span>
?span style="FONT: 7pt 'Times New Roman'">
オフアので、プロジェクト内宏V明確にしなければなりません。明しない作業があることができません?/span>
?span style="FONT: 7pt 'Times New Roman'">
プロジェクトの開発の中で?/span>
2
つの表を保守する必要があります。問一覧表と作業一覧表です?/span>
?span style="FONT: 7pt 'Times New Roman'">
それぞれのデヹ{を取得します。例えばQ新規開?/span>
1k
わVップ当たり各階段の指標、レビュヹ{バッグ数{?/span>
?span style="FONT: 7pt 'Times New Roman'">
MK2
?/span>
MK3
?/span>
CT
?/span>
ST
それぞれのテわV観点を明しました。テわVされる内宏VソーわV構成設a書、機能設a書、基本設a書です?/span>
?span style="FONT: 7pt 'Times New Roman'">
R票で進捗情報を表Cします?/span>
?span style="FONT: 7pt 'Times New Roman'">
プロジェクト会議に問をa録して、次の会議にすべての問題を確認します?/span>
1.1 - Server
A Server element represents the entire Catalina servlet container. (Singleton)
1.2 - Service
A Service element represents the combination of one or more Connector components that share a single Engine
Service是这样一个集合:它由一个或者多个Connectorl成Q以及一个EngineQ负责处理所有Connector所获得的客戯?br />
1.3 - Connector
一个Connector在某个指定端口上侦听客戯求,q将获得的请求交lEngine来处理,从Engine处获得回应ƈq回客户
TOMCAT有两个典型的ConnectorQ一个直接侦听来自browser的httphQ一个侦听来自其它WebServer的请?br />Coyote Http/1.1 Connector 在端?080处侦听来自客户browser的httph
Coyote JK2 Connector 在端?009处侦听来自其它WebServer(Apache)的servlet/jsp代理h
1.4 - Engine
The Engine element represents the entire request processing machinery associated with a particular Service
It receives and processes all requests from one or more Connectors
and returns the completed response to the Connector for ultimate transmission back to the client
Engine下可以配|多个虚拟主机Virtual HostQ每个虚拟主机都有一个域?br />当Engine获得一个请求时Q它把该h匚w到某个Host上,然后把该h交给该Host来处?br />Engine有一个默认虚拟主机,当请求无法匹配到M一个Host上的时候,交l该默认Host来处?br />
1.5 - Host
代表一个Virtual HostQ虚拟主机,每个虚拟L和某个网l域名Domain Name相匹?br />每个虚拟L下都可以部v(deploy)一个或者多个Web AppQ每个Web App对应于一个ContextQ有一个Context path
当Host获得一个请求时Q将把该h匚w到某个Context上,然后把该h交给该Context来处?br />匚w的方法是“最长匹配”,所以一个path==""的Context成Host的默认Context
所有无法和其它Context的\径名匚w的请求都最l和该默认Context匚w
1.6 - Context
一个Context对应于一个Web ApplicationQ一个Web Application׃个或者多个Servletl成
Context在创建的时候将Ҏ配置文g$CATALINA_HOME/conf/web.xml?WEBAPP_HOME/WEB-INF/web.xml载入Servletc?br />当Context获得hӞ在自己的映表(mapping table)中寻扄匚w的Servletc?br />如果扑ֈQ则执行该类Q获得请求的回应Qƈq回
该文件描qC如何启动Tomcat Server
一个Context对应于一个Web AppQ每个Web App是由一个或者多个servletl成?br />当一个Web App被初始化的时候,它将用自qClassLoader对象载入“部|配|文件web.xml”中定义的每个servletc?br />它首先蝲入在$CATALINA_HOME/conf/web.xml中部|的servletc?br />然后载入在自qWeb App根目录下的WEB-INF/web.xml中部|的servletc?br />web.xml文g有两部分Qservletcd义和servlet映射定义
每个被蝲入的servletc都有一个名字,且被填入该Context的映表(mapping table)中,和某UURL PATTERN对应
当该Context获得hӞ查询mapping tableQ找到被h的servletQƈ执行以获得请求回?br />
分析一下所有的Context׃n的web.xml文gQ在其中定义的servlet被所有的Web App载入
假设来自客户的请求ؓQ?br />http://localhost:8080/wsota/wsota_index.jsp
<!----------------------------------------------------------------------------------------------->
<web-app>
<!-- 概述Q?br /> 该文件是所有的WEB APPq的部|配|文Ӟ
每当一个WEB APP被DEPLOYQ该文g都将先被处理Q然后才是WEB APP自己?WEB-INF/web.xml
-->
<!-- +-------------------------+ -->
<!-- | servletcd义部? | -->
<!-- +-------------------------+ -->
<!-- DefaultServlet
当用LHTTPh无法匚wM一个servlet的时候,该servlet被执?br /> URL PATTERN MAPPING : /
-->
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>
org.apache.catalina.servlets.DefaultServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- InvokerServlet
处理一个WEB APP中的匿名servlet
当一个servlet被编写ƈ~译攑օ/WEB-INF/classes/中,却没有在/WEB-INF/web.xml中定义的时?br /> 该servlet被调用,把匿名servlet映射?servlet/ClassName的Ş?br /> URL PATTERN MAPPING : /servlet/*
-->
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- JspServlet
当请求的是一个JSP面的时候(*.jspQ该servlet被调?br /> 它是一个JSP~译器,请求的JSP面~译成ؓservlet再执?br /> URL PATTERN MAPPING : *.jsp
-->
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>WARNING</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<!-- +---------------------------+ -->
<!-- | servlet映射定义部分 | -->
<!-- +---------------------------+ -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<!-- +------------------------+ -->
<!-- | 其它部分Q略d | -->
<!-- +------------------------+ -->
... ... ... ...
</web-app>
<!----------------------------------------------------------------------------------------------->
<!----------------------------------------------------------------------------------------------->
<!-- 启动Server
在端?005处等待关闭命?br /> 如果接受?SHUTDOWN"字符串则关闭服务?br /> -->
<Server port="8005" shutdown="SHUTDOWN" debug="0">
<!-- Listener ???
目前没有看到q里
-->
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" debug="0"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" debug="0"/>
<!-- Global JNDI resources ???
目前没有看到q里Q先略去
-->
<GlobalNamingResources>
... ... ... ...
</GlobalNamingResources>
<!-- Tomcat的Standalone Service
Service是一lConnector的集?br /> 它们q一个Engine来处理所有Connector收到的请?br /> -->
<Service name="Tomcat-Standalone">
<!-- Coyote HTTP/1.1 Connector
className : 该Connector的实现类是org.apache.coyote.tomcat4.CoyoteConnector
port : 在端口号8080处侦听来自客户browser的HTTP1.1h
minProcessors : 该Connector先创?个线E等待客戯求,每个h׃个线E负?br /> maxProcessors : 当现有的U程不够服务客户hӞ若线EL不75个,则创建新U程来处理请?br /> acceptCount : 当现有线E已l达到最大数75Ӟ为客戯求排?br /> 当队列中h数超q?00Ӟ后来的请求返回Connection refused错误
redirectport : 当客戯求是httpsӞ把该h转发到端?443?br /> 其它属性略
-->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080"
minProcessors="5" maxProcessors="75" acceptCount="100"
enableLookups="true"
redirectPort="8443"
debug="0"
connectionTimeout="20000"
useURIValidationHack="false"
disableUploadTimeout="true" />
<!-- Engine用来处理Connector收到的Httph
它将匚wh和自q虚拟LQƈ把请求{交给对应的Host来处?br /> 默认虚拟L是localhost
-->
<Engine name="Standalone" defaultHost="localhost" debug="0">
<!-- 日志c,目前没有看到Q略d -->
<Logger className="org.apache.catalina.logger.FileLogger" .../>
<!-- RealmQ目前没有看刎ͼ略去?-->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" .../>
<!-- 虚拟Llocalhost
appBase : 该虚拟主机的根目录是webapps/
它将匚wh和自qContext的\径,q把h转交l对应的Context来处?br /> -->
<Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- 日志c,目前没有看到Q略d -->
<Logger className="org.apache.catalina.logger.FileLogger" .../>
<!-- ContextQ对应于一个Web App
path : 该Context的\径名?"Q故该Context是该Host的默认Context
docBase : 该Context的根目录是webapps/mycontext/
-->
<Context path="" docBase="mycontext" debug="0"/>
<!-- 另外一个ContextQ\径名?wsota -->
<Context path="/wsota" docBase="wsotaProject" debug="0"/>
</Host>
</Engine>
</Service>
</Server>
<!----------------------------------------------------------------------------------------------->