美文网首页
210717:web.xml中配置error-page/Java

210717:web.xml中配置error-page/Java

作者: 弹钢琴的崽崽 | 来源:发表于2021-07-17 20:42 被阅读0次

    一. IllegalArgumentException

    1. 异常信息

    IllegalArgumentException: Page size must not be less than or equal to zero!
    

    解决:

    // 原来代码
    List<LogCallTimes> list = this.queryLogService.countQueryTimesByType(s,e);
    Pageable pageable = new PageRequest(1,list.size());
    PageImpl<LogCallTimes> page = new PageImpl<LogCallTimes>(list,pageable,list.size());
    return ResponseResult.newInstance(page);
    // 改造后
    List<LogCallTimes> list = this.queryLogService.countQueryTimesByType(s,e);
    if(CollectionUtils.isNotEmpty(list)) {
        Pageable pageable = new PageRequest(1, list.size());
        PageImpl<LogCallTimes> page = new PageImpl<LogCallTimes>(list, pageable, list.size());
        return ResponseResult.newInstance(page);
    }
    return ResponseResult.newInstance("未查询到记录");
    

    二. web.xml中配置error-page

    在web.xml中有两种配置error-page的方法,分别举例如下:

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

    <error-page>
        <error-code>500</error-code>
        <location>/error.jsp</location>
    </error-page>
    

    上面配置了当系统发生500错误(即服务器内部错误)时,跳转到错误处理页面error.jsp。

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

    <error-page>
        <exception-type>java.lang.NullException</exception-type>
        <location>/error.jsp</location>
    </error-page>
    

    上面配置了当系统发生java.lang.NullException(即空指针异常)时,跳转到错误处理页面error.jsp

    三. Java环境变量与Java -version不一致

    1. 问题描述:

    在对jar进行 java -jar xxx.jar命令时:

    这个很明显是一个版本不支持的问题,经过搜索发现问题所在:

    出现java.lang.UnsupportedClassVersionError 错误的原因,是因为我们使用高版本的JDK编译的Java class文件试图在较低版本的JVM上运行,所报的错误。

    因为,高版本的JDK生成的class文件使用的格式,可能与低版本的JDK的.class文件格式不同。这样,低版本的JVM无法解释执行这个.class文件,会抛出java.lang.UnsupportedClassVersionError不支持的Class版本错误。

    我的编译环境是1.8的,而运行环境是1.6的,果然是这个问题。

    2. 解决方案1:

    分析:可能是安装oracle数据库在配置jdk路径之前,导致运行命令调用了oracle自带的jdk,从而导致这个问题。

    解决方案:把PATH变量末尾的;%JAVA_HOME%\bin挪到最前面,重启窗口。(dos启动时会加载环境变量)

    解决结果:

    3. 解决方案2:

    在注册表中修改:HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment 改为1.8

    再次运行java -version

    4. 总结:

    方案一和二本质上是一样的,需要保持一致。从这个问题建议大家把path中%JAVA_HOME%\bin给放到最前面,当然你的jdk版本得支持你后面需要安装的软件。

    5. JDK、JRE有什么区别:

    Jre 是java runtime environment的缩写, 是java程序的运行环境。既然是运行,当然要包含jvm,也就是大家熟悉的虚拟机啦, 还有所有java类库的class文件,都在lib目录下打包成了jar。大家可以自己验证。至于在windows上的虚拟机是哪个文件呢? Java\jdk\ jre\bin\client里面是不是有一个jvm.dll呢?那就是虚拟机。

    Jdk 是java development kit,是java的开发工具包,里面包含了各种类库和工具。当然也包括了另外一个Jre--------Java\jre.

    而且jdk\jre\bin同时有client和server两个文件夹下都包含一个jvm.dll。 说明是有两个虚拟机的。

    Java\jdk\bin这个bin下有各种java程序需要用到的命令,与Java\jdk\jre\bin或者Java\jre\bin的bin目录最明显的区别就是Java\jdk\bin下才有javac.exe,这一点很好理解,因为 jre只是一个运行环境而已。与开发无关,正因为如此,具备开发功能的jdk自己的jre下才会同时有client性质的jvm和server性质的 jvm, 而仅仅作为运行环境的jre下只需要client性质的jvm.dll就够了。

    我们用的java命令并不是 Java\jdk\bin目录下的而是Java\jdk\jre\bin目录下的。不信可以做一个实验,大家可以把Java\jdk\bin目录下的java.exe剪切到别的地方再运行 java程序,发现了什么?一切OK!

    如果java为了提供给大多数人使用,他们是不需要jdk做开发的,只需要jre能让java程序跑起来就可以了,那么每个客户还需要手动去设置环境变量多麻烦啊?

    所以安装jre的时候安装程序自动帮你把jre的java.exe添加到了系统变量中,因此去C:\Windows\system32下面去看看吧,发现有一个java.exe。

    四. SpringBoot单元测试

    Spring Boot中引入单元测试很简单,依赖如下:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    

    测试类:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class LearnServiceTest {
    
        @Autowired
        private LearnService learnService;
    
        @Test
        public void getLearn(){
            LearnResource learnResource=learnService.selectByKey(1001L);
            Assert.assertThat(learnResource.getAuthor(),is("嘟嘟MD独立博客"));
        }
    }
    

    五. 在web.xml中配置过滤器

    <filter>  
        <filter-name>loginFilter</filter-name>//过滤器名称  
        <filter-class>com.ygj.control.loginFilter</filter-class>//过滤器类的包路径
        <init—param> //可选 
            <param—name>参数名</param-name>//过滤器初始化参数
            <param-value>参数值</param-value>  
            </init—pamm>  
    </filter> 
    
    <filter-mapping> //过滤器映射  
        <filter-name>loginFilter</filter-name>  
        <url—pattern>指定过滤器作用的对象</url-pattern>
    </filter-mapping>
    

    在配置中需要注意的有两处:一是指明过滤器类所在的包路径。二是处定义过滤器作用的对象。一般有以下规则:

    1. 作用与所有web资源:<url—pattern>/*</url-pattern>。则客户端请求访问任意资源文件时都要经过过滤器过滤,通过则访问文件,否则拦截。
    2. 作用于某一文件夹下所有文件:<url—pattern>/dir/*</url-pattern>
    3. 作用于某一种类型的文件:<url—pattern>*.扩展名</url-pattern>。比如<url—pattern>*.jsp</url-pattern>过滤所有对jsp文件的访问请求。
    4. 作用于某一文件夹下某一类型文件:<url—pattern>/dir/*.扩展名</url-pattern>

    如果一个过滤器需要过滤多种文件,则可以配置多个<filter-mapping>,一个mapping定义一个url-pattern来定义过滤规则。

    <filter>
        <filter-name>loginFilter</filter-name>
        <filter-class>com.ygj.control.loginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>loginFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>loginFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
    

    六. Docker安装mysql和nacos

    环境准备

    mysql 5.7

    nacos

    1. Docker安装mysql

    拉取镜像

    docker pull mysql:5.7
    

    运行容器

    docker run -d -p 3307:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=dragon --name mysql01 mysql:5.7
    

    2. Docker安装nacos

    拉取镜像

    docker pull nacos/nacos-server
    

    运行容器

    docker run --env MODE=standalone -d -p 8849:8848    --name nacos nacos/nacos-server
    

    3. nacos 配置连接数据库

    进入容器

    docker exec -it nacos bash
    cd conf
    vi application.properties
    

    在数据库中手动创建nacos数据库

    执行/usr/local/nacos/conf目录下nacos-mysql.sql文件,进行数据库初始化

    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_info   */
    /******************************************/
    CREATE TABLE `config_info` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(255) DEFAULT NULL,
      `content` longtext NOT NULL COMMENT 'content',
      `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
      `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
      `src_user` text COMMENT 'source user',
      `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
      `app_name` varchar(128) DEFAULT NULL,
      `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
      `c_desc` varchar(256) DEFAULT NULL,
      `c_use` varchar(64) DEFAULT NULL,
      `effect` varchar(64) DEFAULT NULL,
      `type` varchar(64) DEFAULT NULL,
      `c_schema` text,
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_info_aggr   */
    /******************************************/
    CREATE TABLE `config_info_aggr` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(255) NOT NULL COMMENT 'group_id',
      `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
      `content` longtext NOT NULL COMMENT '内容',
      `gmt_modified` datetime NOT NULL COMMENT '修改时间',
      `app_name` varchar(128) DEFAULT NULL,
      `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
    
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_info_beta   */
    /******************************************/
    CREATE TABLE `config_info_beta` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(128) NOT NULL COMMENT 'group_id',
      `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
      `content` longtext NOT NULL COMMENT 'content',
      `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
      `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
      `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
      `src_user` text COMMENT 'source user',
      `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
      `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_info_tag   */
    /******************************************/
    CREATE TABLE `config_info_tag` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(128) NOT NULL COMMENT 'group_id',
      `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
      `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
      `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
      `content` longtext NOT NULL COMMENT 'content',
      `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
      `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
      `src_user` text COMMENT 'source user',
      `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_tags_relation   */
    /******************************************/
    CREATE TABLE `config_tags_relation` (
      `id` bigint(20) NOT NULL COMMENT 'id',
      `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
      `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(128) NOT NULL COMMENT 'group_id',
      `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
      `nid` bigint(20) NOT NULL AUTO_INCREMENT,
      PRIMARY KEY (`nid`),
      UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
      KEY `idx_tenant_id` (`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = group_capacity   */
    /******************************************/
    CREATE TABLE `group_capacity` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
      `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
      `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
      `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
      `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
      `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
      `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
      `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
      `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_group_id` (`group_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = his_config_info   */
    /******************************************/
    CREATE TABLE `his_config_info` (
      `id` bigint(64) unsigned NOT NULL,
      `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `data_id` varchar(255) NOT NULL,
      `group_id` varchar(128) NOT NULL,
      `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
      `content` longtext NOT NULL,
      `md5` varchar(32) DEFAULT NULL,
      `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
      `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
      `src_user` text,
      `src_ip` varchar(20) DEFAULT NULL,
      `op_type` char(10) DEFAULT NULL,
      `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
      PRIMARY KEY (`nid`),
      KEY `idx_gmt_create` (`gmt_create`),
      KEY `idx_gmt_modified` (`gmt_modified`),
      KEY `idx_did` (`data_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
    
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = tenant_capacity   */
    /******************************************/
    CREATE TABLE `tenant_capacity` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
      `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
      `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
      `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
      `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
      `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
      `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
      `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
      `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_tenant_id` (`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
    
    
    CREATE TABLE `tenant_info` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `kp` varchar(128) NOT NULL COMMENT 'kp',
      `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
      `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
      `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
      `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
      `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
      `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
      KEY `idx_tenant_id` (`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
    
    CREATE TABLE users (
        username varchar(50) NOT NULL PRIMARY KEY,
        password varchar(500) NOT NULL,
        enabled boolean NOT NULL
    );
    
    CREATE TABLE roles (
        username varchar(50) NOT NULL,
        role varchar(50) NOT NULL
    );
    
    INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
    
    INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
    

    重启容器

    docker restart nacos
    

    七. Linux查询某个端口是否被占用:

    1. netstat -anp |grep 端口号

    如下,我以3306为例,netstat -anp |grep 3306(此处备注下,我是以普通用户操作,故加上了sudo,如果是以root用户操作,不用加sudo即可查看),如下图

    图中主要看监控状态为LISTEN表示已经被占用,最后一列显示被服务mysqld占用,查看具体端口号,只要有如图这一行就表示被占用了。

    2. netstat -nultp

    该命令是查看当前所有已经使用的端口情况,如图

    图中可以看出我的82端口没有被占用

    3. netstat -anp |grep 82

    查看82端口的使用情况

    可以看出并没有LISTEN那一行,所以就表示没有被占用。此处注意,图中显示的LISTENING并不表示端口被占用,不要和LISTEN混淆哦,查看具体端口时候,必须要看到tcp,端口号,LISTEN那一行,才表示端口被占用了。

    八. 创建一张表和另一个表结构一样

    create table table02 as
    select * From T_SLXF_APPLICATION where id = '-1'
    

    相关文章

      网友评论

          本文标题:210717:web.xml中配置error-page/Java

          本文链接:https://www.haomeiwen.com/subject/rjzwpltx.html