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框架问题汇总
文章图片

大功告成,配置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文件中找到节点,添加下列代码:
src/main/java **/*.xml

*/.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中加入下面的配置:
log4jConfigLocation /WEB-INF/class/log4j.properties org.springframework.web.util.Log4jConfigListener

Bootstrap 模态框(Modal)带参数传值实例 来自:Bootstrap 模态框(Modal)带参数传值实例,完美的解决了我的问题hiahia
模态框(Modal)是覆盖在父窗体上的子窗体。通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动。子窗体可提供信息、交互等。
为了实现父窗体与其的交互,通常需要向其传值,实现带参数的传递,查看数据的唯一性。例如下面窗体:点击任意一个模态框("回复"按钮),如果不做任何处理,则会出现回复混淆,甚至程序出错的情况。
ssm框架问题汇总
文章图片

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

ssm框架问题汇总
文章图片

ssm框架问题汇总
文章图片

实现的效果:
ssm框架问题汇总
文章图片

我的示例如下:
启动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即可
src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"> src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js">

使用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即可

查看端口占用情况 命令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/php@7.2/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/中删除homebrew.mxcl.php@7.2.plist文件,这个是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都可以)

【ssm框架问题汇总】3.设置完后就可以正常的像启动、重启kill -usr2 pid、关闭kill -int pid了,注意pid是最小的那个pid。

    推荐阅读