Servlet基础


title: "Servlet"
date: 2019-08-17T11:01:12+08:00


本章内容为:《Servlet基础》

作者:nuoccc

这篇文章 主要是了解Servlet的一些基础。

Servlet(Server Applet)是Java] Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,

具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

而Servlet/JSP是SUN公司定义的一套动态网页开发的技术。

所以我们首先来了解一下什么是JSP。

1.JSP

1.1 JSP简介

JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

它实现了Html语法中的java扩展(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。

JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。

Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。

1.2 JSP基础运用

这里主要其实还是把JSP当做一个网页来使用,所以就不深入,就基础运用就行。

我使用的是IDEA,所以可能跟Eclipse的创建JSP方式不同,这里讲IDEA创建JSP方式。

1.File->New->Project

Servlet1.png

2.Java->Web application->Next

Servlet2.png

3.ProjectName->Finish

Servlet3.png

4.Projetc->web->New->JSP/JSPX


Servlet4.png

这样一个JSP文件就创建完成,然后我们来运用一下,JSP就其实跟HTML文件很类似,然后能以( <%, %>形式

实现JAVA代码,我们就编写一个最基础的JAVA的九九乘法表,看下运行效果

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


   <%
        //运行JAVA的标签
        for(int i=1;i<=9;i++){
            for(int j=1;j<=i;j++){
                out.print(i+"*"+j+"="+i*j+"  ");
                //要打印在网页上,就不再是Syetem.out.print而是out.print
            }
            out.print("
"); } %>

然后要注意一点,如果编译器代码报错,显示红色,只要确认你代码没问题就别管,有时候编译器会识别错误

然后我们加入Tomcat,在左上角,如下图,然后点击Add Config...

Servlet5.png

进入到下面这个页面,点左上的+,然后找到Tomcat Server 然后点击 Local

Servlet6.png

Servlet7.png

然后进到下面这个页面先不管Server的内容,点击Deployment,然后点击左边的“+”,然后点击第一个,加入完成后点击OK就配置好了

Servlet8.png

然后点击右上面的那个三角形启动图标,就会自动弹出一个页面,然后在网址后面跟上你的文件名,就能看到你的页面了。

Servlet9.png

然后jsp的运用我们就先讲到这里,这不是这篇文章的关键,然后我们来了解下Servlet。

2.Servlet

2.1创建一个Servelt

我们前面知道一般的web项目都是通过Servelt加JSP来实现的,所以我们创建的项目一定就要既能创建JAVA文件又能创建JSP文件,在IDEA中可以快速创建这样的文件。


Servlet10.png

1.File->New->Project

2.Java Enterprise->Web Application->Next

这种创建方式会直接导入Tomcat

然后我们创建第一个Servlet

public class HelloServlet implements Servlet {
    //HelloServlet是我们创建的类必须要继承或者实现Servlet接口之后,我们的类才是一个真正意义上的"Servelt"。
    
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

Servlet接口自带五个方法,我们来仔细看下这五个方法的意义

void init(ServletConfig var1) throws ServletException;

我们先来看第一个方法,init是initialization的缩写,这个是一个初始化函数,初始化一个Servlet配置对象

我们在来看下ServletConfig这个类定义了什么

public interface ServletConfig {
    String getServletName();
    //定义了一个获得我们Servlet名字的方法

    ServletContext getServletContext();
    //获得我们Servlet环境的方法

    String getInitParameter(String var1);
    //获得初始化参数

    Enumeration getInitParameterNames();
    //获得初始化参数的集合
}

所以ServletConfig这个类的对象获得了就是一些配置信息,然后调用init方法来初始化,此方法是系统自动调用!

public ServletConfig getServletConfig() ;

第二个方法,获得一个ServletConfig对象,就是获取Servlet的配置信息,也是系统自动调用!

void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

第三个方法,定义了一个服务方法,传递了两个参数

第一个是一个ServletRequest对象,然后我们去原码看看这个服务请求对象定义了什么,

Servlet11.png

我们看到全是一些set,get方法用来设置或者获取某个值,但是太多了就不一一讲,我们就看几个经常用到的函数。

void setCharacterEncoding(String var1) throws UnsupportedEncodingException;
这个是我们经常使用的一个方法,传入一个字符集参数,设置字符集,主要是防止数据传递时乱码。

String getParameter(String var1);
这个方法用来获得一个参数,这个方法还有几个兄弟方法

Enumeration getParameterNames();
String[] getParameterValues(String var1);
Map getParameterMap();

都是获得参数的方法,只不过返回值不一样

Object getAttribute(String var1);
void setAttribute(String var1, Object var2);
这两个方法是成对存在的一半,第一个是获得一个对象的属性,第二个是设置一个对象的属性

ServletRequest对象常用的方法,就这些,接下来我们来看看ServletResponse对象的方法
同样的ServletResponse服务器响应类也是一些set和get方法,我们也了解最常用的方法:

void setContentType(String var1);
这个方法是跟请求的时候设置字符集类似的,这个是设置内容格式的一个方法,也是我们常用的方法。

PrintWriter getWriter() throws IOException
这个方法是获得文件打印流的方法,PrintWriter继承Writer,所以拥有write()方法,可以输出内容。
ServletResponse常用的就这两个方法,然后我们继续看Servlet接口的方法。

String getServletInfo();

第四个方法,获得SevletInfo就是获得Sevlet的信息,也是系统自动调用!

void destroy();

第五个方法,销毁Servlet对象,也是系统调用!

所以Servlet接口定义的五个接口,有四个都是系统自动调用的,只有service()方法是需要我们自己调用的,所以service()就是我们在Servlet中最重要的一个方法。

我们知道JSP其实是简化的Servlet,所以学完上述方法后,我们也能用Servlet写一个页面

public class HelloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        
        servletResponse.setContentType("text/html;charset=utf-8");
        //设置内容格式为html,字符集为utf-8
        servletResponse.getWriter().write("");
        servletResponse.getWriter().write("");
        servletResponse.getWriter().write("");
        servletResponse.getWriter().write("this is title");
        servletResponse.getWriter().write("");
        servletResponse.getWriter().write("");
        servletResponse.getWriter().write("

第一个Servlet

"); servletResponse.getWriter().write(""); servletResponse.getWriter().write(""); //输出内容,这里我们直接输出一个html页面 } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }

但是只有代码还是无法输出在浏览器上,因为根本不知道你是哪一个页面,所以我们还需要去配置xml告诉浏览器我这个代码服务在哪个页面上,找到web->WEB-INF下面的web.xml我们对这个文件进行配置




    
    
        
        HelloServlet
        
        com.testServlet.HelloServlet
        
    
    
        
        HelloServlet
        
        /helloservlet
        
    

配置完后,再运行Tomcat,在输入我们的地址,就能访问我们的第一个Servlet了。

3.Servlet的生命周期

我们再来思考一个问题,我们整个过程其实是B/S通信过程,那浏览器的操作其实是传给我们的服务器的,

但如果多台计算机打开我们同一个页面,怎么保证每个人看见的是同一个页面,也就是要保证数据是同样的;

不可能说比如我看股票网站,不可能我两个人看同一支股的数据再不同页面看到的数据不一样,这样会乱套的。

所有我们就必须要保证所有浏览器访问的是同一个Servlet对象,所以我们一个Servlet只能存在一个对象。
也就是说Servlet对象是单例创造的!
这样就保证所有浏览器看到的是同一个实时的页面,但是B/S结构,是浏览器跟服务器的通信,跟我们Servlet并没有实际的关系,还记得我在前面说的Servlet的方法是由系统自动调用吗?
其实这里的"系统"不是指我们虚拟机而是指的我们的服务器,还有种说法叫做"容器",这里我们使用的Tomcat,所以是Tomcat创建的我们Servlet对象。
Tomcat并不是我们自己定义的,它只有通过反射的原理,来获取我们的Servlet并给它创建对象。
所以Servlet对象是由容器反射创建的!

然后我们来说一下Servlet的整个生命周期是怎样的:

1.容器(也就是服务器)启动,这样别人才能开始访问你的网页,当有第一次请求时,就创建Servlet对象

只创建一次,因为Servlet对象是单例的。

2.创建了对象,就会调用初始化函数init(),同样的init()只执行一次,只有创建对象时才调用

3.容器要解析浏览器发送的HTTP请求到底是干啥的,解析完之后根据不同的操作,去调用service()方法

每次请求都会去调用service()方法,然后把得到的响应信息,再响应给浏览器。

4.当容器关闭时,不是浏览器关闭!最后调用Dstory()方法,销毁Servlet对象,Servlet也就生命结束了。

到此,这篇文章到此结束,如果对Servlet还有兴趣,可以看下一篇文章对Servlet进行的一些优化。

你可能感兴趣的:(Servlet基础)