Struts2基于注解的Action配置

使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了。

要使用注解方式,我们必须添加一个额外包:struts2-convention-plugin-2.x.x.jar。

虽说是零配置的,但struts.xml还是少不了的,配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>
<!-- 请求参数的编码方式-->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- 指定被struts2处理的请求后缀类型。多个用逗号隔开-->
<constant name="struts.action.extension" value="action,do,htm"/>
<!-- 当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.configuration.xml.reload" value="true"/>
<!-- 是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.devMode" value="false"/>
<!-- 设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 指定由spring负责action对象的创建
<constant name="struts.objectFactory" value="spring" />
-->
<!-- 是否开启动态方法调用-->
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
</struts>

action类的注解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.tjcyjd.web.action;  

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ExceptionMapping;
import org.apache.struts2.convention.annotation.ExceptionMappings;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.ActionSupport;

/**
* Struts2基于注解的Action配置
*
*/

@ParentPackage("struts-default")
@Namespace("/annotation_test")
@Results( { @Result(name = "success", location = "/main.jsp"),
@Result(name = "error", location = "/error.jsp") })
@ExceptionMappings( { @ExceptionMapping(exception = "java.lange.RuntimeException", result = "error") })
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 2730268055700929183L;
private String loginName;
private String password;

@Action("login") //或者写成 @Action(value = "login")
public String login() throws Exception {
if ("yjd".equals(loginName) && "yjd".equals(password)) {
return SUCCESS;
} else {
return ERROR;
}
}

@Action(value = "add", results = { @Result(name = "success", location = "/index.jsp") })
public String add() throws Exception {
return SUCCESS;
}

public String getLoginName() {
return loginName;
}

public void setLoginName(String loginName) {
this.loginName = loginName;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password= password;
}

}

这样就完成了一个基于注解的action配置。

总结常用的注解如下:

1
2
3
4
5
6
7
8
9
10
11
Namespace:指定命名空间。
ParentPackage:指定父包。
Result:提供了Action结果的映射。(一个结果的映射)
Results:“Result”注解列表
ResultPath:指定结果页面的基路径。
Action:指定Action的访问URL。
Actions:“Action”注解列表。
ExceptionMapping:指定异常映射。(映射一个声明异常)
ExceptionMappings:一级声明异常的数组。
InterceptorRef:拦截器引用。
InterceptorRefs:拦截器引用组。

Vultr VPS锐速优化

  • Vultr服务器测试了几个,最后决定用日本的,距离大陆近,好像是最近新开的的,直连。
  • 关于锐速,想说的是,不知道为什么,电脑连网速还可以,但是手机用ss连网速超慢,可能是我联通卡的原因,刚开始用的洛杉矶的机房,换了几个都是美国的,手机上用还是不理想,最后ping了一下各个机房,发现日本的速度最快,然后就换了日本机房的服务器,又google原因,因为vultr 是KVM系统的VPS,所以发现了锐速,装了之后网速一路飙升,不排除是日本机房的原因。
  • 安装
    • wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/serverspeeder/master/serverspeeder-all.sh && bash serverspeeder-all.sh
  • 卸载锐速
    • chattr -i /serverspeeder/etc/apx* && /serverspeeder/bin/serverSpeeder.sh uninstall -f

我的conky配置文件

  • github地址:https://github.com/yuan1/MyOwnConky
  • 编辑conky配置文件gedit ~/.conkyrc,讲conkyrc文件中的内容复制到里面,可以修改network下的enp1s0为你的链接,比如我用WiFi就修改为wlan0
  • 新建.conky目录mkdir ~/.conky
  • 将conky目录下的conky-startup.sh复制到.conky下
  • 将autostart目录下的conky.desktop复制到~/.config/autostart目录下
  • 重启即自动启动

1684769870

Linux下git使用

  • 在github上创建项目

  • 使用git clone https://github.com/xxxxxxx/xxxxx.git克隆到本地

  • 编辑项目

  • git add .(将改动添加到暂存区)

  • git commit -m "提交说明"

  • git push origin master 将本地更改推送到远程master分支。

  • 这样你就完成了向远程仓库的推送

  • 如果在github的remote上已经有了文件,会出现错误。此时应当先pull一下,即:git pull origin master然后再进行:git push origin master

git

Linux下校园网锐捷4.x安装与运行

  • 下载源码
    https://github.com/yuan1/mentohust
  • 把etc目录下的文件全部复制到/etc目录下
  • 把usr/bin目录下的文件复制到/usr/bin目录下
  • 执行sudo chmod a+xs /usr/bin/mentohust添加执行权限
  • 执行mentohust 根据具体情况配置即可
  • 如校园网是指定ip,需要先设置ip然后在认证过程中不要选择使用dhcp获取ip
  • 配置完成,认证成功后可用ctrl+c结束,然后执行sudo mentohust -b3 -w后台运行

ubuntu16.04安装后要做的配置

  • 卸载不常用的软件
    • 卸载libreofficesudo apt-get remove --purge libreoffice*/
  • 安装必备软件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
