值栈的详解与struts2标签库

图片 3

Druid连接池,druid

下面分享一下在Fedora8中安装P2P软件Azureus的过程.

【基于初学者的SSH】struts2 值栈的详解与struts2标签库+ognl表达式,struts2ognl

一:什么是值栈:struts2里面本身提供的一种存储机制,类似于域对象,值栈,可以存值和取值

 特点:先进后出,最上面的元素叫做栈顶,也叫压栈。

 <s:debug></s:debug>可以看到栈的元素,栈的结构为root和context,root返回的结构是list集合,context返回的是map集合

二:action和servlet区别:

每次访问的action的时候,都会创建一个新的action对象,而servlet只会创建一个对象

注意:每次访问action都会创建一个action对象,action对象里面都且只有一个值栈的对象

三:值栈的对象:

ActionContext ac=ActionContext.getContext();

ValueStack v1=ac.getValueStack();

不常用,通常都是使用ognl表达式来取值,下面来讲几种实例,在此之前要先在jsp中导入标签库<%@
taglib prefix=”s” uri=”/struts-tags”%>

三:向值栈里面保存变量并取值

01):保存变量

private String name;

public String getName() {
return name;
}

@Override

public String execute() throws Exception {

name = “张三”;

}

02):取值

<s:property value=”name” />

四:向值栈里面保存对象并取值:

 

01):创建preson的类,实例化,得到get的方法

private Person person = new Person();

 

public Person getPerson() {
return person;
}

@Override

public String execute() throws Exception {

person.setName(“张安”);
person.setAge(1);
person.setSex(“女”);

}

02):取值(对象名.属性名):

<s:property value=”person.name” />
<s:property value=”person.age” />
<s:property value=”person.sex” />

五:向值栈里保存集合并取值

01):实例化一个list集合

private List<Person> lp = new ArrayList<Person>();

public List<Person> getLp() {
return lp;
}

@Override

public String execute() throws Exception {

lp.add(new Person(“李四”,1,”男”));
lp.add(new Person(“王五”,2,”女”));

}

02):取值

    <!-- 取集合的值01 -->
    <s:property value="lp[0].name" />
    <s:property value="lp[1].name" />
    <br>
    <!-- 取集合的值02 -->
    <s:iterator value="lp">
        <s:property value="name" />
        <s:property value="age" />
        <s:property value="sex" />
        <br>
    </s:iterator>
    <!-- 取集合的值03 加了var属性后就是从context里面取值,所以要加#号 -->
    <s:iterator value="lp" var="l">
        <s:property value="#l.name" />
        <s:property value="#l.age" />
        <s:property value="#l.sex" />
    </s:iterator>

六:向值栈里添加域对象的值

01):向值栈里面添加

@Override

public String execute() throws Exception {

//域对象
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute(“abc”, “域对象的值”);
return SUCCESS;

}

02):取值

<s:property value=”#request.abc” />

七:在form标签里面使用属性值:

<s:textfield  name=”text”
 value=”%{name}”></s:textfield>(使用%{}就可以转)

八:form标签:

<!– from标签 –>
<s:form action=”” method=”post”>
<!– 相当于text 文本框 –>
<s:textfield></s:textfield>
<!– 密码框 –>
<s:password></s:password>
<!– 单选框 必须有name属性值 –>
<s:radio list=”#{‘1′:’男’,’2′:’女’}” value=”1″
name=””></s:radio>
<!– 多选框,name属性必须要 –>
<s:checkboxlist list=”#{‘1′:’皮皮虾’,’2′:’糖醋鱼’,’3′:’炒年糕’}”
value=”1″ name=””></s:checkboxlist>
<!– 下拉框,用combox的话就会带一个文本框绑定value值 –>
<s:select list=”#{‘1′:’皮皮虾’,’2′:’糖醋鱼’,’3′:’炒年糕’}”
></s:select>
<!– 提交 –>
<s:submit></s:submit>
<!– 重置 –>
<s:reset></s:reset>
</s:form>

效果图:

图片 1

 

值栈的详解与struts2标签库+ognl表达式,struts2ognl
一:什么是值栈:struts2里面本身提供的一种存储机制,类似于域…

– Druid 连接池简介

Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss
DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。

同时Druid不仅仅是一个数据库连接池,它包括四个部分:

    Druid是一个JDBC组件,它包括三个部分:

    基于Filter-Chain模式的插件体系。

    DruidDataSource 高效可管理的数据库连接池。

    SQLParser

Druid的功能

1、替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。

2、可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。

3、数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。

4、SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。

5、扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便编写JDBC层的扩展插件。

点击工具栏菜单 应用程序 ==> 新增/移除软件, 查找 Azureus ,选 Azureus
后安装 。

– 使用原因

           
 原先项目使用的是C3P0连接池,在项目发布使用一段时间后发现c3p0
连接池访问数据库的时候创建连接会在oralce的lisenter.log 日志文件记录。 

经过一段时间观察发现oralce每6秒会在lisenter.log日志记录一次,我们设置的最小连接是20,所以oracle每次会在日志记录20条。随着时间越长日志文件越来越大,当日志文件达到4个G的时候会导致oracle死掉。
经过不断调整参数配置还是无法得到解决方案,最后选择使用阿里Druid连接池试试,Druid默认最小连接2个,配置好后发布观察日志发现只在创建的时候在日志里面记录了2条记录。没有像C3P0那样每6秒记录一次导致日志文件越来越大。 

lisenter.log 日志截图

图片 2

 

设定防火墙,点击桌面上的工具栏菜单  系统-==>管理==> 左边窗格选
Other Ports ==> 按 新增 按钮。

– Druid使用

图片 3