Java Servlet

Posted hello4world

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Servlet相关的知识,希望对你有一定的参考价值。

网络架构
BS:Browser浏览器 server服务端
特点:跨平台 由于所有数据都来自网络执行效率偏低 版本升级高效
CS:client客户端(手机客户端:androidios,电脑客户端) server服务端
特点:不能跨平台 开发成本高 执行效率高 版本升级需要下载新的软件
总结:两种架构各有优缺点,以后工作时都有可能涉及到

什么是服务器
服务器就是一台高性能电脑

什么是web服务器
在一台高性能电脑上安装了web服务软件
Tomcat就是一款web服务软件

什么是web服务软件
电脑中的任何资源被远程计算机访问时必须有一个负责建立网络连接的程序,web服务软件就是负责底层网络连接

如何使用Tomcat
在Eclipse中配置Tomcat
1. 从doc.tedu.cn网站中下载安装包和源代码(Linux系统只需要下载源代码)
2. windows系统同学在D盘或C盘中创建java文件夹,把下载的两个文件解压到java文件夹中
linux系统同学把下载的源代码解压到到home文件夹下
3. 点击Eclipse中的window->preferences->Server->Runtime.....->add->选择对应的版本->browser 找到tomcat文件夹路径。
- 以后使用过程中有可能Tomcat出现损坏现象,需要通过以上步骤重新下载并安装

创建Web工程
1. 创建maven工程,把jar改成war
2. 解决错(创建web.xml文件): 在文件名最长的文件上右键点击最长的
3. 新建一个Servlet,包名cn.tedu 类名HelloServlet
4. 解决错(让Tomcat和自己的工程建立关系):工程名上右键->Properties->Targeted Runtimes->在Tomcat上面打钩 保存
5. 把HelloServlet类里面的代码全部删除,添加输出代码
System.out.println("Servlet已响应!");
6. 在工程名上面右键 run as-> run on Server
7. 在弹出的浏览器或任意一个浏览器地址栏中添加HelloServlet
http://localhost:8080/servlet_01_01/HelloServlet
如果显示空白页面说明没问题

Servlet响应流程
1. 用户从浏览器发出请求,请求先被Tomcat软件连接,Tomcat可以得到用户的请求路径,
通过请求路径去web.xml配置文件中 找到相对应的Servlet类名,通过反射技术把该Servlet实例化出来,并且调用里面的service方法.
2.通过Servlet组件规范,可以让web服务软件提供动态资源访问的能力

什么是Servlet
Servlet是Sun公司订制的一种用于扩展web服务软件功能的组件规范
web服务软件(Tomcat)负责建立网络连接,并且提供静态资源访问的能力
静态资源和动态资源
静态资源:任何用户发出的请求得到的内容都是一样的内容
动态资源:不同的用户发出请求通过服务器内部计算得到的不一样的内容

创建Class和创建Servlet的不同
创建Servlet本质也是创建了一个Class,只不过比创建class多了两件事
1.让类继承HTTPServlet
2.在web.xml文件中添加请求地址和Servlet的对应关系

浏览器发出请求的几种方式
1.在浏览器的地址栏写请求地址,敲回车发出请求
2.通过超链接发出请求
<a href="http://localhost:8080/servlet_01_03/NameServlet">超链接</a>
3.通过表单发出请求
<form action="http://localhost:8080/servlet_01_03/NameServlet">

获取请求参数时如果传递过来参数中有中文,并且Tomcat版本在8.0以下,需要做以下操作
找到Servers工程中的server.xml文件中的65行左右的位置添加以下内容
<Connector URIEncoding="UTF-8"

请求方式
get:地址栏、超链接、表单(method="get")发出的请求为get,把请求参数放到请求地址的后面,由于参数可以被用户看到
所以不安全,请求参数的数据量小
post:表单(method="post")发出的请求为post,参数放到请求体里面,参数大小不受限,一般上传文件都是用post请求,因为
参数不可见,相对get安全,请求数据量大小不限
//如果post请求参数中有中文需要添加以下代码
req.setCharacterEncoding("UTF-8");
在service方法中做了对请求方式的判断,如果请求方式是get,则会调用doGet方法,如果请求方式是post则调用doPost方法

