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
Web开发相关笔记 #03#的更多相关文章
- Web开发相关笔记 #04# WebSocket
本文的主要内容: HTTP VS. WebSocket WebSocket 的客户端实现(JavaScript) WebSocket 的服务端实现(Java & apache WebSocke ...
- Web开发相关笔记 #01#
前端学习纲要 ※jQuery 参考 ※ 整理 Chrome 收藏夹的小技巧 ※ 解决 AJAX 跨域获取 cookie ※ 记一次 MyBatis 相关的 debug [1] 前端学习纲要: ♦ 第一 ...
- Web开发相关笔记 #05# MySQL中文无法匹配
2018-06-02 在 Class.forName 的时候记得先尝试 import 一下. 2018-06-04 1.JDBC SELECT 查询,中文条件查不出东西,可能是字符编码问题: Stri ...
- Web开发相关笔记 #02#
[1] HTML 插入第三方. [2] [3] JavaScript 回调函数 & 模块化 --> 用变量封装数据.方法 --> 类比 Java 中的 package var fe ...
- Web开发相关笔记
1.MySQL命令行下执行.sql脚本详解http://database.51cto.com/art/201107/277687.htm 在可视化工具里导出.sql脚本 --> 放命令行里运行 ...
- 【前端】移动端Web开发学习笔记【2】 & flex布局
上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...
- 【前端】移动端Web开发学习笔记【1】
下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...
- ASP.NET Core Web开发学习笔记-1介绍篇
ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...
- Django Web开发指南笔记
Django Web开发指南笔记 语句VS表达式 python代码由表达式和语句组成,由解释器负责执行. 主要区别:表达式是一个值,它的结果一定是一个python对象:如:12,1+2,int('12 ...
随机推荐
- stm32入门(从51过渡到32)
单片机对于我来说,就是一个超级大机器,上面有一排一排数不尽的开关,我需要做的,就是根据我的设计,拿着一张超级大的表(Datasheet),把需要的开关(reg)都开关(config)到对应功能的位置( ...
- webstorm配置babel自动转译es6的方法
1.npm安装babel npm install -g babel-cli 2.npm安装Babel的preset npm install --save-dev babel-preset-es2015 ...
- php学习十二:其他魔术方法
__clone():克隆的时候会调用__clone方法: __cal:当类里面没有方法的时候会调用__call方法: __toString:当echo的时候会调用__toString方法: __aut ...
- PyQt4 Box布局
使用布局类别方式的布局管理器比绝对方式的布局管理器更加灵活实用.它是窗口部件的首选布局管理方式.最基本的布局类别是QHBoxLayout和QVBoxLayout布局管理方式,分别将窗口部件水平和垂直排 ...
- PyQt4开关按钮ToggleButton
PyQt4没有开关按钮部件.但是我们可以使用在特殊状态下的QPushButton部件来创建开关按钮.而所谓的开关按钮就是一个具有按下和未按下两种状态的普通赶牛.用户可以通过单击按钮来切换其开或者关的状 ...
- django 自定模板标签的注册
首先注册方法一般都是先实例化一个template.Library.如: from django import template register = template.Library() 1.注册自定 ...
- tomcat源码---->request的请求参数分析
当contentType为application/json的时候,在servlet中通过request.getParameter得到的数据为空.今天我们就java的请求,分析一下request得到参数 ...
- bash: ./t.sh:/bin/bash^M:损坏的解释器: 没有那个文件或目录
有时候编写脚本时会出现类似标题列出的错误,这个问题大多数是因为你的脚本文件在windows下编辑过.windows下,每一行的结尾是\n\r,而在linux下文件的结尾是\n,那么你在windows下 ...
- vim命令删除后重新安装
个人原创博客,转载请注明,否则追究法律责任 2017-09-30-09:51:20 1,删除vim命令.模拟错误 [root@localhost ~]# which vim/usr/bin/vim[r ...
- java如何发起https请求
1.写一个SSLClient类,继承至HttpClient import java.security.cert.CertificateException; import java.security.c ...