Exceptions--java--webapp

如何将一个普通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’

  1. 数据库级配置
    alter database dbname set timezone=’UTC’;

pipeline=# select * from pg_db_role_setting ;
setdatabase | setrole | setconfig
————-+———+————————————–
14930 | 0 | {TimeZone=UTC}

  1. 用户级配置
    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}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值