Java个人总结
Java 个人总结是一个持续更新的系列,工作多年,抽个空对Java 做一个总结归纳,温故而知新,也希望能帮助到正在学习Java EE的同学们,本系列目录:
- Java是什么
- 面向对象的编程思想
- Java基础语法
- JavaWeb基础
- Java常用框架介绍
本次是第三次修改,会随着JDK更新而修改,增删一些东西,目前已至JDK8。
Java Web是什么
Web翻译过来就是网页的意思,而Java Web是使用Java技术来解决网页相关领域的技术栈。
Web程序一般分为客户端,服务器端即我们常说的前后端,本篇主要针对与Java技术相关的后端系列技术栈。
- 为什么要使用JavaWeb
WEB发展的两个阶段:静态、动态
静态页面中的数据无法实时更新,无法实现与人的互动,因为此需要在特定时间,特定场景中更新静态页面的内容,保存用户交互数据。
动态页面本质上页面还是静态的,但是借助后端系统程序可以实现保存人机交互数据,根据业务数据进行动态数据展示和反馈。
而在java中使用JAVA Servlet/JSP技术来实现动态页面。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就是一个 Java 类,并且可以通过 “请求 - 响应” 编程模式来访问这个驻留在服务器内存里面的 servlet 程序
Servlet开发
在进行Servlet开发的时候,我们首选需要实现HTTPServlet。
这是一个抽象类,servlet.http包中定义了采用HTTP通信协议的HttpServlet类。
- 继承HttpServlet抽象类
- 重写HttpServlet的部分方法,如doGet()或doPost()方法
- 获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串
- 生成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 生命周期
- Servlet 被tomcat容器装载后,根据web.xml配置,创建一个 servlet 实例并且调用 servlet 的
init() 方法进行初始化。 - 用户发起请求,容器响应客户端的请求,调用 service() 方法,根据请求提交方式选择执行 doGet() 或者 doPost()
方法 - 终止阶段,调用 destroy() 方法

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

后台一般通过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页面同时包含前后端代码,甚至操作数据库代码也写在页面里,要求开发人员前后端都需要懂,导致维护成本增加,而且如果内容过多,由于是同步加载,服务器压力会增大,由于以上原因提出了前后端分离技术
前后端分离优势:
- 用户发送请求直接到达html页面服务器或中间件
- 请求路由规则由前端制定,整个项目开发的权重前移
- 前端负责调用服务端接口产生数据,展现动态效果,不需要关心后端实现
- 业务分离,实现前后端解耦
- 减轻后端服务器压力
- 提高后端开发人员效率
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,也会当成视图层来用。
本篇内容不涉及框架,只是介绍一下纯java的基础web开发方式。