- Linux系统编程(10)线程资源回收和互斥锁
流殇258
java开发语言
一、pthread_cancel函数pthread_cancel函数用于请求取消一个线程。当调用pthread_cancel时,它会向指定的线程发送一个取消请求。#includeintpthread_cancel(pthread_tthread);thread:要发送取消请求的线程标识符。成功时,返回0。失败时,返回一个错误号二、pthread_detach函数pthread_detach用于将线
- Linux线程 分离和同步与互斥 条件变量
yualian
linuxc语言服务器
Linux线程分离和同步与互斥条件变量1.分离线程2.线程互斥与互斥量3.线程同步与竞态条件4.pthread库与条件变量5.生产者-消费者1.分离线程什么是线程分离?线程分离是指线程在结束时,操作系统会自动回收其资源,而无需其他线程显式地等待它的结束或调用pthread_join函数。这种机制允许主线程不必关心子线程的状态,从而提高程序的并发性和可维护性。pthread_detach函数pthr
- 两个线程实现同步代码
Huai1230
c#
#include//1、定义条件变量pthread_cond_tcond;//11、定义互斥锁pthread_mutex_tmutex;//定义生产者线程void*task1(void*arg){sleep(1);printf("%#lx:生产了四辆小鹏汽车\n",pthread_self());//3、唤醒等待队列中的所有线程pthread_cond_broadcast(&cond);//退出线
- DPDK初始化
phone1126
linux
rte_eal_init│├──rte_cpu_is_supported:检查cpu是否支持│├──rte_atomic32_test_and_set:操作静态局部变量run_once确保函数只执行一次│├──pthread_self()获取主线程的线程ID,只是用于打印│├──eal_reset_internal_config:初始化内部全局配置变量structinternal_config│├
- Linux:获取线程的PID(TID、LWP)的几种方式
test1280
C-C++Linux其他分类线程PID线程TID线程LWP轻量级进程进程PID
Linux:获取线程的PID(TID、LWP)的几种方式在LinuxC/C++中通常是通过pthread库进行线程级别的操作。在pthread库中有函数:pthread_tpthread_self(void);它返回一个pthread_t类型的变量,指代的是调用pthread_self函数的线程的“ID”。怎么理解这个“ID”呢?这个“ID”是pthread库给每个线程定义的进程内唯一标识,是pt
- 互斥同步机制
愤怒的秃头鸟
java开发语言
1.思维导图2.互斥机制的演示#includecharstr[20];//创建互斥锁pthread_mutex_tmutex;//子线程void*task(void*arg){printf("子程序:tid=%#lx\n",pthread_self());inti=0;while(icharstr[100];//创建一个无名信号量、sem_tsem;//线程1(生产者)void*task1(voi
- 线程的创建与回收
ssz__
Linux学习笔记开发语言linux学习ubuntu
目录一、线程的创建进程:线程:线程特点:一个进程中的多个线程共享以下资源:每个线程私有的资源包括:Linux线程库:线程创建-pthread_create二、线程的参数传递线程结束-pthread_exit线程查看tid函数三、线程的回收线程回收-pthread_join:线程分离pthread_detach:四、线程回收内存演示一、线程的创建进程:进程有独立的地址空间Linux为每个进程创建ta
- linux线程重启
weixin_38849487
linuxpython运维
以下是获取线程id和重启指定线程的示例代码:#include#include//线程函数,用来打印线程IDvoid*print_thread_id(void*arg){printf("ThreadID:%lu\n",pthread_self());returnNULL;}intmain(){inti;pthread_tthreads[5];//创建5个线程,并获取线程IDfor(i=0;i#inc
- 基于多反应堆的高并发服务器【C/C++/Reactor】(中)线程池的启动和从线程池中取出一个反应堆实例
呵呵哒( ̄▽ ̄)"
基于多反应堆的高并发服务器C/C++/Reactor
一、线程池的启动//启动线程池voidthreadPoolRun(structThreadPool*pool){assert(pool&&!pool->isStart);if(pool->mainLoop->threadID!=pthread_self()){exit(0);}pool->isStart=true;if(pool->threadNum){for(inti=0;ithreadNum;
- 线程的资源回收:pthread_detach与pthread_cleanup_push/pthread_cleanup_pop的组合
symsyq
开发语言linuxc语言
线程退出单个线程可以通过3种方式退出,因此可以在不终止整个进程的情况下,停止它的控制流。1)线程可以简单地执行完后结束,返回值是线程的退出码。2)线程可以被同一进程中的其他线程用pthread_cancel所取消。3)线程调用pthread_exit。线程退出时需要回收资源,一方面回收线程本身的资源,另一方面还需要回收线程使用的特殊资源,例如互斥锁(回收互斥锁,也就是解锁),malloc开辟的空间
- pthread_detach(pthread_self())是一个用于将当前线程设置为分离状态的函数调用
Respect@
计算机Linux进阶笔记开发语言
pthread_detach(pthread_self())是一个用于将当前线程设置为分离状态的函数调用。具体解释如下:pthread_self():pthread_self是一个pthread库中的函数,用于获取当前线程的线程ID。pthread_detach():pthread_detach是一个pthread库中的函数,用于将线程设置为分离状态。分离状态的线程在退出时会自动释放资源,无需显式
- 浅析Linux之线程
飞翔的杨先生
linuxc语言开发语言物联网
目录概述程序进程线程区别特点线程共享资源线程非共享资源线程的优缺点线程号线程号查看是否有线程函数列表命令安装获取线程号pthread_self函数概述程序可执行文件进程操作系统分配资源的最小单位线程CPU调度的最小单位所以,线程是轻量级的进程(LWP:lightweightprocess),在Linux环境下线程的本质仍是进程。为了让进程完成一定的工作,进程必须至少包含一个线程。区别内核不区别,本
- 【阿里云】图像识别 智能分类识别 增加垃圾桶开关盖功能点和OLED显示功能点(二)
咖喱年糕
全志H616阿里云云计算图像识别语音识别pythonc语言vscode
一、增加垃圾桶开关盖功能环境准备二、PWM频率的公式三、pthread_detach分离线程,使其在退出时能够自动释放资源四、具体代码实现图像识别数据及调试信息wget-log打印日志文件五、增加OLED显示功能六、功能点实现语音交互视频一、增加垃圾桶开关盖功能实现功能:使用语音模块和摄像头在香橙派上做垃圾智能分类识别,同时根据识别结果开关不同的垃圾桶的盖子。环境准备在《语音模块和阿里云图像识别结
- Linux C 线程
江玖_
linuxlinuxc语言线程
线程概述线程和进程的异同如何选择使用进程还是线程函数获取进程自身ID pthread_self创建线程 pthread_create退出线程 pthread_exit线程等待 pthread_join四种线程模型1)单线程2)单线程3)双线程4)三线程概述 线程(英语:thread)是操作系统能够进行运算调度的最小单位(程序执行流的最小单元)。它被包含在进程之中,是进程中的实际运作单位。
- linux线程间的通信(pthread_cleanup_push和pthread_cleanup_pop,pthread_join,pthread_detach)
panamera12
线程可以安排他退出时需要调用的函数,这与进程可以用atexit函数安排进程退出时需要调用的函数是类似的。这样的函数称为线程清理处理程序,线程可以建立多个清理处理程序。处理程序记录在栈中,也就是说他们的执行顺序与他们注册的顺序相反。pthread_cleanup_push和pthread_cleanup_pop函数原型如下:头文件:#include函数原型:voidpthread_cleanup_p
- Linux c/c++服务器开发实践
有趣的我
服务器linuxc语言c++
在LinuxC++开发环境中,通常有两种方式来开发多线程程序,一种是利用POSIX多线程API函数来开发多线程程序,另外一种是利用C++自带线程类来开发程序。常见的与线程相关的基本API函数:API函数含义pthread_create创建线程pthread_exit线程终止自身执行pthread_join等待一个线程的结束pthread_self获取线程IDpthread_cancel取消另外一个
- 线程共享内存空间的代码验证
XXX_MRX
Linux系统编程——线程linuxc语言
在前面介绍线程时讲了线程是共享进程的内存空间的,接下来就举个代码示例进一步验证。#include#includeintg_data=0;void*func1(void*arg){printf("t1:%ldthreadiscreart\n",(unsignedlong)pthread_self());printf("t1:paramis%d\n",*((int*)arg));while(1){pr
- 5.5 其他方法
Mega_Li
c语言Pthreads
pthread_self()pthread_equal(thread1,thread2)pthread_self返回调用该方法的线程独有的,被系统分配的id;pthread_equal比较两个线程的id,如果不同返回0,否则返回非0值。注意由于线程的id对象为不透明的类型,我们无法直接使用C语言中的==来判断两个线程id是否相等,或者把id和其他的数值做比较。pthread_once(once_c
- 5.3 连接和分离线程
Mega_Li
Pthreadsc语言
方法pthread_join(thread,status)pthread_detach(thread)pthread_attr_setdetachstate(attr,detachstate)pthread_attr_getdetachstate(attr)连接连接(joining)是一种线程之间完成同步的方法,举例如下。pthread_join()方法会阻塞调用它的线程,直到相关的线程终止运行。
- Linux中的pid tid thread_id
IvanGuan
你是不是也被pid,tid,thread_id这三个东西弄晕了。每个进程都有数自己的pid,可以用getpid()得到的。同样在我们调用pread_create的系统也线程分配了thread_id,可以使用pthread_self()得到。但是除了这两个id还有一个id比较特殊即线程的PID。在内核中,每个线程都有自己的PID,要得到线程的PID,必须用syscall(SYS_gettid);实
- linux--线程共享内存
清源子呀
嵌入式Linux学习linuxc语言
Linux线程共享内存空间是指多个线程可以访问同一个内存区域,这些线程共享该内存区域的内容。代码:#include#include//sharememoryintdata=0;//定义一个全局变量datavoid*fun1(void*arg){printf("t1:threadidis:%ld\n",(unsignedlong)pthread_self());printf("t1:isparam:
- pthead 创建与销毁详解 pthread_create pthread_join pthread_exit pthread_detach
luohaha66
并发编程linuxc语言
pthead创建与销毁pthread_create函数原型:intpthread_create(pthread_t*thread,constpthread_attr_t*attr,void*(*start_routine)(void*),void*arg);thread:指向pthread_t类型的指针,用于存储新线程的标识符。attr:指向pthread_attr_t类型的指针,用于设置新线程的
- linux c 获取进程p id,详解Linux获取线程的PID(TID、LWP)的几种方式
Effie Zzz
linuxc获取进程pid
在LinuxC/C++中通常是通过pthread库进行线程级别的操作。在pthread库中有函数:pthread_tpthread_self(void);它返回一个pthread_t类型的变量,指代的是调用pthread_self函数的线程的“ID”。怎么理解这个“ID”呢?这个“ID”是pthread库给每个线程定义的进程内唯一标识,是pthread库维持的。由于每个进程有自己独立的内存空间,故
- 零基础Linux_22(多线程)线程控制和和C++的多线程和笔试选择题
GR_C
⑥零基础Linux操作系统linux运维c++1024程序员节
目录1.线程控制1.1线程创建(pthread_create)1.2线程结束(pthread_exit)1.3线程等待(pthread_join)1.4线程取消(pthread_cancel结束)1.5线程tid(pthread_self())1.6线程局部存储(__thread)1.7线程分离(pthread_detach)2.C++的多线程3.笔试选择题答案及解析本篇完。1.线程控制上一篇讲了
- pthread_detach(pthread_self());
Respect@
计算机Linux进阶笔记开发语言c++服务器nginx
这个函数的作用是将当前线程设置为分离状态(detached)。分离状态的线程,在结束时会自动释放资源,无需其他线程对其进行pthread_join()等等的操作。pthread_detach(pthread_self())的意思是将当前线程自身设置为分离状态。pthread_self()是获取当前线程ID的函数,然后pthread_detach()用获取的线程ID作为参数来将该线程设置为分离状态。
- 并发编程用到的函数解析
有名企梦的小菜鸡
csapp的Lab学习服务器数据库学习计算机网络
文章目录前言一、sbuf_init二、Pthread_create三、Pthread_detach四、sbuf_remove五、sbuf_insert总结前言备战CSAPP中的ProxyLab时解析书上的并发编程中遇到了一些不会的函数,遂解析记录。一、sbuf_init为缓冲区分配堆内存,设置front和rear表示一个空的缓冲区,并为三个信号量赋初始值。Rio_readinitb(&rio,fd
- C语言线程基本函数
阿诏阿詔Auyv
c语言
学习笔记:C语言线程基本函数学习内容:线程常用基本函数:pthread_create()创建线程pthread_exit()退出当前线程pthread_join()等待其他线程结束pthread_self()自身线程ID号pthread_cancel()停止其他线程pthread_detach()分离某个线程学习笔记:线程使用需要导入对应头文件#includepthread_create()创建线
- [Linux]多线程编程
好想写博客
Linuxlinuxc语言运维服务器
[Linux]多线程编程文章目录[Linux]多线程编程pthread_create函数pthread_join函数pthread_exit函数pthread_cancel函数pthread_self函数pthread_detach函数理解线程库和线程idLinux操作系统下,并没有真正意义上的线程,而是由进程中的轻量级进程(LWP)模拟的线程,因此Linux操作系统中只会提供进程操作的系统接口。
- 函数简介篇——线程相关函数
惺忪牛犊子
嵌入式函数简介linuxunixc语言
说明:目录:一、线程基本操作函数pthread_equal()——比较线程IDpthread_self()——获取调用线程的IDpthread_create()——创建线程pthread_exit()——结束线程pthread_join()——阻塞线程pthread_cancel()——取消线程pthread_detach()——分离线程线程清理函数pthread_cleanup_push()——
- Linux--线程 共享内存空间
小小的个子
Linuxlinux数据结构算法
线程_共享内存空间//线程_共享内存空间#include#includeintg_data=0;void*func1(void*arg){printf("t1:%ldthreadiscreate!\n",(unsignedlong)pthread_self());printf("t1:paramis%d\n",*((int*)arg));while(1){printf("t1:%d\n",g_da
- Dom
周华华
JavaScripthtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml&q
- 【Spark九十六】RDD API之combineByKey
bit1129
spark
1. combineByKey函数的运行机制
RDD提供了很多针对元素类型为(K,V)的API,这些API封装在PairRDDFunctions类中,通过Scala隐式转换使用。这些API实现上是借助于combineByKey实现的。combineByKey函数本身也是RDD开放给Spark开发人员使用的API之一
首先看一下combineByKey的方法说明:
- msyql设置密码报错:ERROR 1372 (HY000): 解决方法详解
daizj
mysql设置密码
MySql给用户设置权限同时指定访问密码时,会提示如下错误:
ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number;
问题原因:你输入的密码是明文。不允许这么输入。
解决办法:用select password('你想输入的密码');查询出你的密码对应的字符串,
然后
- 路漫漫其修远兮 吾将上下而求索
周凡杨
学习 思索
王国维在他的《人间词话》中曾经概括了为学的三种境界古今之成大事业、大学问者,罔不经过三种之境界。“昨夜西风凋碧树。独上高楼,望尽天涯路。”此第一境界也。“衣带渐宽终不悔,为伊消得人憔悴。”此第二境界也。“众里寻他千百度,蓦然回首,那人却在灯火阑珊处。”此第三境界也。学习技术,这也是你必须经历的三种境界。第一层境界是说,学习的路是漫漫的,你必须做好充分的思想准备,如果半途而废还不如不要开始。这里,注
- Hadoop(二)对话单的操作
朱辉辉33
hadoop
Debug:
1、
A = LOAD '/user/hue/task.txt' USING PigStorage(' ')
AS (col1,col2,col3);
DUMP A;
//输出结果前几行示例:
(>ggsnPDPRecord(21),,)
(-->recordType(0),,)
(-->networkInitiation(1),,)
- web报表工具FineReport常用函数的用法总结(日期和时间函数)
老A不折腾
finereport报表工具web开发
web报表工具FineReport常用函数的用法总结(日期和时间函数)
说明:凡函数中以日期作为参数因子的,其中日期的形式都必须是yy/mm/dd。而且必须用英文环境下双引号(" ")引用。
DATE
DATE(year,month,day):返回一个表示某一特定日期的系列数。
Year:代表年,可为一到四位数。
Month:代表月份。
- c++ 宏定义中的##操作符
墙头上一根草
C++
#与##在宏定义中的--宏展开 #include <stdio.h> #define f(a,b) a##b #define g(a) #a #define h(a) g(a) int main() { &nbs
- 分析Spring源代码之,DI的实现
aijuans
springDI现源代码
(转)
分析Spring源代码之,DI的实现
2012/1/3 by tony
接着上次的讲,以下这个sample
[java]
view plain
copy
print
- for循环的进化
alxw4616
JavaScript
// for循环的进化
// 菜鸟
for (var i = 0; i < Things.length ; i++) {
// Things[i]
}
// 老鸟
for (var i = 0, len = Things.length; i < len; i++) {
// Things[i]
}
// 大师
for (var i = Things.le
- 网络编程Socket和ServerSocket简单的使用
百合不是茶
网络编程基础IP地址端口
网络编程;TCP/IP协议
网络:实现计算机之间的信息共享,数据资源的交换
协议:数据交换需要遵守的一种协议,按照约定的数据格式等写出去
端口:用于计算机之间的通信
每运行一个程序,系统会分配一个编号给该程序,作为和外界交换数据的唯一标识
0~65535
查看被使用的
- JDK1.5 生产消费者
bijian1013
javathread生产消费者java多线程
ArrayBlockingQueue:
一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列检索操作则是从队列头部开始获得元素。
ArrayBlockingQueue的常用方法:
- JAVA版身份证获取性别、出生日期及年龄
bijian1013
java性别出生日期年龄
工作中需要根据身份证获取性别、出生日期及年龄,且要还要支持15位长度的身份证号码,网上搜索了一下,经过测试好像多少存在点问题,干脆自已写一个。
CertificateNo.java
package com.bijian.study;
import java.util.Calendar;
import
- 【Java范型六】范型与枚举
bit1129
java
首先,枚举类型的定义不能带有类型参数,所以,不能把枚举类型定义为范型枚举类,例如下面的枚举类定义是有编译错的
public enum EnumGenerics<T> { //编译错,提示枚举不能带有范型参数
OK, ERROR;
public <T> T get(T type) {
return null;
- 【Nginx五】Nginx常用日志格式含义
bit1129
nginx
1. log_format
1.1 log_format指令用于指定日志的格式,格式:
log_format name(格式名称) type(格式样式)
1.2 如下是一个常用的Nginx日志格式:
log_format main '[$time_local]|$request_time|$status|$body_bytes
- Lua 语言 15 分钟快速入门
ronin47
lua 基础
-
-
单行注释
-
-
[[
[多行注释]
-
-
]]
-
-
-
-
-
-
-
-
-
-
-
1.
变量 & 控制流
-
-
-
-
-
-
-
-
-
-
num
=
23
-
-
数字都是双精度
str
=
'aspythonstring'
- java-35.求一个矩阵中最大的二维矩阵 ( 元素和最大 )
bylijinnan
java
the idea is from:
http://blog.csdn.net/zhanxinhang/article/details/6731134
public class MaxSubMatrix {
/**see http://blog.csdn.net/zhanxinhang/article/details/6731134
* Q35
求一个矩阵中最大的二维
- mongoDB文档型数据库特点
开窍的石头
mongoDB文档型数据库特点
MongoDD: 文档型数据库存储的是Bson文档-->json的二进制
特点:内部是执行引擎是js解释器,把文档转成Bson结构,在查询时转换成js对象。
mongoDB传统型数据库对比
传统类型数据库:结构化数据,定好了表结构后每一个内容符合表结构的。也就是说每一行每一列的数据都是一样的
文档型数据库:不用定好数据结构,
- [毕业季节]欢迎广大毕业生加入JAVA程序员的行列
comsci
java
一年一度的毕业季来临了。。。。。。。。
正在投简历的学弟学妹们。。。如果觉得学校推荐的单位和公司不适合自己的兴趣和专业,可以考虑来我们软件行业,做一名职业程序员。。。
软件行业的开发工具中,对初学者最友好的就是JAVA语言了,网络上不仅仅有大量的
- PHP操作Excel – PHPExcel 基本用法详解
cuiyadll
PHPExcel
导出excel属性设置//Include classrequire_once('Classes/PHPExcel.php');require_once('Classes/PHPExcel/Writer/Excel2007.php');$objPHPExcel = new PHPExcel();//Set properties 设置文件属性$objPHPExcel->getProperties
- IBM Webshpere MQ Client User Issue (MCAUSER)
darrenzhu
IBMjmsuserMQMCAUSER
IBM MQ JMS Client去连接远端MQ Server的时候,需要提供User和Password吗?
答案是根据情况而定,取决于所定义的Channel里面的属性Message channel agent user identifier (MCAUSER)的设置。
http://stackoverflow.com/questions/20209429/how-mca-user-i
- 网线的接法
dcj3sjt126com
一、PC连HUB (直连线)A端:(标准568B):白橙,橙,白绿,蓝,白蓝,绿,白棕,棕。 B端:(标准568B):白橙,橙,白绿,蓝,白蓝,绿,白棕,棕。 二、PC连PC (交叉线)A端:(568A): 白绿,绿,白橙,蓝,白蓝,橙,白棕,棕; B端:(标准568B):白橙,橙,白绿,蓝,白蓝,绿,白棕,棕。 三、HUB连HUB&nb
- Vimium插件让键盘党像操作Vim一样操作Chrome
dcj3sjt126com
chromevim
什么是键盘党?
键盘党是指尽可能将所有电脑操作用键盘来完成,而不去动鼠标的人。鼠标应该说是新手们的最爱,很直观,指哪点哪,很听话!不过常常使用电脑的人,如果一直使用鼠标的话,手会发酸,因为操作鼠标的时候,手臂不是在一个自然的状态,臂肌会处于绷紧状态。而使用键盘则双手是放松状态,只有手指在动。而且尽量少的从鼠标移动到键盘来回操作,也省不少事。
在chrome里安装 vimium 插件
- MongoDB查询(2)——数组查询[六]
eksliang
mongodbMongoDB查询数组
MongoDB查询数组
转载请出自出处:http://eksliang.iteye.com/blog/2177292 一、概述
MongoDB查询数组与查询标量值是一样的,例如,有一个水果列表,如下所示:
> db.food.find()
{ "_id" : "001", "fruits" : [ "苹
- cordova读写文件(1)
gundumw100
JavaScriptCordova
使用cordova可以很方便的在手机sdcard中读写文件。
首先需要安装cordova插件:file
命令为:
cordova plugin add org.apache.cordova.file
然后就可以读写文件了,这里我先是写入一个文件,具体的JS代码为:
var datas=null;//datas need write
var directory=&
- HTML5 FormData 进行文件jquery ajax 上传 到又拍云
ileson
jqueryAjaxhtml5FormData
html5 新东西:FormData 可以提交二进制数据。
页面test.html
<!DOCTYPE>
<html>
<head>
<title> formdata file jquery ajax upload</title>
</head>
<body>
<
- swift appearanceWhenContainedIn:(version1.2 xcode6.4)
啸笑天
version
swift1.2中没有oc中对应的方法:
+ (instancetype)appearanceWhenContainedIn:(Class <UIAppearanceContainer>)ContainerClass, ... NS_REQUIRES_NIL_TERMINATION;
解决方法:
在swift项目中新建oc类如下:
#import &
- java实现SMTP邮件服务器
macroli
java编程
电子邮件传递可以由多种协议来实现。目前,在Internet 网上最流行的三种电子邮件协议是SMTP、POP3 和 IMAP,下面分别简单介绍。
◆ SMTP 协议
简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)是一个运行在TCP/IP之上的协议,用它发送和接收电子邮件。SMTP 服务器在默认端口25上监听。SMTP客户使用一组简单的、基于文本的
- mongodb group by having where 查询sql
qiaolevip
每天进步一点点学习永无止境mongo纵观千象
SELECT cust_id,
SUM(price) as total
FROM orders
WHERE status = 'A'
GROUP BY cust_id
HAVING total > 250
db.orders.aggregate( [
{ $match: { status: 'A' } },
{
$group: {
- Struts2 Pojo(六)
Luob.
POJOstrust2
注意:附件中有完整案例
1.采用POJO对象的方法进行赋值和传值
2.web配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee&q
- struts2步骤
wuai
struts
1、添加jar包
2、在web.xml中配置过滤器
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.st