ssm框架问题汇总


title: ssm框架问题汇总
date: 2018-03-21 16:49:52
updated: 2020-03-09 18:20:44
categories: spring
tags:
- spring


此文档为maven组建ssm框架的问题汇总

创建表sql语句导入数据库时报错 Invalid default value for “字段名”

Mysql ERROR 1067: Invalid default value for 字段

编码问题导致jdbc查询数据库查询不到值

问题:编码问题导致jdbc查询数据库查询不到值。

解决:在jdbc的数据库连接地址后面加
?useUnicode=true&characterEncoding=UTF-8,否则查询不到,编码问题。

Class.forName("com.mysql.jdbc.Driver");
//下面一定要再jdbc的数据库连接地址后面加?useUnicode=true&characterEncoding=UTF-8,否则查询不到,编码问题
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/micro_message?useUnicode=true&characterEncoding=UTF-8", "root", "123456");

Idea 重命名或复制一个项目

目前找到的最好的方法:

一、重命名一个项目

在Idea 项目关闭状态下,在Finder里重命名文件夹,并删除.idea 文件夹下的 workspace.xml (此文件不删的话有些项目配置会有问题)。
Idea 菜单 File - Open… 打开重命名后的项目,在Project Structure中设置如下:

如果是Web 项目,需要重命名模块module name;

重命名项目名Project Name(这个不改也没什么影响);

在artifact中删掉错的,再添加正确的artifact,见下图;

ssm框架问题汇总_第1张图片

大功告成,配置Tomcat即可。

复制整个项目

复制之前可先删除target 文件夹,里面是项目编译后的文件(每次启动Tomcat 都会生成),其中的jar 包体积较大。

在Finder直接复制整个项目文件夹,可直接粘贴在同一个项目目录,修改项目文件夹名称即可;当然也可复制到另一个项目目录。
删除.idea 文件夹下的 workspace.xml (此文件不删的话有些项目配置会有问题)。
(与上面重命名项目的第2步完全一样) 菜单 File - Open… 打开复制出来的项目文件夹(图同上),如果是Web 项目,需要重命名模块,操作是在项目名上shift+F6 (Rename Module);菜单File - Project Structure - Project Name, 重命名项目(但不改好象也没什么影响),图同上;并在 Project Structure 查看 artifact,删掉错的,再添加正确的artifact,图同上;然后再配置Tomcat 即可。

重命名整个Idea 工作空间

如果Idea 工作空间文件夹含空格,可能导致某些程序错误,比如用this.getClass().getResource("/").getPath() 得到的路径,空格会被自动转换成"20%",再使用这个路径就找不到了。所以可以将整个Idea 工作空间重命名,然后直接打开里面的项目的话,Maven 报错无法载入,这个还是workspace.xml 的问题,所以要把整个Idea 工作空间内的workspace.xml 都删了,再打开项目。

获取包路径下的xml文件,Could not find resource com/**/*.xml

问题:在eclipse中,把资源文件放在src文件夹下,是可以找到的;
但是在idea中,直接把资源文件放在src文件夹下,如果不进行设置,是不能被找到的。例如使用Mybatis,mapper文件都是放在包路径下,和实体一个层级,使用IDEA时就会报错

解决:配置maven的pom文件配置,在pom文件中找到节点,添加下列代码:

<build>  
    <resources>  
        <resource>  
            <directory>src/main/javadirectory>  
            <includes>  
                <include>**/*.xmlinclude>  
            includes>  
        resource>  
    resources>  
build> 

*/.xml是通配符,匹配src/main/java目录下所有的xml文件,将其映射为资源文件,这样,IDEA就会加载该xml文件。

log4j.properties找不到

问题:No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).

  • 如果不是web项目,有main函数的那种,则:

    1、在main函数中加入BasicConfigurator.configure();

    2、把log4j.properties放在src目录下,这样才能被找到

  • 如果是有web的那种正常项目,一下两步解决:

    1、将写好的log4j.properties放在WEB-INF目录下(如/WEB-INF/class/log4j.properties)

    2、在web.xml中加入下面的配置:


<context-param>
<param-name>log4jConfigLocationparam-name>
<param-value>/WEB-INF/class/log4j.propertiesparam-value>
context-param>
	
<listener>
<listener-class>
  org.springframework.web.util.Log4jConfigListener
listener-class>
listener>

Bootstrap 模态框(Modal)带参数传值实例

来自:Bootstrap 模态框(Modal)带参数传值实例,完美的解决了我的问题hiahia

模态框(Modal)是覆盖在父窗体上的子窗体。通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动。子窗体可提供信息、交互等。

为了实现父窗体与其的交互,通常需要向其传值,实现带参数的传递,查看数据的唯一性。例如下面窗体:点击任意一个模态框("回复"按钮),如果不做任何处理,则会出现回复混淆,甚至程序出错的情况。

ssm框架问题汇总_第2张图片

为了实现其回复的唯一性和带参传值的功能,需要做以下处理
ssm框架问题汇总_第3张图片
ssm框架问题汇总_第4张图片
ssm框架问题汇总_第5张图片

