林文辉
三层架构:
1.主要分为Dao(数据)层,Service(业务逻辑)层,web(界面)层。
2.把各个模块分开主要是为了降低耦合度。每个模块自己做自己的事
3.主要是一个思想,高内聚低耦合。这样的好处有很多,比如你有需求变化之类的
,你只需在在对应的层里修改就行了,就不需要把整个项目改一遍。
用户登录功能实现:
1.表单form action属性中写入要跳转到的Servlet
2.request.getParameter()获取表单中的参数。
3.将参数封装到实体类中,调用业务层,业务层调用数据层,通过DBUtils查询数据
库中的数据,并返回一个实体类
4.如果为空,返回登录失败,否则返回登录成功,通过response.getWirter().println()返回。
Servlet的生命周期:
1.第一次访问Servlet时,服务器就会创建一个Servlet实例,Init方法就会被调用。
2.重复访问也只会重复执行Service方法。不会重复的创建Servlet实例。
3.在Service中根据不同的请求方式,会调用不同的doxx方法。
4.Serlvet在服务器中被移除,或者关闭服务器时,Servlet实例就会被销毁,destroy方法就会执行
Servlet的配置方式:
1.完全路径匹配, 如/demo1,/aaa/bbb
2.目录匹配 如/* /aaa/bb*
3.扩展名匹配: 如*.do或者*.jsp
匹配优先级:完全路径匹配>目录匹配>扩展名匹配
实现5秒跳转案例:
1.可以通过Refresh实现定时跳转,通过设置程序头信息。
response.setHeader("Refresh", "5;url=/jsp/index.html");
2.可以通过js实现读秒跳转效果
response.setHeader("Location", request.getContextPath()+"/jsp/success.jsp");
在success.jsp中
<meta http-equiv="Refresh" content="5;url=${ pageContext.request.contextPath }/jsp/index.jsp">
再通过js
var time=5;
window.onload=function(){
setInterval(function(){
time--;
document.getElementById("s1").innerHTML=time;
},1000);
}
记录网站登录成功的人数:
1.在init()方法中初始化count=0,再存入setAttribute().域中
2.每次向Servlet发出请求时,Servlet里就读取一次getAttribute(),返回到客户端,再
将count++存入Servlet中
|