Servlet
主要内容
IDEA的安装与使用
IDEA 全称 IntelliJ IDEA,由JetBrains公司开发,是java编程语言开发的集成环境。在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。
IDEA的特色功能
-
智能选取
-
丰富的导航模式
-
历史记录功能
-
编码辅助
-
灵活的排版功能
-
代码检查
-
完美的自动代码完成
-
版本控制的支持
…
IDEA的下载
-
在浏览器中IntelliJ IDEA百度一下,打开如下官网
-
进入官网,单击DOWNLOAD
-
选择指定版本,点击DOWNLOAD
-
点击保存,进行下载
-
下载之后的文件
IDEA的安装
-
双击运行安装程序,点击 “Next” 下一步
-
修改安装路径(也可使用默认路径),点击 "Next”
-
根据自己电脑的操作系统,来进行相应的选择
-
默认即可,直接选择 “Install” ,进行安装
-
安装成功,可选择运行IDEA,点击 “Finish” 完成安装
-
若之前安装过其他版本的IDEA,会提示是否导入原来的配置(选择不导入即可)
-
选择自己喜欢的主题,然后一直选择 “Next”。
-
选择 "Activation code"方式,输入激活码,点击 “OK”
-
出现如下画面,则表示激活成功
IDEA创建项目
创建Java项目
-
点击 “Create New Project”
-
添加新的 JDK 版本 (idea默认使用自带的版本)
-
选择JDK版本,然后 “Next”
-
选择 “Next”
-
设置项目名称及工作空间
-
项目目录结构及提示信息 (提示信息可选择"Close")
创建Java类
-
点击 “src” —> “new” —> “package”,创建一个文件包
-
设置包名,与Eclipse的包类似
-
在包下面创建 Java 类文件,点击包名 —> “New” —> “Java Class”
-
选择类型,并设置类的名称
-
在类中写一个main方法
执行main方法
-
方式一:代码左侧的绿色三角符号
-
方式二:在类中右键,选择Run或Debug
-
方式三:点击最上方菜单栏的Run
出现以下弹框,点击要运行的文件名,这里是 Hello
-
运行结果
IDEA的基本设置
使用IDEA时,可以对它进行一些简单的设置,通过设置用户的偏好设置,可提高使用者的体验感。
进入设置页面
- 选择右下角的 “Configure”,选择"Settings" (或在IDEA中,选择左上角的 “File”,选择"Settings")
- 进入设置页面
设置字体
-
在Settings窗口中,点击 “Editor” —> “Color Scheme”
-
选择 “Color Scheme Font”,设置字体风格和字体大小,设置完之后选择 “Apply” 应用
-
设置中文字体
Idea更新2019.2后
中文字体的默认效果
修改字体之后的效果
解决方案: “Editor” —> “Font” —> “Fallback font”, 选择 SimHei
设置自动保存
选择 “Appearance & Behavior”,选择 “System Settings”
设置字体编码
选择 “Editor”,选择 “File Encoding”,设置编码为 “UTF-8”
设置字体大小改变
可以通过按住 “Ctrl”,滚动鼠标滚轮改变字体大小。
选择 “Editor”,选择 “General”
设置自动编译
选择 “Build,Execution,Deployment”,选择 “Compiler”
IDEA常用快捷键
快捷键 | 作用 |
---|---|
Alt+Insert | 生成代码(如get, set方法,构造函数等) |
Alt+↑/ ↓ | 在方法间快速定位 |
Alt+【F3】 | 查找相同文本,并高亮显示 |
Ctrl+B | 快速打开光标处的类或方法 |
Ctrl+J | 自动代码(main方法) |
Ctrl+N | 查找类 |
Ctrl+Y | 删除行 |
Ctrl+D | 复制行 |
Ctrl+O | 重写方法 |
Ctrl+E | 最近打开的文件 |
Ctrl+F | 查找文本 |
Ctrl+R | 替换文本 |
Ctrl+P | 方法参数提示 |
Ctrl+/ | 单行注释// |
Ctrl+Shift+/ | 多行注释/* */ |
Ctrl+Shift+N | 查找文件 |
Ctrl+Alt+L | 格式化代码 |
Ctrl+Shift+↑/ ↓ | 代码向上/向下移动 |
Shift+F6 | 重构-重命名 |
HTTP协议
HTTP 协议(Hypertext Transfer Protocol, 超文本传输协议),是一个客户端请求和响应的标准协议,这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。用户输入地址和端口号之后就可以从服务器上取得所需要的网页信息。
通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。客户端发送给服务器的格式叫"请求协议";服务器发送给客户端的格式叫"响应协议"。
在浏览器中 F12可查看
浏览器中的书写格式
服务器端资源需要通过浏览器进行,此时由浏览器将我们给出的请求解析为满足 HTTP 协议的格式并发出。我们发出的请求格式需要按照浏览器规定的格式来书写,在浏览器中书写格式如下:
当浏览器获取到信息以后,按照特定格式解析并发送即可。接收到服务器端给出的响应时,也按照 HTTP 协议进行解析获取到各个数据,最后按照特定格式展示给用户。
HTTP协议的特点
-
支持客户/服务器模式。
-
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的 有 GET、POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
-
灵活:HTTP 允许传输任意类型的数据对象。传输的类型由Content-Type加以标记。
-
无连接:无连接是表示每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
HTTP1.1 版本后支持可持续连接。通过这种连接,就有可能在建立一个 TCP 连接后,发送请求并得到回应,然后发送更多的请求并得到更多的回应.通过把建立和释放 TCP 连接的开销分摊到多个请求上,则对于每个请求而言,由于 TCP 而造成的相对开销被大大地降低了。而且, 还可以发送流水线请求,也就是说在发送请求 1 之后的回应到来之前就可以发送请求 2.也可以认为,一次连接发送多个请求,由客户机确认是否关闭连接,而服务器会认为这些请求分别来自不同的客户端。
-
无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送 的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP之URL
HTTP(超文本传输协议)是一个基于请求与响应模式的、应用层的协议,常基于 TCP 的连接方式,绝大多数的 Web 开发,都是构建在 HTTP 协议之上的 Web 应用。
HTTP URL (URL 是一种特殊类型的 URI,包含了用于查找某个资源的足够的信息)的格式 如下:
http://host[:port]/[abc_path]
http://IP(主机名/域名):端口/访问的资源路径
- http 表示要通过 HTTP 协议来定位网络资源;
- host 表示合法的 Internet 主机域名或 者 IP 地址;
- port 指定一个端口号,为空则使用缺省端口 80;
- abs_path 指定请求资源的 URI; 如果 URL 中没有给出 abs_path,那么当它作为请求 URI 时,必须以“/”的形式给出,通常 这个工作浏览器自动帮我们完成。
HTTP 请求
HTTP 请求由三部分组成,分别是:请求行、请求头、请求正文。
通过chrome浏览器, F12 —> Network查看。
-
Get 请求(没有请求体)
-
Post 请求
格式
请求行 请求头1 请求头2 … 请求空行 请求体
请求行以一个方法符号开头,以空格分开,后面跟着请求的 URI 和协议的版本。
格式如下:Method Request-URI HTTP-Version CRLF
Method 表示请求方法;
Request-URI 是一个统一资源标识符;
HTTP-Version 表示请 求的 HTTP 协议版本;
CRLF 表示回车和换行;
HTTP 响应
在接收和解释请求消息后,服务器返回一个 HTTP 响应消息。HTTP 响应也是由三个部分组成,分别是:状态行、消息报头、响应正文。
格式
状态行
响应头1
响应头2
…
响应空行
响应体
消息头
HTTP 消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行), 消息报头(可选),空行(只有 CRLF 的行),消息正文(可选)组成。
每一个报头域都是由 名字+":"+空格+值 组成,消息报头域的名字是大小写无关的。
请求头
请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
-
Referer:该请求头指明请求从哪里来 。
如果是地址栏中输入地址访问的都没有该请求头 地址栏输入地址,通过请求可以看到,此时多了一个 Referer 的请求头,并且后面的值 为该请求从哪里发出。比如:百度竞价,只能从百度来的才有效果,否则不算;通常用来做统计工作、 防盗链。
响应头
响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和 对 Request-URI 所标识的资源进行下一步访问的信息。
-
Location:Location响应报头域用于重定向接受者到一个新的位置。
Location响应报头域,常用在更换域名的时候。
response.sendRedirect("http://www.baidu.com");
-
Refresh:自动跳转(单位是秒),可以在页面通过meta标签实现,也可在后台实现。
<meta http-equiv="refresh" content="3;url=http://www.baidu.com">
Tomcat服务器
什么是Tomcat
Tomcat 是一个符合 JavaEE WEB 标准的最小的 WEB 容器,所有的 JSP 程序一定要有 WEB 容器的支持才能运行,而且在给定的 WEB 容器里面都会支持事务处理操作。
Tomcat 是由 Apache 提供的(www.apache.org)提供的可以用安装版和解压版,安装版可以在服务中出现一个 Tomcat 的服务,免安装没有,开发中使用免安装版。 Tomcat 简单的说就是一个运行 Java 的网络服务器,底层是 Socket 的一个程序,它也是 JSP 和 Servlet 的一个容器。 Tomcat 是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,由 Apache、Sun和其他一些公司及个人共同开发而成。
由于有了 Sun 的参与和支持,最新的 Servlet 和 JSP 规范总是能在 Tomcat 中得到体现。因为 Tomcat 技术先进、性能稳定,而且免费,因而深受 Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的 Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器, 在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。 对于一个初学者来说,可以这样认为,当在一台机器上配置好 Apache 服务器,可利用它响应 HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上 Tomcat 部分是 Apache 服务器的扩展,但它是独立运行的,所以当你运行 tomcat 时,它实际上作为一个与 Apache 独立的进程单独运行的。
当配置正确时,Apache 为 HTML 页面服务,而 Tomcat 实际上是在运行 JSP 页面和 Servlet。另外,Tomcat 和 IIS 等 Web 服务器一样,具有处理 HTML 页面的功能,另外它还是 一个 Servlet 和 JSP 容器,独立的 Servlet 容器是 Tomcat 的默认模式。不过,Tomcat 处理静态 HTML 的能力不如 Apache 服务器。目前 Tomcat 最新版本为 9.0。
安装Tomcat
运行 Tomcat 需要 JDK 的支持【Tomcat 会通过 JAVA_HOME 找到所需要的 JDK】。 安装就是解压缩过程。启动 Tomcat,能访问则算安装好了
-
解压Tomcat8的压缩包
-
解压后目录结构
-
启动 Tomcat (在 tomcat 的安装目录下的 bin 目录 使用命令行启动 tomcat)
方式一:双击脚本文件启动
方式二:使用脚本命令启动
-
服务器启动成功
注:
-
Tomcat默认占用端口8080。(注意端口冲突问题)
- 如果需要使用服务器,启动成功后,该启动窗口不要关闭。
-
-
打开浏览器,输入http://localhost:8080/ 访问
-
调用 shutdown 命令关闭Tomcat服务器
Tomcat目录结构
- bin:启动和关闭 tomcat 的 bat 文件
- conf:配置文件server.xml 该文件用于配置 server 相关的信息,比如 tomcat 启动的端口号,配置主机(Host) ;web.xml 文件配置与 web 应用(web 应用相当于一个 web站点);tomcat-user.xml 配置用户名密码和相关权限
- lib:该目录放置运行 tomcat 运行需要的 jar 包
- logs:存放日志,当我们需要查看日志的时候,可以查询信息
- webapps:放置我们的 web 应用
- work 工作目录:该目录用于存放 jsp 被访问后生成对应的 server 文件和.class 文件
IDEA配置Tomcat
-
选择 “Appliction Servers”,点击右侧的 “+” 号,选择 “Tomcat Server”
-
设置 Tomcat 的安装目录(/idea_28.png)]
设置好之后
-
配置Tomcat服务器完成
Servlet的实现
Servlet 是 Server 与 Applet 的缩写,是服务端小程序的意思。使用 Java 语言编写的服务器端程序,可以像生成动态的 WEB 页,Servlet 主要运行在服务器端,并由服务器调用执行, 是一种按照 Servlet 标准来开发的类。 是 SUN 公司提供的一门用于开发动态 Web 资源的技术。(言外之意:要实现 web 开发,需要实现 Servlet 标准)
Servlet 本质上也是 Java 类,但要遵循 Servlet 规范进行编写,没有 main()方法,它的创建、使用、销毁都由 Servlet 容器进行管理(如 Tomcat)。(言外之意:写自己的类,不用写 main 方法,别人自动调用)
Servlet 是和 HTTP 协议是紧密联系的,其可以处理 HTTP 协议相关的所有内容。这也是 Servlet 应用广泛的原因之一。
提供了 Servlet 功能的服务器,叫做 Servlet 容器,其常见容器有很多,如 Tomcat, Jetty, WebLogic Server, WebSphere, JBoss 等等。
创建Web项目
-
选择 “File” —> “New” —> “Project”
-
设置项目的相关信息,选择 “Next”
-
设置项目名称及工作空间
-
web项目目录结构如下
Servlet的实现
新建类
-
点击 “src” —> “new” —> “package”,创建一个文件包
-
在包下面创建 Java 类文件,点击包名 —> “New” —> “Java Class”
-
创建一个普通的 Java 类
-
如下
package com.xxxx.servlet; public class Servlet01 { }
实现 Servlet 规范
实现 Servlet 规范,即继承 HttpServlet 类,并到如响应的包,该类中已经完成了通信的规则,我们只需要进行业务的实现即可。
package com.xxxx.servlet;
import javax.servlet.http.HttpServlet;
public class Servlet01 extends HttpServlet {
}
重写 service 方法
满足 Servlet 规范只是让我们的类能够满足接收请求的要求,接收到请求后需要对请求进行分析,以及进行业务逻辑处理,计算出结果,则需要添加代码,在规范中有一个叫做 service的方法,专门用来做请求处理的操作,业务代码则可以写在该方法中。
package com.xxxx.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Servlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Hello Servlet!");
resp.getWriter().write("Hello World");
}
}
设置注解
在完成好了一切代码的编写后,还需要向服务器说明,特定请求对应特定资源。
开发servlet项目,使用@WebServlet将一个继承于javax.servlet.http.HttpServlet 的类定义为Servlet组件。在Servlet3.0中 , 可以使用@WebServlet注解将一个继承于javax.servlet.http.HttpServlet的类标注为可以处理用户请求的 Servlet。
package com.xxxx.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.