unity-tweak-tool
sudo apt install ubuntu-tweak-tool`】
screenfetch
sudo apt install screenfetch
gparted分区工具
sudo apt install gparted
gimp图像编辑
sudo apt install gimp
GDebi程序安装工具
sudo apt install gdebi
virtualBox虚拟机
sudo apt install virtualbox
vlc视频播放器
sudo apt install vlc
系统美化
flatabulous-theme
sudo add-apt-repository ppa:noobslab/themes
sudo apt-get update
sudo apt-get install flatabulous-theme
ultra-flat-icons
sudo add-apt-repository ppa:noobslab/icons
sudo apt-get update
sudo apt-get install ultra-flat-icons
numix-gtk-theme
sudo add-apt-repository ppa:numix/ppa
sudo apt-get update && sudo apt-get install numix-gtk-theme
numix-icon-theme-circle
sudo add-apt-repository ppa:numix/ppa
sudo apt-get update && sudo apt-get install numix-icon-theme-circle

MySQL命令

注意:MySQL中每个命令后都要以分号;结尾。

  • 显示数据库
1
2
3
4
5
6
7
8
mysql> show databases;
+----------+
| Database |
+----------+
| mysql  |
| test   |
+----------+
2 rows in set (0.04 sec)

  Mysql刚安装完有两个数据库:mysql和test。mysql库非常重要,它里面有MySQL的系统信息,我们改密码和新增用户,实际上就是用这个库中的相关表进行操作。

  • 显示数据库中的表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> use mysql; (打开库,对每个库进行操作就要打开此库,类似于foxpro )
Database changed

mysql> show tables;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv  |
| db       |
| func      |
| host      |
| tables_priv   |
| user      |
+-----------------+
6 rows in set (0.01 sec)
  • 显示数据表的结构:
    describe 表名;

  • 显示表中的记录:
    select * from 表名;
    例如:显示mysql库中user表中的纪录。所有能对MySQL用户操作的用户都在此表中。
    Select * from user;

  • 建库:
    create database 库名;
    例如:创建一个名字位aaa的库
    mysql> create databases aaa;

  • 建表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use 库名; 
create table 表名 (字段设定列表);
例如:在刚创建的aaa库中建立表name,表中有id(序号,自动增长),xm(姓名),xb(性别),csny(出身年月)四个字段
use aaa;
mysql> create table name (id int(3) auto_increment not null primary key, xm char(8),xb char(2),csny date);
可以用describe命令察看刚建立的表结构。
mysql> describe name;

  +-------+---------+------+-----+---------+----------------+
  | Field | Type  | Null | Key | Default | Extra     |
  +-------+---------+------+-----+---------+----------------+
  | id  | int(3) |   | PRI | NULL  | auto_increment |
  | xm  | char(8) | YES |   | NULL  |        |
  | xb  | char(2) | YES |   | NULL  |        |
  | csny | date  | YES |   | NULL  |        |
  +-------+---------+------+-----+---------+----------------+
  • 增加记录
    例如:增加几条相关纪录。
1
2
mysql> insert into name values('','张三','男','1971-10-01');
mysql> insert into name values('','白云','女','1972-05-20');
可用select命令来验证结果。
1
2
3
4
5
6
7
8

mysql> select * from name;
+----+------+------+------------+
| id | xm  | xb  | csny    |
+----+------+------+------------+
| 1 | 张三 | 男  | 1971-10-01 |
| 2 | 白云 | 女  | 1972-05-20 |
+----+------+------+------------+
  • 修改纪录
    例如:将张三的出生年月改为1971-01-10
    mysql> update name set csny='1971-01-10' where xm='张三';

  • 删除纪录
    例如:删除张三的纪录。
    mysql> delete from name where xm='张三';

  • 删库和删表

1
2
drop database 库名; 
drop table 表名;
  • 增加MySQL用户

    格式:
    grant select on 数据库.* to 用户名@登录主机 identified by "密码"
    例1、增加一个用户user_1密码为123,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL,然后键入以下命令:
    mysql> grant select,insert,update,delete on *.* to user_1@"%" Identified by "123";

    例1增加的用户是十分危险的,如果知道了user_1的密码,那么他就可以在网上的任何一台电脑上登录你的MySQL数据库并对你的数据为所欲为了,解决办法见例2。
    例2、增加一个用户user_2密码为123,让此用户只可以在localhost上登录,并可以对数据库aaa进行查询、插入、修改、删除的操作(localhost指本地主机,即MySQL数据库所在的那台主机),这样用户即使用知道user_2的密码,他也无法从网上直接访问数据库,只能通过MYSQL主机来操作aaa库。
    mysql>grant select,insert,update,delete on aaa.* to user_2@localhost identified by "123";

    用新增的用户如果登录不了MySQL,在登录时用如下命令:

    mysql -u user_1 -p -h 192.168.113.50 (-h后跟的是要登录主机的ip地址)

  • 备份与恢复

    • 备份

      例如:将上例创建的aaa库备份到文件back_aaa中
      [root@test1 root]# cd /home/data/mysql
      (进入到库目录,本例库已由val/lib/mysql转到/home/data/mysql,见上述第七部分内容)
      [root@test1 mysql]# mysqldump -u root -p --opt aaa > back_aaa

    • 恢复

      [root@test mysql]# mysql -u root -p ccc < back_aaa

string类型转为double

精度的问题!用基本类型的double类型进行运算可能会丢失精度。而且特别大的数又没法处理。所以如果用BigDecimal这个类问题就解决了。这个类在java.Math包下。它可以处理任意精度的数据。对于楼主出现的问题,我从新写了段代码,供楼主参考。但是主要是还得查看API!代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.math.*;
public class oopp
{
public static void main(String[] args)
{
String a="1467000000";
double aa=Double.parseDouble(a);
BigDecimal beichushu=new BigDecimal(aa);
BigDecimal chushu=new BigDecimal(100000000);
BigDecimal result=beichushu.divide(chushu,new MathContext(4));//MathConText(4)表示结果精确4位!
boolean isTrue=String.valueOf(result).equals("14.67");
System.out.println("1467000000除以100000000="+result);
System.out.println(result+"与14.67比较的结果是"+isTrue);
}
}