Java学习笔记(十八):Servlet

写在前面:

servlet是单例的

注解配置servlet:@WebServlet(资源路径)

tomcat执行servlet原理

 

web.xml配置:<servlet><servlet-name><servlet-class>

                          <servlet-mapping><servlet-name><url-pattern>


1. 基本介绍

Servlet:运行在服务端的小程序(server applet)

Servlet:接口;定义了Java类被浏览器访问到的规则;遵守这些规则,Java类才能被tomcat识别,才能让浏览器访问

2. servlet初级使用

tomcat执行servlet的原理(过程)

根据url确定项目下的资源名称(项目名后面就是资源名)

tomcat内部检索,看web.xml中的url-pattern有没有这个资源名称

找到后就找对应的servlet-name,再确定对应的servlet-class全类名

tomcat将全类名对应的字节码文件加载进内存

利用反射,创建对象,调用方法

 

web.xml中配置servlet

<!--配置servlet-->
    <servlet>
        <servlet-name>myservlet01</servlet-name>
        <servlet-class>servlet.MyServlet01</servlet-class>
        <!--
            <load-on-startup>-1</load-on-startup>  指定servlet创建时机,默认-1
            0/正数:服务器启动时创建
            负数:第一次被访问时创建
        -->
    </servlet>
    <!--配置映射-->
    <servlet-mapping>
        <servlet-name>myservlet01</servlet-name>
        <url-pattern>/my01</url-pattern>
    </servlet-mapping>

servlet中的方法

public class MyServlet01 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
//被创建 时调用,只执行一次;用来加载资源
/*
    默认第一次被访问时,servlet被创建;也可以在web.xml中修改,指定创建时机
    <load-on-startup>
*/
    }

    @Override
    public ServletConfig getServletConfig() {
//返回servlet的配置对象
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//提供服务,每次servlet被访问时都执行
        System.out.println("abc");
    }

    @Override
    public String getServletInfo() {
//获取servlet的版本等信息
        return null;
    }

    @Override
    public void destroy() {
//被销毁 时调用,只执行一次;用来释放资源
    }
}

单例:

servlet只被创建一次,说明servlet在内存中只存在一个对象,是单例的(方法不共享,成员变量共享)

多个用户同时访问可能存在安全问题

解决方案:尽量不要定义成员变量,即便定义了,也不要修改值

3. 使用升级

servlet3.0 注解配置

使用注解,就可以不要web.xml了

在定义的servlet类上使用注解:@WebServlet(资源路径)

/*
注解写法:
    @WebServlet(urlPatterns="/myservlet03")
    @WebServlet("/myservlet03")
    @WebServlet({"/myservlet03","/03"})
 */

@WebServlet("/myservlet03")
public class MyServlet03 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("03");
    }
}

体系结构

Servlet接口-----(实现类)-----GenericServlet 抽象类-----(继承)-----HttpServlet抽象类

GenericServlet:方法都做了默认空实现,只有service方法抽象

HttpServlet:把service中需要的操作做了封装(判断请求方式,根据请求方式获取数据等)

                       只需要重写doget、dopost方法即可

资源路径定义规则

/xxx

/xxx/xxx

/*  任何路径

/xxx/*  第二层随意

*.do   访问路径xxx.do (后缀随意,也可以*.action等)

 

4. HTTP

Http:超文本传输协议

传输协议:客户端和服务端发送数据的组成格式

URL:统一资源定位符(带协议、ip、port)

URI:统一资源标识符(仅虚拟目录+资源路径)

特点:

基于TCP/IP的高级协议

默认端口80

基于请求响应模型(一次请求一次响应,一一对应)

无状态(每次请求之间独立,不能交互数据)

两个版本(1.0 每次请求都建立连接)(1.1 请求响应完成后,等待一段时间,如果还有请求就复用连接)

七种请求方式:

get:参数在请求行中(url),url长度有限制,不安全

post:参数在请求体中,参数长度无限制,较为安全

 

发布了97 篇原创文章 · 获赞 52 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/poppy_rain/article/details/98471862
今日推荐