MVC
servlet是控制器。
视图是jsp
模型就是java类和dao
/
将jdbc封装到dao中
写个dao来访问数据库,不要emplist中的访问数据库,用dao代替
创建一个EMP类来保存数据库查询出来的信息。
也有id,name等信息。
注意都是分层的。
写的DBUtil产生的异常不会直接显示给最终,而是抛给下一层。
注意用分层的概念。
就是说单纯把对数据库的操作都拿出来。单独写类,然后在调用类。
并且创建一个类Employee来存储每一个员工数据
看不清,下面的地址能看到。我只是单纯的写出了这个emp的思路
https://www.processon.com/chart_image/582ffaabe4b05594f50e7e8f.png
注意:
Before start of result setc 错误是数据库查询返回的是一个指针,要rst.next()的。
mysql处理中文需要注意的问题:
数据库首先要支持中文:
创建数据库的时候后面加一句 default character set utf8
java使用unicode来编码的。
插入数据库是输出,要编码成本地字符集支持的形式
mysql的某些驱动,默认会使用“iso-8859-1”来编码的,对于中文就会发生乱码。
可以这样:
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsd1507db?"+”useUnicode=true&characterEncoding=utf8”, "root", "root");
这种写法只针对mysql(注意数据库名后面的问号)
servlet的生命周期:
1、什么是servlet的生命周期
容器如何去创建servlet对象,如何对其进行初始化处理,如何调用其方法来处理请求,以及如何销毁该对象的过程。
2、分成哪几个阶段
4个阶段
1)实例化
什么是实例化?
容器调用servlet的构造器,创建相应的对象
什么时候实例化?
情况1:容器收到请求之后。
注:容器只会创建一个实例
情况2:容器启动后立即创建
在描述文件添加:
<load-on-startup>1</load-on-startup>
参数要求是一个大于等于0的整数,越小,优先级越高。
并没有发送请求就执行了构造器
2)初始化
什么是初始化?
容器调用servlet对象的一个方法 init方法。该方法只会执行一次.
在调用servlet之前要调用init方法
GenericServlet的init方法是如何实现的?
将容器传递过来的ServletConfig对象保存下来,并且提供了一个获得对象的方法(getServletConfig)
如何实现自己的初始化处理逻辑?
只需要override GenericServlet提供的init()方法。
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
System.out.println("SomeServlet's init.....");
}
初始化参数:
配置:
<!-- 初始化参数 -->
<init-param>
<param-name>name</param-name>
<param-value>Recar</param-value>
</init-param>
读取:
String ServletConfig.getInitParameter(配置的参数名);
以后要改的话直接就去描述文件改就行了
要访问才会有。
3)调用(就绪)
什么是就绪?
容器调用servlet对象的service方法来处理请求。
HttpServlet的service方法是如何实现的?
依据请求类型(get/post)调用对应的doXXX方法(doGet/doPost)
注:
我们可以写一个servlet,继承HttpServlet,然后override doGet 和doPost或者也可以直接override service方法。
4)销毁
什么是销毁?
容器在删除servlet对象之前,会先调用该对象的destroy方法。
该方法只会执行一次。
销毁容器说了算。不同容器实现还不一样,但是只要把这个servlet从容器中删除就会执行销毁。
相关的几个类与接口
Servlet接口
:3个方法:
init
service
destroy
GenericServlet抽象类
实现了Servlet接口中的部分方法(init,destroy)
HttpServlet抽象类 继承GenericServlet抽象类,实现了service方法。
容器如何处理请求资源路径
比如,在浏览器地址输入
http://ip:port/web/asd.html
(1)容器依据应用名(“/web”)找到应用所在的文件夹。
(2)容器并不会马上去找这个文件夹的文件。容器会默认调用的是servlet,去web.xml查找有没有一个和”asd.html”匹配的servlet
再写个asd.html。还是返回的是servlet的asd.html
会先找servlet。没有再去单纯的html文件。
查找有没有一个和”asd.html”匹配的servlet
所谓的匹配:
(1)精确匹配
<url-pattern>/asd.html</url-pattern>
(2)通配符匹配
使用“*”匹配0个或者多个字符,比如:
<url-pattern>/*</url-pattern>
(3)后缀匹配:
使用“*.”开头,后接多个字符,比如:
<url-pattern>/*.do</url-pattern>
这个会匹配所有以.do结尾的请求
如果没有匹配的servlet,则容器会查找相应的文件。