实现的效果:

ssm框架问题汇总_第6张图片

我的示例如下:

启动tomcat时发现占用端口

mac上终端操作:

第一步:使用lsof -i tcp:1099 查看时那个应用占用了1099端口(换成你想找的端口)

第二部:使用kill pid 即可,这里的pid是第一步所查询到结果

tomcat终端关闭./shutdown.sh时报错

问题报错:Could not contact localhost:8005. Tomcat may not be running.

直接重装tomcat

bootstrap 使用 glyphicon图标不显示

来源 Bootstrap 字体图标(Glyphicons)

解决:引入cdn的bootstrap、jquery即可

<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">  
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js">script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js">script>

使用jQuery cookie插件获取cookie值失败

问题:js中var killPhone = $.cookie("killPhone");取不到值,原来是 $.cookie is not a function就是说

解决:出现这种问题有3中可能

1是没有导入cookie相关的库文件

2是cookie的库文件和jquery库文件的先后顺序问题, 必须先导入jquery库文件后到其他库文件

3一个页面由于二次或多次引入了jquery插件导致。

我们问题原因是手残导入2次jquery库文件,orz。。。

JS 监听回车事件

//监听回车事件
document.onkeydown = function(e){
    if(e.keyCode === 13){
        $("#killPhoneButton").click();
    }
};

one代替cilck

用one绑定而不是click的好处就是:只绑定一次点击事件。防止一个用户不停的点秒杀,都发送服务端造成崩溃

$	("#killBtn").one("click",function(){
});

modal中的input输入框自动获取焦点

解决:在jsp中的input属性中加入autofocus即可

<input type="text"  name="killPhone" autofocus class="form-control" id="killPhoneKey" placeholder="填手机号"/>

查看端口占用情况

命令sudo lsof -i tcp:port(port替换成端口号,比如6379)可以查看该端口被什么程序占用,并显示PID,方便KILL

e.g.

sudo lsof -i tcp:80

查看进程监听的端口号

linux:sudo netstat -ltnp |grep xxx

mac:

sudo lsof -i -n -P | grep 45046  (所查询的进程pid是45046)
sudo lsof -i -n -P | grep memcached  (所查询的进程名是memcached)

-i:列出符合条件的进程
-P 表示不显示端口俗称,直接显示端口号http->80
不加 sudo 只能查看以当前用户运行的程序,所以必须加

mac启动php-fpm

sudo php-fpm -D

4.mac终端执行php脚本

php test.php

phpinfo怎么用

php -r 'phpinfo();’即可

或者启动apache,在apache目录中建一个info.php页面



然后浏览器输入localhost/info.php即可

另外 php -m可以看到php相关扩展

php-fpm启动,重启,终止操作

php 5.3.3 以后的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,所以不要再看这种老掉牙的命令了,需要使用信号控制:

master进程可以理解以下信号

INT, TERM 立刻终止
QUIT 平滑终止
USR1 重新打开日志文件
USR2 平滑重载所有worker进程并重新载入配置和二进制模块

1.启动php-fpm:

/usr/local/opt/[email protected]/sbin//php-fpm

2.重启、关闭

来源:php-fpm - 启动参数及重要配置详解

方法一:

先查看ps aux | grep php-fpm看master进程号,即root用户下的进程号

kill -USR2 pid即可

方法二:

上面方案一般是没有生成php-fpm.pid文件时使用,如果要生成php-fpm.pid,使用下面这种方案:

上面master进程可以看到,matster使用的是/usr/local/php/etc/php-fpm.conf这个配置文件,cat /usr/local/php/etc/php-fpm.conf 发现:

[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
;pid = run/php-fpm.pid


pid文件路径应该位于/usr/local/var/run/php-fpm.pid,由于注释掉,所以没有生成,我们把注释去除,再kill -USR2 42891 重启php-fpm,便会生成pid文件,下次就可以使用以下命令重启,关闭php-fpm了:

php-fpm 关闭:
kill -INT 'cat /usr/local/var/run/php-fpm.pid'
php-fpm 重启:
kill -USR2 'cat /usr/local/var/run/php-fpm.pid'

daemon进程kill不掉不断重启的解决方法:

1./Library/LaunchDaemons/中删除[email protected]文件,这个是mac下的自启文件,删了就不会自启了

2.把www.conf中的www换成xxx都可以。原因是www.conf头部定义了新建一个线程池www,如果user/group也是www的话那就在www下正常运行,但是这样就没法在braincao下甚至root下kill进程了,因此需要把user/group设置为不是www的,这样启动php-fpm就会忽略user/group,也就不会在www下启动而是在briancao下启动,这样就能kill进程了

;user = www
;group = www
user = root  (braincao或xxx都可以)
group = root  (braincao或xxx都可以)

3.设置完后就可以正常的像启动、重启kill -usr2 pid、关闭kill -int pid了,注意pid是最小的那个pid。

你可能感兴趣的:(Spring&微服务)