在web工程中操作数据库步骤
1.把之前工程中的DBUtils类文件复制到工程中
2.在pom.xml文件中添加mysql和数据库连接池的jar包坐标
3.把之前工程中的jdbc.properties配置文件复制到工程中(当工程jre改成1.7时会报错:在工程名上面右键properties->Project Facets->Java 把1.5改成1.7)

添加员工步骤
1. 创建emp.html页面 里面添加一个表单有三个文输入框 分别输入员工编号,员工姓名,员工工资和保存按钮 表单向EmpServlet发请求
2. 创建EmpServlet 保留doGet方法,在方法中获取传递过来的姓名、编号、工资, 获取连接 写SQL语句 。。。。。。

登录功能步骤:
1. 创建页面login2.html 里面添加form表单提交地址Login2Servlet 添加两个文本输入框和一个提交按钮,把请求方式改成post
2. 创建Login2Servlet 保留doPost方法删除其它
3. 在doPost方法中先获取传递过来的用户名和密码,获取连接,创建登录查询的SQL语句,创建预编译SQL执行对象,替换掉SQL中的?,执行查询SQL,
从结果中的到符合条件的数量,如果数量大于0说明登录成功 给页面返回“登录成功”,否则给页面返回“登录失败”,在异常里面给页面返回“服务器异常”

查询员工列表步骤:
1. 在登录页面中添加一个超链接,href地址为 FindAllServlet2
2. 创建FindAllServlet2 保留doGet方法
3. 在方法中 获取连接开始写查询员工信息的代码,查询到数据后在便利数据前先给页面输出一个table的开始标签和表头,在while里面输出每一行数据,
在while循环的最后输出关闭的table标签

创建web工程步骤
1. 创建maven工程 把jar改成war
2. 改错 在最长上面右键最长
3. 工程名上右键 属性->target Runtimes 关联Tomcat
4. 在pom文件中添加jar包坐标(从之前工程中复制)
5. 把DBUtils添加到工程中
6. 把连接数据库信息的jdbc.properties配置文件复制到工程中

重定向
重定向实现原理:以下代码会给浏览器返回一个302状态码和一个路径,浏览器收到后会立即向指定路径再次发送请求
response.sendRedirect(request.getContextPath()+"/ListServlet"); //request.getContextPath()获取工程的根路径

Http协议
HTTP协议属于网络应用层数据传输协议,规定了浏览器和服务器之间如何通讯,以及数据的结构
http协议下的请求头数据(由浏览器打包生成)
GET /servlet_03_01/DeleteServlet?empno=3 HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: same-origin
Referer: http://localhost:8080/servlet_03_01/ListServlet
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

*/
http协议下的响应头数据(由Tomcat服务器负责打包)
HTTP/1.1 302
Location: /servlet_03_01/ListServlet
Content-Length: 0
Date: Mon, 16 Sep 2019 06:31:17 GMT

TCP/IP 网络连接协议,规定了两台设备进行如何操作才算是建立好了连接(三次握手)。HTTP协议是基于TCP/IP连接协议之上的

Thymeleaf模板引擎
Thymeleaf是一个模板引擎,功能是将HTML页面作为模板,并根据模板中特定的标记,对模板内部的数据进行替换或修改,最后形成一个html页面

如何使用Thymeleaf
1.在pom文件中添加jar包坐标
<!-- 模板引擎坐标 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.9.RELEASE</version>
</dependency>

2.把页面添加到src/main/resources目录下,工程发布后会直接把页面添加到工程的WEB-INF目录下,该目录下的页面是禁止用户直接访问的

