Java个人总结系列-JavaWeb基础

Java个人总结

Java 个人总结是一个持续更新的系列,工作多年,抽个空对Java 做一个总结归纳,温故而知新,也希望能帮助到正在学习Java EE的同学们,本系列目录:

本次是第三次修改,会随着JDK更新而修改,增删一些东西,目前已至JDK8。

Java Web是什么

Web翻译过来就是网页的意思,而Java Web是使用Java技术来解决网页相关领域的技术栈。
Web程序一般分为客户端,服务器端即我们常说的前后端,本篇主要针对与Java技术相关的后端系列技术栈。

  1. 为什么要使用JavaWeb

    WEB发展的两个阶段:静态、动态
    静态页面中的数据无法实时更新,无法实现与人的互动,因为此需要在特定时间,特定场景中更新静态页面的内容,保存用户交互数据。
    动态页面本质上页面还是静态的,但是借助后端系统程序可以实现保存人机交互数据,根据业务数据进行动态数据展示和反馈。
    而在java中使用JAVA Servlet/JSP技术来实现动态页面。2.

  2. 技术背景

    SUN公司最早推出的WEB技术推出的是Servlet程序,Servlet程序本身使用的时候有一些问题,所有的程序是采用JAVA代码+HTML的方式编写的,即,要使用JAVA输出语句,一行一行地输出所有的HTML代码,之后,SUN公司受到了ASP的启发,发展出了JSP(Java Server Page),JSP某些代码的编写效果与ASP是非常相似的。这样可以很方便地使一些ASP程序员转向JSP的学习,加大市场的竞争力度。

Servlet

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
Servlet 在 Web 应用程序中的位置
如上图,可以看到Servlet在web程序中的所属位置,一个 Servlet就是一个 Java 类,并且可以通过 “请求 - 响应” 编程模式来访问这个驻留在服务器内存里面的 servlet 程序

Servlet开发
在进行Servlet开发的时候,我们首选需要实现HTTPServlet。
这是一个抽象类,servlet.http包中定义了采用HTTP通信协议的HttpServlet类。

  1. 继承HttpServlet抽象类
  2. 重写HttpServlet的部分方法,如doGet()或doPost()方法
  3. 获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串
  4. 生成HTTP响应结果。通过HttpServletResponse对象生成响应结果

示例代码:

package com.klsstt;

import javax.servlet.*;
import java.io.IOException;
public class Demo 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 {
        System.out.println("哈喽,My Servlet");
    }

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

    @Override
    public void destroy() {

    }
}

容器装载 Servlet

支持Java Servlet容器技术有很多,像WebLogic 服务器,JBoss服务器,Resin 服务器,Tomcat服务器等等,本篇将使用Tomcat 容器来装载Servlet程序。

配置web.xml
在tomcat容器中运行servlet程序,还需要配置web.xml,如下:

             <servlet>
                <servlet-name>demo</servlet-name> 
                <servlet-class>com.klsstt.Demo</servlet-class>
             </servlet>
            <servlet-mapping>
                <servlet-name>demo</servlet-name>
                <url-pattern>/demo</url-pattern> 
            </servlet-mapping>

配置参数介绍
servlet中
servlet-name servlet名称
servlet-class 实现类位置
servlet-mapping中
servlet-name 关联servlet的名称与servlet中name保持一致
servlet-pattern 请求路径
访问顺序:servlet-pattern(servlet-mapping) —> servlet-name(servlet-mapping) —> servlet-name(servlet) —> servlet-class(servlet)

Servlet 生命周期

  1. Servlet 被tomcat容器装载后,根据web.xml配置,创建一个 servlet 实例并且调用 servlet 的
    init() 方法进行初始化。
  2. 用户发起请求,容器响应客户端的请求,调用 service() 方法,根据请求提交方式选择执行 doGet() 或者 doPost()
    方法
  3. 终止阶段,调用 destroy() 方法

Servlet 生命周期

Servlet 实战要点

form标签

