SpringMVC+tomcat json接口开发,IDE IntelliJ idea遇到的问题汇总

来源:互联网 发布:淘宝仿古画 编辑:程序博客网 时间:2024/06/05 09:42

一、  Linux下Tomcat安装

    官方下载最新的安装包 Core 下tar.gz格式的http://tomcat.apache.org/download-90.cgi,解压缩到/usr/local/tomcat,启动/关闭命令/usr/local/tomcat/bin/startup.sh 、/usr/local/tomcat/bin/shutdown.sh 。

   安装前需要先安装jdk环境。yum安装了64位的通用jdk(s..2-jdk.x86_64), 在shutdown tomcat的时候提示

Exception in thread "main"java.lang.UnsupportedClassVersionError: org/apache/catalina/startup/Bootstrap :Unsupported major.minor version 51.0

以为是tomcat版本和jdk不匹配。后来安装了openjdk(java-1.8.0-openjdk-src.x86_64)好了。 
    配置环境变量  vim ~/.bash_profile

JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.x86_64

CLASSPATH=.:$JAVA_HOME/lib/tools.jar

PATH=$PATH:$JAVA_HOME/bin

export JAVA_HOME CLASSPATH PATH

   执行source ~/.bash_profile 使其生效。

   测试是否安装成功,访问localhost:8080 或 ip:8080


二、IntelliJ 创建工程

    私以为IntelliJ 工程里边的各种settings太难懂了。。

    创建工程的时候,要project里边是基本的命名和选择jdk。关键是facets里边要把用到的Spring和Web已经WebServices添加全了,要不跑不起来。。添加后,modules里会默认添加对应的模块。

    具体的SpringMVC配置和详解,就参见http://www.cnblogs.com/baiduligang/p/4247164.html。



三、踩过的坑

1. 数据库编码问题,汉字的显示

   mysql里边执行  show variables like 'char%';  可查看当前db的编码设置,其中的result是直接影响代码里连接db后查询结果的编码的,需要修改为utf-8,不然没法显示汉字。

  命令:SET character_set_results= charset_name; 其中charset_name 替换成utf-8.

character_set_connection(sql语句使用什么编码方式)、character_set_client (终端显示什么编码)、及character_set_results (sql执行结果是什么编码)



2. intelliJ 中tomcat的配置

运行设置中选则tomcat后,执行报错Unable to ping server at localhost:1099

原因:由于Tomcat默认关闭JMX功能,但IntelliJ IDE配置的IDE需要提供JMX功能

解决:hosts文件 127.0.0.1 添加本机名,例如:127.0.0.1       localhost  bj-m-10313a.local


3. intelliJ 中 tomcat 运行报错 javax.servlet.http不存在

lib引入servlet-api的jar包


4. db中DATATIME类型的数据,当为默认值'0000-00-00 00:00:00'时,使用ResultSet.getTimestamp()报错:Cannot convert value '0000-00-00 00:00:00' fromcolumn 1 to TIMESTAMP

原因:ResultSet.getTimestamp(),这样会得到一个Java.sql.Timestamp类型的数据。在这里既不能使用ResultSet.getDate(),也不能使用ResultSet.getTime(),因为前者不包括time数据,后者不包括date数据。JDBC不能将'0000-00-00 00:00:00'转化为一个为一个java.sql.Timestamp,在Java中,想创建一个java.util.Date,使其值为'0000-00-00'也是不可能的,最古老的日期应该是'0001-01-0100:00:00'

解决:

String url = "jdbc:mysql://localhost:3306/test?relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull";


5. 页面报错: Java.lang.NoClassDefFoundError:javax/servlet/jsp/jstl/core/Config

解决:下载jstl-1.2.jar、standard-1.1.2.jar放在tomcat的lib下

6. 开启8090tomcat端口,访问的时候提示网络不通

原因:防火墙问题,关闭或者添加端口白名单

vim /etc/sysconfig/iptables

添加:-A INPUT -m state--state NEW -m tcp -p tcp --dport 8090 -j ACCEPT

重启防火墙# service iptablesrestart


7. 静态资源打war包的时候打不进去

解决:intelliJ上 file-project Structure-modules-sources  在想打包的静态资源上右键-resource


8. 使用JNI开发,IntelliJ运行及打包部署后运行,提示找不到JNI文件或  Handler dispatch failed; nestedexception is java.lang.NoClassDefFoundError: Could not initialize classnet.sf.clipsrules.jni.Environment

原因:因为tomcat的运营方式下没有设置library.path是设置引用的非Java类包(如DLL,SO)的位置

解决:IntelliJ上tomcat的运行配置中Server下的VM option添加 .path="非Java类包所在的路径";

tomcat的打包环境上,添加LD_LIBRARY_PATH环境变量 。vim ~/.bash_profile 添加:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/tomcat/clips

export LD_LIBRARY_PATH 

其中:/usr/local/tomcat/clips作为java.library.path

并执行source ~/.bash_profile  使其生效。

在LD_LIBRARY_PATH的环境变量路径下,添加需要so文件。


.so文件的生成办法,在含有JNI的实现源文件下执行make文件,例如make -fmakefile.linux,结果提示找不到jni.h和jni_md.h

解决办法,默认找的是/usr/include目录,所以将java下面的include中,例如

/usr/java/sinasrv2-jdk/include下的jni.h,及/usr/java/sinasrv2-jdk/include/linux下的jni_md.h拷贝到/usr/include下,就可以正常执行了。

执行后library-src下会生成一个libclipjni.so,拷贝到java.library.path的下面



推荐好文:

springmvc框架:http://www.cnblogs.com/baiduligang/p/4247164.html

springmvc接口开发:http://blog.csdn.net/zxw136511485/article/details/52584497

restful风格APi开发 :http://www.cnblogs.com/qixiaoyizhan/p/5864233.html

requestmapping详解:http://www.cnblogs.com/qq78292959/p/3760560.html

intelliJ java打war包:http://jingyan.baidu.com/article/a24b33cd10adf719fe002ba1.html

mac 开启ssh服务:http://blog.csdn.net/govago/article/details/8536165


常用Linux命令汇总:

查询java_home环境变量 :/usr/libexec/java_home

查询全部的环境变量:Env


java基础知识:

调用静态方法:类名.class.方法名()

getClass().getResource()与getClass().getResourceAsStream()的差别是前者得到的是url路径,后者得到的是Inputstream流,即这个路径下的所有资源文件。

当路径中包含空格时,getResource()得到的url中空格会被转义成%20,file就无法识别,因此需要用url.toURI().getPath() 的方式做一下转换就好了





阅读全文
0 0