javaEE初级介绍

WEB介绍

●Web应用是一-种通过互联网访问的应用程序,使用网页语言编写,通过浏览器运行。
●在互联网发展的最初阶段, Web应用仅仅是一一个静态的网站。所有的网页都是由内容固定的静态HTML页面组成,页面可以直接被浏览器解释执行,无需进行复杂的编译以及存取数据等操作。

●动态网站是指能与用户进行交互、并根据用户输入的信息产生相应响应的网站。动态网站一般由大量的动态网页、后台处理程序以及用于存储内容的数据库组成。

B/S结构

在这里插入图片描述基于B/S结构的Web应用,通常由客户端浏览器、Web服务器、 数据库服务器几部分组成,其中:
■Web服务器负责运行使用动态网站技术编写的Web应用程序;
■数据库服务 器负责管理应用程序使用到的数据;
■浏览器负责帮助用户访问运行在Web服务器上的应用程序。

web应用运行过程

在这里插入图片描述

servlet概述

在动态网站技术发展初期,为替代笨拙的CGI (通用网关接口)技术,Sun公司在制定Java EE规范时弓|入Servlet ,实现了基于Java语言的动态Web技术,奠定了Java EE的基础,使动态Web开发技术达到了一个新的境界。

如今, Servlet在普遍使用的MVC模式的Web开发中仍占据了重要地位,目前流行的Web框架基本上都基于Servlet技术,如Struts、WebWork和Spring MVC等。只有掌握了Servlet,才能真正掌握Java Web编程的核心和精髓。Java Web编程的核心和精髓。

Servlet是基于Java语言的Web服务器端编程技术,是Sun公司提供的一种实现动态网页的解决方案。按照Java EE规范定义, Servlet是运行在Servlet容器中的Java类,它能处理Web客户的HTTP请求,并产生HTTP响应。

在这里插入图片描述

servlet对请求的处理和响应过程

  • Servlet对请求的处理和响应过程可进一步细分 为如下几个步骤:
    接收HTTP请求;
    取得请求信息, 包括请求头和请求参数数据;
    调用其他Java类方法,完成具体的业务功能;
    实现到其他Web组件的跳转 (包括重定向或请求转发) ;
    生成HTTP响应 (包括HTML或非HTML响应)。

servlet与servlet容器

Servlet运行在服务器端,由Servlet容器所管理, Servlet容器也叫Servlet弓|擎,是Web服务器或应用服务器的一部分,用于在发送的请求和响应之上提供网络服务、解码基于MIME的请求、格式化基于MIME的响应。

主流的web容器Tomcat,nginx等。

servlet的体系结构

Servlet是使用Servlet API (应用程序设计接口)及相关类和方法的Java程序。
Servlet API包含两个软件包:
■javax.servlet包
■javax.servlet.http包

在这里插入图片描述

Servlet接口中的主要方法

在这里插入图片描述

HttpServlet类

HttpServlet指能够处理HTTP请求的Servlet ,它在原有Servlet接口上添加了对HTTP协议的处理,它比Servlet接[的功能更为强大。如果要要实现一个在Web中处理HTTP请求的Servlet ,则需要使用HttpServlet。

在这里插入图片描述
HttpServlet作为HTTP请求的分发器,除了提供对GET和POST请求的处理方法doGet()和doPost()外,对于其他请求类型(如: HEAD、OPTIONS、DELETE、PUT、TRACE )也提供了相应的处理方法(如: doHead()、doOptions()、 doDelete()、doPut()、doTrace() )。

servlet生命周期

●Servlet生命周期是指Servlet实例从创建到响应客户请求,直至销毁的过程。
●Servlet程序本身不直 接在Java虚拟机上运行,由Servlet容器负责管理其整个生命周期。
● 在Servlet生命周期中,会经过创建、 初始化、服务可用、服务不可用、处理请求、终止服务、销毁七种状态。
●Servlet生命周期可分为四个阶段:加载和实例化、初始化、处理请求、销毁。

在这里插入图片描述

加载和实例化

Servlet的创建是指加载和实例化两个过程
Servlet容器在如下时刻加载和实例化一个Servlet :
■在服务 器运行中,客户机首次向Servlet发出请求时;
■重新装入Servlet时 ,如:服务器重新启动、Servlet被修改 ;
■在为Servlet配置 了自动装入选项( load-on-startup)时,服务器在启动时会自动装入此Servlet。

初始化

●Servlet实例化后 , Servlet容器将调用Servlet的init(ServletConfigconfig)方法来对Servlet实例进行初始化;
●如果初始化没有问题, Servlet在Web容器中会处于服务可用状态;
●如果初始化失败, Servlet容器会从运行环境中清除掉该实例;
●当Servlet运行出现异常时, Servlet容器 会使该实例变为服务不可用状态。Web程序维护人员可以设置Servlet ,使其 成为服务不可用状态,或者从服务不可用状态恢复成服务可用状态。

处理请求

●服务器接收到客户端请求,会为该请求创建一个“请求”对象和一个“响应”对象并调用service()方法, service()方法再调用其他方法来处理请求;
●在Servlet生命周期中, service()方法可能被多次调用。当多个客户端同时访问某个Servlet的service()方法时,服务器会为每个请求创建一个线程,这样可以并行处理多个请求,减少请求处理的等待时间,提高服务器的响应速度。但同时也要注意对同一对象的并发访问问题。

销毁

●当Servlet容器需要终止Servlet (比如Web服务器即将被关掉或需要出让资源) , 它会先调用Servlet的destroy()方法使其释放正在使用的资源。
●在Servlet容器调用destroy()方法之前,必须让当前正在执行service()方法的任何线程完成执行,或者超过了服务器定义的时间限制。在destroy()方法完成后, Servlet容器必须释放Servlet实例以便被垃圾回收。

servlet的声明配置

●Servlet的声明配置信息主要包括Servlet的描述、 名称、初始参数、类路径以及访问地址等。
●在Servlet 3.x规范中, Servlet的声明配置可以通过注解方式实现,注解@WebServlet用于将一个类声明为Servlet ;
●注解@WebServlet会在程 序部署时被Servlet容器处理,容器将根据具体的属性配置把相应的类部署为Servlet ;
●Servlet的声明配置 也可通过项目配置文件web.xml完成。

15739992322801573999241959

1573999255618

servlet应用实例

处理超链接请求数据

超链接形式的数据请求格式:

<a href=" URL地址?参数=参数值[&参数=参数值…]”>链接文本

<a href="/MyServlet?name=15&age=20">去我的myservlet</a>
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              String myname = request.getParameter("name");
              String myage = request.getParameter("age");
              System.out.println("myname:"+myname);
              System.out.println("myage:"+myage);
    }
}

