Menu
Woocommerce Menu

列举常用的配置,EXT2文件系统详述

0 Comment


一、交叉编译

文件系统特性

SpringMVC配置web.xml文件详解(列举常用的配置),springmvcweb.xml

常用的web.xml的配置

1、Spring 框架解决字符串编码问题:过滤器 CharacterEncodingFilter(filter-name) 
2、在web.xml配置监听器ContextLoaderListener(listener-class) 
ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。 
3、部署applicationContext的xml文件:contextConfigLocation(context-param下的param-name) 
4、DispatcherServlet是前置控制器,配置在web.xml文件中。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller来处理。 
DispatcherServlet(servlet-name、servlet-class、init-param、param-name(contextConfigLocation)、param-value) 
在DispatcherServlet的初始化过程中,框架会在web应用的
WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml
的配置文件,生成文件中定义的bean

(1) 配置filter过滤器

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" 
 3     xmlns="http://java.sun.com/xml/ns/javaee" 
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7 
 8 <!-- 解决Spring框架中从页面传来的字符串的中文乱码问题
 9    Spring框架给我们提供过滤器CharacterEncodingFilter  
10    这个过滤器就是针对于每次浏览器请求进行过滤的,然后再其之上添加了父类没有的功能即处理字符编码。  
11    其中encoding用来设置编码格式,forceEncoding用来设置是否理会 request.getCharacterEncoding()方法,设置为true则强制覆盖之前的编码格式,根据需要设置。-->  
12     <filter>  
13         <filter-name>characterEncodingFilter</filter-name>
14         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
15         <init-param>  
16             <param-name>encoding</param-name>  // 用来指定一个具体的字符集 
17             <param-value>UTF-8</param-value>  
18         </init-param>  
19         <init-param>  
20             <param-name>forceEncoding</param-name>  //true:无论request是否指定了字符集,都使用encoding;false:如果request已指定一个字符集,则不使用encoding 
21             <param-value>true</param-value>  
22         </init-param>  
23     </filter>  
24     <filter-mapping>  
25         <filter-name>characterEncodingFilter</filter-name>  
26         <url-pattern>/*</url-pattern>  
27     </filter-mapping>  

配置节点详解:

<filter> : 指定一个过滤器

<filter-name> : 为过滤器指定一个名字,该元素不能为空

<filter-class> : 指定过滤器的完整的限定类名

<init-param> : 为过滤器指定初始化参数

<param-name> : 指定参数的名字

<param-value> : 指定参数的值

<filter-mapping> : 用于设置一个Filter所负责拦截的资源

<filter-name> :
用于设置filter的注册名称,该值必须是在<filter>元素中声明过的过滤器名称

<url-pattern> :
设置filter所拦截的请求路径(过滤器关联的url样式)

(2) Servlet配置

 1      <servlet> 
 2         <servlet-name>DispatcherServlet</servlet-name>  // 指定一个servlet名称
 3         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  //指定servlet的类全路径
 4         <init-param>  
 5             <param-name>contextConfigLocation</param-name>  //初始化参数名
 6             <param-value>classpath:spring/dispatcher-servlet.xml</param-value>  //初始化参数值
 7         </init-param>  
 8         <load-on-startup>1</load-on-startup>  //指定当web容器启动时,加载servlet的顺序
 9     </servlet>  
10     <servlet-mapping>  
11         <servlet-name>DispatcherServlet</servlet-name>   //servlet名称       
12         <url-pattern>/</url-pattern>   //映射路径
13     </servlet-mapping>  

配置节点详解:

1)使用SpringMVC配置DispatcherServlet是第一步,DispatcherServlet是一个Servlet,,所以可以配置多个DispatcherServlet

2)DispatcherServlet是前置控制器,配置在web.xml文件中。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。

3) <servlet>
在DispatcherServlet的初始化过程中,框架会在web应用的
WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml
的配置文件,生成文件中定义的bean。

4) <servlet-name> :  servlet名称

5) <servlet-class>** :  servlet类全路径

6)** <param-name>** : 初始化参数名

7)** <param-value>** : 初始化参数值

8)** <load-on-startup>**
: 指定当Web应用启动时,加载Servlet的顺序

9)** <url-pattern>** : 映射路径

(3) 指定欢迎页面配置

 

1 <welcome-file-list>
2     <welcome-file>hello.jsp</welcome-file>  //指定欢迎页面
3 </welcome-file-list>

 

(4) 监听器配置

 

1 <listener>
2       <listerner-class>org.springframework.web.context.ContextLoaderListener</listener-class>
3 </listener>

 

(5) 会话超时配置

 

<session-config>
      <session-timeout>100</session-timeout>
</session-config>

 

(6) 配置错误页面

1) 通过错误码来配置error-page

 

1 <!--配置了当系统发生404错误时,跳转到错误处理页面NotFound.jsp-->
2 <error-page>
3        <error-code>404</error-code>
4        <location>/NotFound.jsp</location>
5 </error-page>

 

2) 通过异常的类型来配置error-page

<!--配置了当系统发生java.lang.NullException(即空指针异常)时,跳转到错误处理页面error.jsp-->
<error-page>
       <exception-type>java.lang.NullException</exception-type>
       <location>/error.jsp</location>
</error-page>

最后配置一个简单的web.xml即可实现SpeingMVC框架

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" 
 3     xmlns="http://java.sun.com/xml/ns/javaee" 
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7   <welcome-file-list>
 8     <welcome-file>hello.jsp</welcome-file>
 9   </welcome-file-list>
10   <servlet>
11       <servlet-name>SpringMVC</servlet-name>
12       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
13       <load-on-startup>1</load-on-startup>
14   </servlet>
15   <servlet-mapping>
16       <servlet-name>SpringMVC</servlet-name>
17       <url-pattern>/</url-pattern>
18   </servlet-mapping>
19 </web-app>

有需要补充的还需各位阅读的大牛们给点建议!
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!另外您也可以选择【关注我】,可以很方便找到我!
本文版权归作者和博客园共有,来源网址:

 

常用的web.xml的配置 1、Spring框架解决字符串编码问题:过滤器
CharacterEncodingFilt…

   
在一个平台上生成另一个平台上的可执行代码。为什么要大费周折的进行交叉编译呢?一句话:不得已而为之。有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行所需要的编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。

举例来说,Windows 98 以前的微软操作系统主要利用的文件系统是 FAT (或
FAT16),Windows 2000 以后的版本有所谓的 NTFS 文件系统,至于 Linux
的正统文件系统则为 Ext2 (Linux second extended file system,
ext2fs)这一个。此外,在默认的情况下,Windows 操作系统是不会认识 Linux 的
Ext2 的。

     
要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross
compilation tool
chain),然后用这个交叉编译工具链编译源代码,最终生成可在目标平台上运行的代码。

那么文件系统是如何运行的呢?这与操作系统的文件数据有关。较新的操作系统的文件数据除了文件实际内容外,
通常含有非常多的属性,例如 Linux
操作系统的文件权限(rwx)与文件属性(拥有者、群组、时间参数等)。
文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到
inode 中,至于实际数据则放置到 data block 区块中。
另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括
inode 与 block 的总量、使用量、剩余量等。

    常见的交叉编译例子如下:

每个 inode 与 block 都有编号,至于这三个数据的意义可以简略说明如下:

1、在Windows PC上,利用ADS(ARM
开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。

superblock:记录此 filesystem
的整体信息,包括inode/block的总量、使用量、剩余量,
以及文件系统的格式与相关信息等;

2、在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux
ARM平台的可执行代码。

inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的
block 号码;

3、在Windows
PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM
CPU的可执行代码。

block:实际记录文件的内容,若文件太大时,会占用多个 block 。

二、名词解释

我们将 inode 与 block
区块用图解来说明一下,如下图所示,文件系统先格式化出 inode 与 block
的区块,假设某一个文件的属性与权限数据是放置到 inode 4
号(下图较小方格内),而这个 inode 记录了文件数据的实际放置点为 2, 7, 13,
15 这四个 block
号码,此时我们的操作系统就能够据此来排列磁盘的阅读顺序,可以一口气将四个
block 内容读出来! 那么数据的读取就如同下图中的箭头所指定的模样了。

Linux下的大多数软件包都使用Autoconf/Automake工具自动生成Makefile,只要使用“./configure”,“make”,“make
install”就可以把程序安装到Linux系统中去了。编译第三方源代码时,可以看下工程中的readme和install文件,一般情况下都会写编译步骤。

银河国际网址手机版 1

1、./configure 常用参数  [–build] | [–host] | [–target] |
[–prefix] | [–help]

这种数据存取的方法我们称为索引式文件系统(indexed
allocation)。那有没有其他的惯用文件系统可以比较一下啊?
有的,那就是我们惯用的闪盘(闪存),闪盘使用的文件系统一般为 FAT 格式。FAT
这种格式的文件系统并没有 inode 存在,所以 FAT 没有办法将这个文件的所有
block 在一开始就读取出来。每个 block 号码都记录在前一个 block 当中,
他的读取方式有点像底下这样:

注意:host和–host不是一个意思,host是指宿主机,即编辑和编译程序的平台,是个名词;–host是设置执行文件所运行的主机,是个动词。

银河国际网址手机版 2

>> ./configure: 用来生成对应的 Makefile;

上图中我们假设文件的数据依序写入1->7->4->15号这四个 block
号码中, 但这个文件系统没有办法一口气就知道四个 block
的号码,他得要一个一个的将 block 读出后,才会知道下一个 block 在何处。
如果同一个文件数据写入的 block
分散的太过厉害时,则我们的磁盘读取头将无法在磁盘转一圈就读到所有的数据,
因此磁盘就会多转好几圈才能完整的读取到这个文件的内容!

>> –build:
执行代码编译的主机,正常的话就是你的主机系统。若无指定使用host的值;

data block (数据区块)

>> –host: 编译出来的二进制程序所执行的主机,
交叉编译工具链的前缀。因为绝大多数是如果本机编译就本机执行,所以这个值就等于build。但是交叉编译的时候build和host需要设置不同值,用host指定运行主机,即host
!= build的时候编译才是交叉编译。若无指定将会运行`config.guess’来检测;

data block 是用来放置文件内容数据地方,在 Ext2 文件系统中所支持的 block
大小有 1K, 2K 及 4K 三种而已。在格式化时 block 的大小就固定了,且每个
block 都有编号,以方便 inode 的记录啦。 不过要注意的是,由于 block
大小的差异,会导致该文件系统能够支持的最大磁盘容量与最大单一文件容量并不相同。
因为 block 大小而产生的 Ext2 文件系统限制如下:

>> –prefix: 安装目录,比如 –prefix=/usr 意思是将该软件安装在
/usr 下面,执行文件就会安装在 /usr/bin (而不是默认的
/usr/local/bin),资源文件就会安装在
/usr/share(而不是默认的/usr/local/share);

银河国际网址手机版 3

>> –help: 查看参数;

除此之外 Ext2 文件系统的 block 还有什么限制呢?有的!基本限制如下:

>> –target:
这个参数比较特殊,表示需要处理的目标平台名称,主要在程序语言工具如编译器和汇编器上下文中起作用,若无指定使用host的值。一般用来编译工具,比如给arm开发板编译一个可以处理mips程序的gcc,那么–target=mips;

原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化);

>>>> 举例说明:编译gcc

每个 block 内最多只能够放置一个文件的数据;

>> ./configure –build=i386-linux –host=arm-linux
–target=mipsel-linux –prefix=$(pwd)/_install

承上,如果文件大于 block 的大小,则一个文件会占用多个 block 数量;

用i386-linux的编译器进行gcc的编译,编译出的gcc运行在arm-linux,
编译结果存放到$(pwd)/_install路径下,编译出的gcc用来编译能够在mipsel-linux下运行的代码。

承上,若文件小于 block ,则该 block
的剩余容量就不能够再被使用了(磁盘空间会浪费)。

2、Makefile包含了一些基本的预先定义的操作:

inode table (inode 表格)

>>make: 根据Makefile编译源代码,连接,生成目标文件,可执行文件;

再来讨论一下 inode 这个玩意儿吧!如前所述 inode
的内容在记录文件的属性以及该文件实际数据是放置在哪几号 block 内!
基本上,inode 记录的文件数据至少有底下这些:

>>make clean:
清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件;

该文件的存取模式(read/write/excute);

>>make distclean: 类似make
clean,但同时也将configure生成的文件全部删除掉,包括Makefile;

该文件的拥有者与群组(owner/group);

银河国际网址手机版,>>make test / make check: 检查make,确保make没有出错,一般在make
install之前执行;

该文件的容量;

>>make install:
将编译成功的可执行文件安装到指定目录中,一般为/usr/local/bin目录;

该文件创建或状态改变的时间(ctime);

>>make dist: 产生发布软件包文件(即distribution
package)。这个命令将会将可执行文件及相关文件打包成一个tar.gz压缩的文件用来作为发布软件的软件包。它会在当前目录下生成一个名字类似“PACKAGE-VERSION.tar.gz”的文件。PACKAGE和VERSION,是我们在configure.in中定义的AM_INIT_AUTOMAKE(PACKAGE,
VERSION);

最近一次的读取时间(atime);

>>make distcheck:
生成发布软件包并对其进行测试检查,以确定发布包的正确性。这个操作将自动把压缩包文件解开,然后执行configure命令,并且执行make,来确认编译不出现错误,最后提示你软件包已经准备好,可以发布了;

最近修改的时间(mtime);

三、交叉编译源代码

定义文件特性的旗标(flag),如 SetUID…;

1、环境

该文件真正内容的指向 (pointer);

Ubuntu

inode 的数量与大小也是在格式化时就已经固定了,除此之外 inode
还有些什么特色呢?

2、树莓派交叉编译工具安装

每个 inode 大小均固定为 128 bytes;

step1. 下载树莓派交叉编译工具

每个文件都仅会占用一个 inode 而已;

step2. 将源码放到各用户都能share的文件夹下,如/usr/tools

承上,因此文件系统能够创建的文件数量与 inode 的数量有关;

step3.
将交叉编译工具的路径加到环境变量中,为了以后启动不用再设置,我加到了bashrc中

系统读取文件时需要先找到 inode,并分析 inode
所记录的权限与用户是否符合,若符合才能够开始实际读取 block 的内容。

1 $nano ~/.bashrc
2 #在文件的末尾加上: export
PATH=$PATH:/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
3 $source .bashrc

我们约略来分析一下 inode / block 与文件大小的关系好了。inode
要记录的数据非常多,但偏偏又只有 128bytes 而已, 而 inode 记录一个 block
号码要花掉 4byte ,假设我一个文件有 400MB 且每个 block 为 4K 时,
那么至少也要十万笔 block 号码的记录呢!inode
哪有这么多可记录的信息?为此我们的系统很聪明的将 inode 记录 block
号码的区域定义为12个直接,一个间接,
一个双间接与一个三间接记录区。这是啥?我们将 inode 的结构画一下好了。

step4. 检测是否安装成功

银河国际网址手机版 4

way1:

上图最左边为 inode 本身 (128 bytes),里面有 12 个直接指向 block
号码的对照,这 12 笔记录就能够直接取得 block 号码啦!
至于所谓的间接就是再拿一个 block 来当作记录 block
号码的记录区,如果文件太大时, 就会使用间接的 block 来记录编号。如上图
1.3.2 当中间接只是拿一个 block 来记录额外的号码而已。
同理,如果文件持续长大,那么就会利用所谓的双间接,第一个 block
仅再指出下一个记录编号的 block 在哪里, 实际记录的在第二个 block
当中。依此类推,三间接就是利用第三层 block 来记录编号!

$arm #双tab

Superblock (超级区块)

显示以下内容

Superblock 是记录整个 filesystem 相关信息的地方, 没有 Superblock
,就没有这个 filesystem 了。他记录的信息主要有:

way2:

block 与 inode 的总量;

$arm-linux-gnueabihf-gcc -v
#能显示正确信息

未使用与已使用的 inode / block 数量;

$arm-linux-gnueabihf-g++ -v
#能显示正确信息

block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128 bytes);

注意:交叉编译时,如果出现arm-linux-gnueabihf-XXX找不到,确定arm-linux-gnueabihf-XXX
-v 是否能输出正确信息,如果能,可以切到root下进行编译

filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck)
的时间等文件系统的相关信息;

三、编译源代码

一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0
,若未被挂载,则 valid bit 为 1 。

1、在写编译脚本时,一定要确保编译器写的是交叉编译的编译器。比如比较常用的Makefile,

[root@www ~]# dumpe2fs [-bh] 装置文件名

1 demo: $(obj)
2    $(CXX) -o $@ $^ $(LDFLAGS)

选项与参数:

其中的CXX必须是arm-linux-gnueabihf-g++才能编译出正确的在树莓派上的可执行文件。

-b :列出保留为坏轨的部分(一般用不到吧!?)

2、编译第三方库

-h :仅列出 superblock 的数据,不会列出其他的区段内容!

如果你想设置全局的CC和CXX变量,在每次打开一个新的Terminal时,输入以下命令:

范例:找出我的根目录磁盘文件名,并观察文件系统的相关信息

1 $export CC=arm-linux-gnueabihf-gcc 
2 $export CXX=arm-linux-gnueabihf-g++

[root@www ~]# df

其他的全局变量同上。

Filesystem    1K-blocks      Used Available Use% Mounted on

以下列几个常用的第三方库交叉编译步骤

/dev/hdc2      9920624  3822848  5585708  41% /

1>> sqlite3
sqlite-autoconf-3081002.tar.gz

/dev/hdc3      4956316    141376  4559108  4% /home

标签:,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图