如何将一个普通jar包打包到maven仓库中去
此处指的是maven仓库中没有的jar包
比我公司其他项目组自己开发的jar包现在需要用maven引用
最简单的办法就是将这个jar包也打包到maven仓库中去引用
这里拿orcale的ucp数据库连接池举例子
1. 配置maven环境变量(这是说的计算机的环境变量)
2. 将这个jar包下载下来放到一个空文件夹下
3. 打开系统的cmd命令窗口,进入到jar存放的文件夹下
4. 执行如下命令mvn install:install-file -Dfile=ucp-1.0.jar -DgroupId=orcale.ucp.jdbc -DartifactId=ucp -Dversion=1.0 -Dpackaging=jar
执行完命令之后到maven仓库就可以找到这个包,在自己的项目中引用
解释:-Dfile是jar包的全名,DgroupId是分组名可以自己定义
idea-tomcat启动报错
Application Server was not connected before run configuration stop, reason:
Unable to ping server at localhost:1099
网上说很多端口占用之类的问题,还有jre版本问题,我这里都没有解决
解决方案:检查idea的tomcat配置,查看vm启动参数是否正确填写
这里看似正常,实际上少了一个“-”,正确的应该是-Dfile.encoding=UTF-8
idea-maven-spring-tomcat启动报错
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: [31] in the generated java file:
The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:366)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:485)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:379)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:341)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:657)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
com.darkblue.commons.services.ExpiresFilter.doFilter(ExpiresFilter.java:51)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal
(CharacterEncodingFilter.java:197)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.59 logs.
报错如上所示,最终经过查资料问题解决
解决方案:在此maven配置中引用了
<!--servlet相关-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet-version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-version}</version>
</dependency>
在上述所用引用中均加入<scope>provided</scope>
之后问题解决
idea-maven-spring-jstl标签-tomcat启动报错
现象是只要引用标签库就会报与上述相同的错误
解决方案:
1.检查jstl标签依赖引用是否正确
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
</dependency>
2.上述依赖中不能有<scope>provided</scope>
配置
3.可以将项目打包成war包,查看lib中的jar包是否上述两个依赖包,查看是否有servlet包依赖包重复,如果有:
配置如下解决依赖冲突问题
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
</exclusions>
<version>${jstl-version}</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
</exclusion>
</exclusions>
<version>${standard-version}</version>
</dependency>
jsp页面使用jsp标签引入css或js不生效的问题
首先检查,被引入的公共jsp页面需要放在WEB-INIF目录下
sessionFilter报senderror()
java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:478)
at org.springframework.web.servlet.DispatcherServlet.noHandlerFound(DispatcherServlet.java:1184)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:942)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at com.darkblue.commons.services.ExpiresFilter.doFilter(ExpiresFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at manager.filter.SessionFilter.doFilter(SessionFilter.java:27)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
代码如下:
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
AdminUser oper = SessionUtil.getSysLogon(request);
if (oper == null) { // 操作员没有登录
// 跳转到登录页面
request.getRequestDispatcher("/pages/admin/login.jsp").forward(request, response);
// return;
} else {
request.setAttribute("user", oper);
}
chain.doFilter(servletRequest, servletResponse);
}
解决办法是转发后必须加上return
spring依赖注入失败
最近碰到了一个问题,使用SSM框架,在Service层需要另开一个线程,这个线程专门用来做一些操作,并将结果写入数据库中。但是在线程中使用@Resource或者@Autowired注入全部为NULL,
原来是Spring不能在线程中注入。
springmvc requestBody 和responseBody使用问题
这里以RequestBody使用为例
后台想接受到数据并自动转换成对象形式
在使用ajax向springmvc服务发送数据时出现400,415错误,响应java对象时出现406错误
经检查解决后记录以下几点:
1、ajax写法
$.ajax({
url: url,
data: JSON.stringify(data), 重点一:我组的data数据时json object这里需要转换成json字符串
success: function (ret) {
},
error: function (ret) {
},
type: "POST", 使用requestBody时请求方式一定为post
contentType: "application/json; charset=utf-8",重点二:请求头里必须指明上送数据为json格式
dataType: "json"
});
2、controller写法
@ResponseBody
@RequestMapping(value = "/language/addSingle", produces = "application/json;charset=UTF-8", consumes = "application/json")
public String addLangSingle(@RequestBody LangMapBean langMap) throws Exception{
Console.println(langMap);
return "";
}
重点一:参数里一定要写明注解@RequestBody
重点二:后端定义的对象属性名称一定要和前端定义的json对象的属性名称相对应,并且属性数量只可多不可少
重点三:在springmvc配置文件中需要有<mvc:annotation-driven/>
重点四:检查是否引入如下两个jar包,版本为2.8.4
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
</dependency>
理论上只要满足以上要求,发送post请求自动转json为对象就没有问题
但是这里说的就是特殊情况,我在所有配置均正确的情况下一直报415
解决方法:仔细检查以上每一条配置是否都正确,仔细检查jackson jar包是否正确引入,尤其是打包后
仔细检查war包lib中是否确实存在jackson几个jar包(如果打的是jar包,可以尝试更换成war包进行检查)
在以上所有条件均具备后,测试成功
这里是ResponseBody用例
当要返回java对象要求springmvc自动转换为json时需要配置@ResponseBody,如果报406错误
同样需要检查上述jar包的引入情况同时@RequestMapping指明produces = “application/json;charset=UTF-8”
只要这两处设置正确就不会报406
@RequestMapping(value = "/language/addSome", produces = "application/json;charset=UTF-8",
consumes = "application/json")
produces指定了响应数据的格式和编码
consumes指定了请求数据的格式和编码
关于google chrome 的 Resource interpreted as stylesheet but transferred with MIME type text/plain问题?
我这里使用的是springmvc框架,但是sessionFilter用的依然是servlet的,问题在于我在filter中的关于静态资源的排除逻辑没有执行,原因是,我将工程名硬编码到了filter里,结果部署时的工程名发生了变化,于是filter将所有静态资源全部拦截了
总结:在编码时要尽量避免硬编码,工程名可以根据request.getContextPath()获得
ssm 启动报错 通配符的匹配很全面, 但无法找到元素 ‘context:property-placeholder’ 的声明
通配符的匹配很全面, 但无法找到元素 ‘context:property-placeholder’ 的声明
解决方案:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
如不能解决问题,在检查spring配置文件头部
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
ssm 启动报错 ClassCastException
17-Apr-2018 22:35:40.441 严重 [http-apr-8080-exec-2] org.apache.catalina.core.StandardWrapperValve.invoke Allocate exception for servlet CharacterEncodingFilter
java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Servlet
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1091)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:817)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2527)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2516)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
报的错看似是servlet的问题,实则是工程内部的问题,仔细检查工程代码,查看是由有类重复
我这里就是一个类在两个子项目中都存在造成的这个问题
另外注意检查CharacterEncodingFilter是一个filter,不能配置在<servlet>
标签下
ssm 注入失败的问题
这次问题主要是因为service层依赖的mybatis–dao层包扫描配置出了问题
我的mapper的xml和java类不在一个目录,结果只扫描了mapper.xml,没有扫描mapper.java,于是导致service层注入失败,导致service注入到controller层同样失败
解决方式就是,mapper.xml和mapper java文件同时添加到包扫描下去
<!--扫描 mybatis orm 映射-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.test.today.dao"/>
</bean>
对应包结构如图所示
postgresql 修改时区
例如要将默认的PRC修改为UTC
可以从几个方面来修改
1. 全局参数
postgresql.conf
timezone=’UTC’
- 数据库级配置
alter database dbname set timezone=’UTC’;
pipeline=# select * from pg_db_role_setting ;
setdatabase | setrole | setconfig
————-+———+————————————–
14930 | 0 | {TimeZone=UTC}
- 用户级配置
alter role rolname set timezone=’UTC’;
或者
alter role all set timezone=’UTC’;
pipeline=# select * from pg_db_role_setting ;
setdatabase | setrole | setconfig
————-+———+————————————–
14930 | 0 | {TimeZone=UTC}
0 | 0 | {TimeZone=UTC}