<form action="demo" method="get">

前端通过form标签用来向后台服务器发送请求,通过method属性来设置请求类型例如get,post,通过action属性设置请求地址。

POST和GET方法

  • POST 方法把表单数据作为一个单独的消息,发送到后台服务器。
  • GET 方法向页面请求发送已编码的数据,用?字符开头&字符分隔,如下所示:
http://127.0.0.1/demo?key1=value1&key2=value2

get和post方法区别
后台一般通过request.getParameter(“属性名”)来获取前端传递的参数,request是什么呢?

Request

Servlet 中内置了九大对象,与 jsp 的内置对象的一一对应,如下图:
内置对象
request其实是HttpServletRequest的对象,是客户端所发出的请求的信息对象,只要是有关于客户端请求的信息,都可以借此来获取,例如请求标头、请求方法、请求参数、使用者IP等等信息。

HttpServletRequest常用方法

  • getRequestURL方法返回客户端发出请求时的完整URL
  • getRequestURI方法返回请求行中的资源名部分
  • getQueryString方法返回请求行中的参数部分(参数名+值)
  • getRemoteAddr方法返回发出请求的客户机的IP地址
  • getRemoteHost方法返回发出请求的客户机的完整主机名
  • getRemotePort方法返回web服务器所使用的网络端口号
  • getLocalPort方法返回web服务器所使用的网络端口号
  • getLocalAddr方法返回web服务器的IP地址
  • getLocalName方法返回web服务器的主机名

刚才提到Servlet与Jsp内置对象一一对应,那么Jsp又是什么呢?

Jsp

什么是jsp
JSP全称Java Server Pages,是一种服务器端动态页面技术的组件规范,是以“.jsp”为后缀的文件,在该文件中主要是前端代码和少量的java 代码构成,标签通常以<%开头以%>结束,该文件在容器中会转换成Servlet执行。
JSP与Servlet
Jsp 在本质上也是Servlet,用Jsp 实现的页面用Servlet也能实现。
Jsp的请求过程如下图:JSP与Servlet
由于Jsp页面同时包含前后端代码,甚至操作数据库代码也写在页面里,要求开发人员前后端都需要懂,导致维护成本增加,而且如果内容过多,由于是同步加载,服务器压力会增大,由于以上原因提出了前后端分离技术

前后端分离优势:

  1. 用户发送请求直接到达html页面服务器或中间件
  2. 请求路由规则由前端制定,整个项目开发的权重前移
  3. 前端负责调用服务端接口产生数据,展现动态效果,不需要关心后端实现
  4. 业务分离,实现前后端解耦
  5. 减轻后端服务器压力
  6. 提高后端开发人员效率

JavaWeb的三层架构
由于初代javaweb所有代码都放在jsp中,所有的东西都耦合在一起,对后期的维护和扩展极为不利,于是javaweb演进到了第二代,把业务逻辑的内容放到了JavaBean中,而JSP页面负责显示以及请求调度的工作,后来到了第三代,为了解决视图与业务分离,演变出了经典的三层架构,而三层架构中的佼佼者当属mvc模式,mvc模式即视图层,业务逻辑层,持久化层。
三层架构如下图:
三层架构

MVC设计模式

MVC全名是Model View Controller,是一种软件的设计模式,正如三个单词的分解那样,C(控制器)将V(视图、用户客户端)与M(javaBean:封装数据)分开构成了MVC,
在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

在JavaWeb中,MVC这三个部分则分别对应于 JavaBeans、JSP和Servlet。

M = JavaBeans:用于传递数据,拥有与数据相关的逻辑处理。
V = JSP:从Model接收数据并生成HTML
C = Servlet:接收HTTP请求并控制Model和View

在这里由于Servlet也有可能是由Jsp转换而来,或者使用一些模板技术输出html,也会当成视图层来用。
mvc设计模式
本篇内容不涉及框架,只是介绍一下纯java的基础web开发方式。


版权声明:本文为klsstt原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。