和java有关的小问题

1.MySql数据库表插入中文数据的时候,显示❓

前提:1.已经正确设置数据库的编码格式utf8
      2.能连接数据库
      3.sql语句没有问题
解决办法:
      如果使用template.update方式,在url后面添加上数据库的默认编码格式                                          url=jdbc:mysql://localhost:3306/day17?characterEncoding=utf8

2maven项目启动过程中的错误

报错提示

错误关键代码
javax.servlet.ServletException: Class com.itcsl.servlet.MyServlet is not a Servlet

解决办法:

报错提示


不再支持源选项 5。请使用 7 或更高版本。
不再支持目标选项 5。请使用 7 或更高版本。

解决办法

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8888</port>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <target>1.8</target>
                    <source>1.8</source>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

        </plugins>
    </build>

3.控制台报错:Property 'dataSource' is required

解决方案:

java.lang.IllegalArgumentException: Property ‘dataSource’ is required 说的是DataSource是必须的

在dao使用的时候dataSource是空的.

检查JdbcUtils工具类 ,发现使用类加载器加载druid.properties文件,那么使用类加载器的话因为本身就是从classpath下获取.所以不需要加 /

4.控制台报错:org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0

解决方案:

错误信息
org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
	at org.springframework.dao.support.DataAccessUtils.requiredSingleResult(DataAccessUtils.java:71)
	at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:812)

方案
queryForObject无记录时会抛出异常,而对于query()list的类型不会抛出此异常。解决方法就是捕获这个异常然后在catch中返回null就可以。修改代码如下:

  @Override
    public User findByUsername(String username) {
        User user=null;
        try{
            //1.定义sql
            String sql="select * from tab_user where username= ?";
            //2.执行sql
            user= template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username);

        }catch (Exception e){
            return null;
        }
    }

5.java.lang.NoSuchMethodException

没有这样的方法

问题
java.lang.NoSuchMethodException: cn.itcast.travel.web.servlet.UserServlet.add(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
	at java.base/java.lang.Class.getMethod(Class.java:2113)
	at cn.itcast.travel.web.servlet.BaseServlet.service(BaseServlet.java:31)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at cn.itcast.travel.web.filter.CharchaterFilter.doFilter(CharchaterFilter.java:30)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:835)
请求的路径/travel//user/find
方法名称find
cn.itcast.travel.web.servlet.UserServlet@304b3938
java.lang.NoSuchMethodException: cn.itcast.travel.web.servlet.UserServlet.find(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
	at java.base/java.lang.Class.getMethod(Class.java:2113)
	at cn.itcast.travel.web.servlet.BaseServlet.service(BaseServlet.java:31)

解决方案1

解决方案2
更改方法的修饰符为public

  public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("UserServlet的add方法....");
    }

    public void find(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("UserServlet的find方法....");

    }

6.Idea控制台中文乱码解决:-Dfile.encoding=gb2312

7.解决tomcat7中的中文参数乱码

        rname=new String(rname.getBytes("iso-8859-1"),"utf-8");

8.IntelliJ idea设置单行行首注释去掉多余空格

问题:java代码使用快捷键"ctrl+/"添加行注释时,发现出现多余空格:


解决:
打开idea:file>settings>Editor>code style>java>勾选use tab character
表示tab缩进不使用空格而使用制表符,如果使用空格就会出现上述多余空格问题。
最后,格式化下代码:"ctrl+alt+L"

问题:

解决办法:

问题:

解决办法:

9maven由于他的约定大于配置,我们之后可以能遇到我们写的配置文件,无法被导出或者生效的问题,

 <!--在build中配置resources,来防止我们资源导出失败的问题-->
    <build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
    </build>
默认为false
<!--其中最重要的是<filtering>true</filtering>这段,
    这个配置的意思是过滤上面指定属性文件中的占位符,占位符是${变量名称}这样的形式,maven会自动读取配置文件,然后解析其中的占位符,使用上面pom文件中定义的属性进行替换-->

posted @ 2020-08-27 14:31  忘山川  阅读(231)  评论(0编辑  收藏  举报