0,三层架构:
单一职责原则,职责和功能分离开,实现高内聚、低耦合。
web:接受数据,封装成bean,传输数据,返回响应
service:处理业务逻辑
dao:与数据库交互
优点:
1,开发人员只关注某一个层面
2,很容易的用新的实现来替换原有层次的实现,降低层与层之间的依赖
3,利于标准化
4,各层逻辑复用
5,结构更加明确
6,便于维护
缺点:
1,降低系统性能
2,导致级联修改
3,增加成本(开发时间和人员增加)
1,Tomcat
目录
bin :存放可执行文件
conf :存放配置文件
lib :存放jar包
logs :存放日志
temp :存放临时文件
webapps :存放web项目
work :存放jsp转换成html的中间产物
2,什么是Servlet
1,用Java编写的服务器端程序。
2,主要功能在于交互式地浏览和修改数据,生成动态Web内容。
3,狭义的Servlet是指Java语言实现的一个接口,
4,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
5,Servlet运行于支持Java的应用服务器中。
6,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
JSP概念
Servlet是j2ee提供的动态资源开发技术,是以java的程序的形式进行开发,在java中书写HTML标签是一件十分头疼的事情,所以人们开发出了JSP,看起来像是HTML一样,但是通过服务器的编译最终可以生成Servlet,jsp页面其实就是一个servlet。
动态网页技术
jsp页面翻译成.java,然后再编译成.class,最后再运行这个.class文件
jsp = html + java
jsp页面其实就是一个servlet
servlet能做的事情jsp全能做。
servlet和jsp需要部署在服务器上才能运行。
servlet和jsp不需要写main方法运行。
浏览器只能打开html,需要通过服务器Tomcat将java转换成html,才能打开。
3,Servlet的作用:
可以让服务器调用处理请求的类。
4,一个类变成Servlet的方法:
1,实现一个Servlet接口
service(ServletRequestreq,ServletResponse res); 处理请求的方法。
destroy(); 销毁
getServletConfig();返回ServletConfig 对象。
getServletInfo();返回Servlet对象的信息。
init(ServletConfig config);初始化。
2,继承一个抽象类HttpServlet
public class ServletName extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}
**5,servlet的生命周期:
servlet创建、初始化只一次(因为单例),执行多次
销毁:正常关闭服务器
重新部署
servlet的对象是单例:
在web项目整个运行期间,每一个servlet类只会有一个对象存在。
1,创建 :(默认情况)servlet第一次被访问的时候创建
2,初始化 : 创建以后立刻初始化,调用init(ServletConfig config)
3,执行 : 每次被访问的时候都会调用service(ServletRequest req,ServletResponse res);
4,销毁 : 正常关闭服务器,服务器自动重新部署,手动重新部署服务器的时候会调用destroy()进行销毁。
由于对象单例,可能产生多线程安全问题,解决办法:
1,减少成员变量的使用
2,加锁synchronized
3,使用安全性接口
6,客户端向服务器发请求和传参,客户端向服务器发送请求可以是get方式也可以是post方式.所以传参也分为get方式下传参和post方式下传参。
1,get方式下传参:
a.浏览器中输入地址(URL)然后回车
b.超链接 <a href="param?name=haha&age=20"></a>
c.页面中引入的css样式文件
d.页面中引入的js的文件(javascript)
e.<img src="image/a.jpg" />
e.<img src="register" />
f.form表单中method="get"
g.ajax中可以设置异步提交请求的方式为get
2,post方式下传参:
a.form表单中method="post"
b.ajax中可以设置异步提交请求的方式为post
get/post区别:主要体现在所传参数上面
get方式传参的特点:
1.参数直接放在url后面。
2.从浏览器的地址栏里面可以直接看到所传的参数。
3.参数的长度有限制,不能把一个很长的数据通过get方式传参。(与浏览器种类有关)
post方式传参的特点:
1.参数放在请求体部。
2.浏览器的地址栏中看不到所传的参数。
3.因为参数不用出现在地址栏里面,所有参数长度是没有限制的。
7,servlet中接收客户端传过来的参数:
form: action="/url" input标签中 获取 key-value
a : href="/url?key1=value&key2=value"
8,
请求发送的过程
浏览器-->tomcat服务器-->web.xml-->servlet.java-->代码
响应的过程
代码-->servlet.java-->服务器-->浏览器
9,servlet中的跳转:
1,服务器内部跳转:
RequestDispatcher rd =req.getRequestDispatcher(page).forward(req, resp);
跳转:
rd.forward(req, resp);
把前一个servlet的out输出流数据刷新
rd.include(req, resp);
不会刷新
特点:
1.浏览器地址不变
2.请求链不断开
3.request,response对象都是同一个。
2,客户端重定向:
resp.sendRedirect(page);
特点:
1.地址栏数据会发生改变
2.请求链断开,相当于重新发送请求
3.request,response对象都是浏览器新发出的
10,servlet的三大容器:request、session、application
在多个servlet中进行数据的传递。(用容器只能传到jsp页面)
request :HttpServletRequest
一次请求=请求+响应
生命周期太短
session : HttpSession(可能线程不安全)
一次会话=多次请求
获取: request.getSession();
钝化:当服务器正常关闭,但session没有到正常死亡时间,会写到文件中
活化:服务器启动,会加载work下的.sess文件,把文件中的session对象加载到服务器中
cookie:
保存用户访问的信息数据,因为http协议的访问是无状态访问,不会保存访问的记录。
session和cookie区别:
session是保存在服务器端的一个对象,客户端没有。
cookie在客户端是以本地文件的形式存在的,在服务器端是以java对象的形式存在。
session是把数据保存在服务器端的内存里面。
cookie是把数据保存在客户端的文件里面。
session在多个servlet中进行数据的传递
cookie保存用户访问的信息数据
application :ServletContext(可能线程不安全)
所有页面
获取:session.getServletContext();
11,Filter(过滤器) : 拦截请求
编码的转换
信息的过滤
权限的判断
登录的验证
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.briup.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
12,监听器(Listener) :监听web中的一些事件的发生,如果事件发生,这个监听器就会调用某些方法处理.
如何去写一个监听器:
1.实现一个接口。
2.在web.xml文件中进行配置。
<listener>
<listener-class>com.briup.listener.RequestListener</listener-class>
</listener>
Servlet API中定义了8个监听器接口,可以用于监听ServletContext,HttpSession,ServletRequest对象的生命周期事件。
ServletContextListener 监听Servlet上下文对象初始化或者被销毁
ServletContextAttributeListener 监听Servlet上下文中的属性列表的变化
HttpSessionListener 监听Session生命周期
HttpSessionActionListener 监听session被钝化或者激活(活化)
HttpSessionAttributeListener监听Session属性列表发生的变化
HttpSessionBindingListener 监听Session中是否有对象绑定或者删除,该对象要实现这个接口//只有这个是该对象实现,其他的都是先写监听器的实现类
ServletRequestListener 监听ServletRequest对象声明周期
ServletRequestAttributeListener 监听ServletRequest属性列表发生的变化