●当用户通过超链接发送的请求到达Servlet容器时 ,包含数据的请求将被容器转换为HttpServletRequest对象。对请求数据的处理工作便由HttpServletRequest对象完成。
●HttpServletRequest对象常用的数据处理方法有:
■public String getParameter(String name) 返回由name指定的用户请求参数的值。
■public String[] getParameterValues(String name)返回由name指定的一-组用户请求参数的值。
■public Enumeration getParameterNames() 返回所有客户请求的参数名。

容器在将请求转换为HttpServletRequest对象之后,还会根据请求的类型调用不同的请求方法。对用超链接的GE T请求则会调用doGet()方法;对于Form表单的POST请求则会调用doPost()方法

处理表单请求

   <form name="login" action="LoginServlet" method="POST">
    用户名:<input name="username" type="text" id="username"><<br>
    密码:<input name="userpass" type="password" id="userpass"><br>
    <input type="submit" value="登录">
  </form>
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String username = request.getParameter("username");
        String userpass = request.getParameter("userpass");
        System.out.println("username = " + username);
        System.out.println("userpass = " + userpass);
        response.sendRedirect("success.jsp");
        //request.getRequestDispatcher("success.jsp").forward(request, response);
    }


    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       
    }
}

servlet处理数据总结

客户端向服务器请求数据方式常用有两种:超链接和Form表单;
超链接-般用于获取/查询资源信息,属于GET请求类型,请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连。由于其安全性(如:请求数据会以明文显示在地址栏上)以及请求地址的长度限制,一般仅用于传送一些简单的数据;
Form表单一般用于更新资源信息,默认使用GET请求类型,多使用POST请求类型。由于POST请求类型理论上没有数据大小限制,可用表单来传较大量的数据;
HttpServletRequest接口使用getParameter()或getParameterValues()方法来获取GET请求或POST请求方式传送过来的请求数据。

重定向

重定向是指由原请求地址重新定位到某个新地址,原有的request请求失效,客户端看到的是新的request请求返回的响应结果,客户端浏览器地址栏变为新请求地址。
1574001096421
重定向通过HttpServletResponse对象的sendRedirect(方法实现,该方法会通知客户端去重新访问新指定的URL地址.

response.sendRedirect("success.jsp");

请求转发

请求转发是指将请求再转发到其他地址,转发过程中使用的是同一个request请求,转发后浏览器地址栏内容不变。在这里插入图片描述

请求转发的过程发生在服务器内部,对客户端是透明的。服务器只能从当前应用内部查找相应的转发资源,而不能转发到其它应用的资源。
请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发给另外一个资源,并让该资源对此请求进行响应。

request.getRequestDispatcher("success.jsp").forward(request, response);

重定向和请求转发的区别

重定向和请求转发都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有很大的区别:

​ ■转发只能将请求转发给同一 个Web应用中的组件;而重定向不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,或者重定向到其他站点的资源;

​ ■重定向的访问过程结束后 ,浏览器地址栏中显示的URL会发生改变,由.初始的URL地址变成重定向的目标URL ;而请求转发过程结束后,浏览器地址栏保持初始的URL地址不变;

​ ■重定向对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;请求转发在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为;
​ ■请求转发调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而重定向调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。

的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;请求转发在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为;
​ ■请求转发调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而重定向调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值