知识整理——Servlet

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/java_cjl/article/details/78493073

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属性列表发生的变化

猜你喜欢

转载自blog.csdn.net/java_cjl/article/details/78493073