回顾
1.Servlet API
2.HttpServlet
DoXXX处理哪种Http方法会调用到对应的方法
init/destroy/service—>servlet的生命周期
3.HttpServletRequest Http请求 get系列方法
协议名(版本号)
url
query string
header
query String/body
HttpServletResponse Http响应 set系列方法
状态码
各种header
body
正文
当前表白墙写了多个DataSourse,使用单例模式优化
饿汉:类加载创建实例
懒汉:效率更高(首次调用创建实例)
public class DBUtil {
private static DataSource dataSource=null;
public DataSource getDataSource(){
//首次调用的时候创建实例
if(dataSource==null){
dataSource=new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:/mysql://127.0.0.1:3306/java105?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
//数据库的密码
((MysqlDataSource)dataSource).setPassword("1309411303");
}
return dataSource;
}
}
还要注意线程安全问题:
多个线程同时判定dataSouce为null,会创建多个实例
Servlet代码中,涉及到多线程/线程安全问题,
Servlet写的是一个服务器,同一时刻,可能要处理多个客户端的请求,一旦有多个客户端发送多个请求,服务器务必需要同时处理多个请求
Tomcat内部正式使用了多线程的方式
解决方案:
1.加上volatile
private static volatile DataSource dataSource=null;
2.加锁

3.构造方法私有

Cookie 和 Session
Cookie 是浏览器在本地持久化保存数据的一种方案
一个典型的使用方式,存储登录信息

在Servlet中也专门提供了相关的Api,让我们来操作Cookie和Session
理解会话机制
服务器同一时刻收到的请求是很多的. 服务器需要清除的区分清楚每个请求是从属于哪个用户, 就需要在服务器这边记录每个用户令牌以及用户的信息的对应关系



写一个模拟登录的案例:
1.登录页面,用户可以填写用户名+密码
2.Servlet来处理登录请求
3.使用另一个Servlet来生成主页内容(登录成功后,跳转到的页面)
1.构造form表单发给Servlet处理(注意三点匹配关系)
name(getParameter),method ,action

2.Servlet进行判定
当用户点击提交的时候,就会把刚才input框的name的值作为key,把input框里用户的输入,作为value,把这个键值对,放到body中提交给服务器,name属性决定了键值对中的建,通过服务器getParameter获取值

这里将字符串写到前面,肯定不是空的,一定不会出现空指针异常(好处double check),虽然equls内部已经针对参数为null进行从处理了











![[附源码]计算机毕业设计校园商铺Springboot程序](https://img-blog.csdnimg.cn/a96cc7f6162f4e62afba2b91e285deb2.png)
![[附源码]计算机毕业设计药品仓库及预警管理系统Springboot程序](https://img-blog.csdnimg.cn/279c030adc8048ec89d525c19cc87ba2.png)





![[附源码]计算机毕业设计基于springboot的4s店车辆管理系统](https://img-blog.csdnimg.cn/7081d948d11a4d1abc9458869f39c941.png)