导入老师工程注意事项
1. 重新关联Tomcat 工程右键->properties->target Runtimes->勾选Tomcat
2. 修改jdk版本 工程右键->build path->configr...->Libraies->Jre System Library双击 选择自己电脑上的jdk版本

创建新工程步骤
1.创建工程jar改war
2.最长文件上右键最长 改错
3.工程关联Tomcat
4.pom.xml坐标
5.把数据库和Thymeleaf工具类复制到工程中
6.把jdbc.properties配置文件复制到工程中

select a.oId,a.title,a.abstract,a.commentCount,a.viewCount,a.putTop,a.created,a.updated,a.imgName,u.userName
from article a join user u
on a.authorId=u.oId
order by a.putTop desc
limit 0,8;

select t.*
from tag t join tag_article ta
on t.oId=ta.tag_oId
where ta.article_oId=9;

405状态码:当Servlet中没有指定请求的响应方法时会出现405状态码

Cookie和Session
Http协议属于无持续状态的通讯协议,每次请求过程都是一次请求对应一次响应,响应后就断开连接,每次访问之间没有关系
Cookie和Session是用于让多个连接之间建立关系的处理方式

Cookie
类似于HTTP协议中的会员卡(打孔式),数据保存在客户端的浏览器里面,由服务器中Servlet里面的response对象创建Cookie数据,
数据保存在浏览器里面,添加完Cookie数据后,之后的每一次请求浏览器都会带着Cookie数据发请求
由于Cookie在HTTP协议中规定,存在于协议头中进行传播,需要对中文和特殊字符进行URL编码
Cookie c2=new Cookie("m2",URLEncoder.encode("你好世界!", "UTF-8"));
设置保存时间,如果不写则保存在浏览器的内存中,浏览器关闭时清除。如果是设置了时间则保存到磁盘中,时间到后清除,
如果设置时间为0则立即删除
c2.setMaxAge(60*60*24*30);//保存30天
通过response对象将cookie下发到浏览器(客户端)
response.addCookie(c2);

获取Cookie
Cookie[] cookies=request.getCookies();
//为了避免null指针异常添加判断
if(cookies!=null) {
//遍历每个Cookie
for (Cookie cookie : cookies) {
//取出cookie中的键值
System.out.println(cookie.getName()+"->"+URLDecoder.decode(cookie.getValue(), "UTF-8"));
}
}

Session
Cookie存在弊端
1.信息是明文保存,可以被仿冒修改
2.存储量不能超过4K
Session类似于银行卡
创建过程: 第一次执行getSession方法时会在服务器中创建一个Session对象保存在服务器中,同时把该session的id添加到cookie里面,
之后每次请求都会在cookie中带着sessionid,当之后每次执行getSession时会自动通过cookie中的sessionid 获取之前所创建的session对象

cookie和Session对比
1. cookie保存在客户端,Session保存在服务器
2. cookie一般只能保存小量数据不能超过4k,只能保存字符串 ,session没有大小限制 并且可以保存任意对象
3. cookie保存时间可以任意设置默认时间关闭即删除 ,session默认时间半小时,可以在web.xml中添加内容修改时间
4. session安全性较高

过滤器
可以在"java web 容器"中拦截web请求,可以在不改变Servlet情况下为Servlet扩展功能
1.权限检查功能
防盗链
只有登录的用户才能看图片,没有登录不能看图片

URL匹配规则
1.具体路径匹配规则
/photo/img.png
2.后缀匹配规则(*代表所有)
*.png
*.html
*.css
*.do
3.路径匹配
/photo/*
/post/*
/post/add/* */
4.全匹配
/
*
注意:路径匹配和后缀匹配不能混合使用! 如/photo/*.png 是错误的!!

以上是关于Java Servlet的主要内容,如果未能解决你的问题,请参考以下文章

Servlet学习1

ServletServlet 详解(使用+原理)

ServletServlet 详解(使用+原理)

ServletServlet容器等内容讲解

Servlet学习笔记

ServletServlet学习之基础篇