分类 Java开发 下的文章

背景

在配置jenkins+springboot+gitlab自动化部署的过程中。构建完成后,无法启动网站,查看日志发现提示如下错误:

no main manifest attribute, in /app.jar

之后,本地手动package后,执行java -jar demo.jar运行也是会报错jar中没有主清单属性

原因

初步估计,是打包时,未将所有依赖包都打入包中导致。

解决

pom.xml中的build/plugins下添加如下内容

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

背景

初学java,在学习spring时,一步一步安装视频教程进行配置,编码,在最后运行时,却无法访问controller中的请求,提示404。首页可正常访问,因controller中直接指向了一个静态jsp文件,经测试,直接修改url可以正常访问该页面,但经过controller访问却提示404。

HTTP状态 404 - 未找到
类型 状态报告

描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。

Apache Tomcat/9.0.36

实现代码

1、pom.xml中已经正确配置了所需的dependency。
2、web.xml配置如下

    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

3、UserController代码:

@Controller
public class UserController {

    @RequestMapping("/quick")
    public String save(){
        System.out.println("Controller save running ...");
        return "success.jsp";
    }
}

4、spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/mvc
              http://www.springframework.org/schema/mvc/spring-mvc.xsd
              http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context.xsd">

    <mvc:annotation-driven/>
    <context:component-scan base-package="info.hnbc.controller"/>
</beans>

分析

在反复测试后,发现根本就没有进入到Controller中,初步估计是根本就没有正确扫描到我们的controller,也就是在ioc容器进行解析我们的UserController时出错。各种折腾后发现在打包过程中,没有jar包,这也就导致ioc容器无法正常加载,从而导致UserController类没有加载打包给tomcat。具体原因还在研究,先介绍解决方法,后续再进行更新。

解决方案

打开Project Structure,选择Artifacts选项卡,在右侧,展开WEB-INF,新建一个名为lib的文件夹,
spring-mvc-study-1.png

之后将对应的库添加到lib下,重新运行即可解决。

使用IDEA过程中,碰到了这个菜鸟级别的问题,不过鉴于我第一次使用,还是记录下。

问题

IDEA新建了Web 应用,在配置了Tomcat后,直接运行没有问题,正常启动了,但是使用调试运行过程中,出现了无法打开Debugger port的问题。
QQ截图20200612151429.png

15:11    Error running 'Tomcat 9.0.36': Address localhost:8080 is already in use

15:11    Error running 'Tomcat 9.0.36': Unable to open debugger port (127.0.0.1:8123): java.net.SocketException "Interrupted function call: accept failed"

因为在左下角弹出了错误提示,只有上面的第二个错误信息,以为是那个8123的端口被占用,来来回回改了好几个都一样。后来点开了日志,才发现是8080被占用了。

解决方案

方案一

知道了问题就好办了,这个端口明显是tomcat配置的,打开tomcat安装目录,找到conf/server.xml。修改其中的<Connector port="9888" protocol="HTTP/1.1"将port端口修改一个未被占用的,保存后重新debug就可以了(还是不行,可以重启tomcat服务试试)。
修改端口号.png

方案二

查找占用了8080端口的进程,结束掉。该方法简单暴力,但最好确认占用端口的进程是否可以随意结束。

背景

最近想学习使用下Java,下载了IDEA,配置了tomcat后,发现输出的日志信息,竟然是中文乱码,如下图所示,起初以为是IDEA的编码问题,Setting里设置了各种编码和语言,并没有起作用。
中文乱码.png

经过

网上搜了相关文章,但是试了几个并没有起作用。其中大部分是修改IDEA中Setting里面相关设置。

后来突然意识到,这应该是Tomcat输出的日志信息本来就是乱码造成的,于是有了如下解决办法。

解决

在Tomcat安装目录下,找到conf/logging.properties文件,打开后,找到 java.util.logging.ConsoleHandler.encoding的配置项,将其值修改为GBK即可。
修改前:
java.util.logging.ConsoleHandler.encoding = UTF-8

修改后:
java.util.logging.ConsoleHandler.encoding = GBK

中文乱码解决.png

解释

根据字面意思,很容易猜出来,改配置项是设置的tomcat控制台输出的log文本的编码,正是我们出现中文乱码的地方。