zoukankan      html  css  js  c++  java
  • Web开发相关笔记 #03#

    HTTP Status 500    jsp 放在 WEB-INF 外面  使用 JDBC 时需要 close 什么 ※ execute 和 executeUpdate ※ How can I read context parameter/web.xml values in a non-servlet java file?

    1、明明写了 servlet 却抛出这个,环境:IntelliJ IDEA

    HTTP Status 500 - Error instantiating servlet class com.example.web.BeerSelect

    临时解决方案:手动把编译出来的 .class 复制到 web/WEB-INF/classes 目录下。

    持续化解决方案:IntelliJ IDEA 2017 配置Tomcat 运行Web项目

    总之是要在 Project Structure --> Modules 中把 compiler output 和 WEB-INF/classes 以及 依赖包和 WEB-INF/lib 相对应起来,具体操作看上面教程。

    后来发现,classes 是不需要自己建立的(lib 最好自建一下), compiler output 和 WEB-INF/classes 也不需要手动去关联,开发环境帮你做好了。保持默认设置比较不容易出错。。

    2、把 jsp 放在 WEB-INF 外面并直接访问会发生什么

    可能是这样的。

    所以 最好 尽量 把 jsp 放 在 WEB-INF 内, WEB-INF 外放 无状态(没有先决条件)的入口 .html 

    像这样。

    3、使用 JDBC 时需要 close 什么?

    http://blog.csdn.net/wc0077/article/details/51083374

    总之 PreparedStatement 和 resultset 最好都放在 finally 里关掉。

    4、PreparedStatement 的 execute方法和executeUpdate方法有性能方面的区别吗

    通常我们没有必要使用execute方法来执行SQL语句,而是使用executeQuery或executeUpdate更适合,但如果在不清楚SQL语句的类型时则只能使用execute方法来执行该SQL语句了 

    5、How can I read context parameter/web.xml values in a non-servlet java file? -- from stackoverflow

    我的动机和提问者相同,打算从 web.xml 读数据库的配置(用户名、密码什么的)。

    本来是采用方案一(<env-entry> 那个),后来发现对代码结构影响很不良就放弃了

    Context env = (Context)new InitialContext().lookup("java:comp/env");

    于是就用方案二,增设一个 ServletContextListener,步骤如下:

    package com.example.model;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    public class DbConfig implements ServletContextListener {
    
        public static String JDBC_DRIVER;
        public static String DB_URL;
        public static String USER;
        public static String PASS;
    
        @Override
        public void contextInitialized(ServletContextEvent servletContextEvent) {
            ServletContext context = servletContextEvent.getServletContext();
    
            JDBC_DRIVER = context.getInitParameter("JDBC_DRIVER");
            DB_URL = context.getInitParameter("DB_URL");
            USER = context.getInitParameter("USER");
            PASS = context.getInitParameter("PASS");
            // 之后在其它类里临时创建该对象拿数据
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent servletContextEvent) {
    
        }
    }

    /

    web.xml

        <context-param>
            <param-name>JDBC_DRIVER</param-name>
            <param-value>org.gjt.mm.mysql.Driver</param-value>
        </context-param>
    
        <context-param>
            <param-name>DB_URL</param-name>
            <param-value>jdbc:mysql://localhost:3306/mangast</param-value>
        </context-param>
    
        <context-param>
            <param-name>USER</param-name>
            <param-value>root</param-value>
        </context-param>
    
        <context-param>
            <param-name>PASS</param-name>
            <param-value></param-value>
        </context-param>
    
        <listener>
            <listener-class>
                com.example.model.DbConfig
            </listener-class>
        </listener>

    /

        private static Connection conn = null;
    
        /*
        加载数据库驱动
         */
        static {
            DbConfig dbConfig = new DbConfig();
            try {
                Class.forName(dbConfig.JDBC_DRIVER);
                conn = DriverManager.getConnection(dbConfig.DB_URL, dbConfig.USER, dbConfig.PASS);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

     算是一种冷门的读取方式  :p

  • 相关阅读:
    TCP/IP,Http,Socket,XMPP的区别
    CygWin 常用命令
    js打印数组,js打印对象的方法
    中奖概率算法(php 可用于刮刮卡,大转盘等抽奖算法)
    sql语句优化
    求职简历怎么写,看看百度吐槽
    c#学习笔记之WPF Application和Windows Form Applications
    c#学习笔记之XML
    c#学习笔记之LINQ
    c#学习笔记之字符串和正则表达式
  • 原文地址:https://www.cnblogs.com/xkxf/p/8543222.html
Copyright © 2011-2022 走看看