1.servlet的概述
1.1什么是servlet?
1.2servlet的作用
1.3servlet的版本(这边介绍3.0版本)
2.编写第一个servlet
如何配置web.xml文件?
servlet的执行流程
3.IDEA在Servlet3.0版本下创建Servlet?
4.HttpServletRequest请求对象
4.1httpservletrequest简介
4.2获取请求行相应的方法
4.3获取请求头相应的方法
4.4获取请求参数相应的方法
eg:
5.HttpServletResponse响应头对象
5.1.HttpServletResponse简介
5.2发送响应行
5.3发送响应头
5.4发送响应消息体
eg:
6.
eg:
1)提供验证码图像的servlet
package com.anli;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class VerifyCodeServlet
*/
@WebServlet("/code")
public class VerifyCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int width=100;
int height=30;
//字符串数据集
String data="abcdefghijklmnopqrstuvwsyz0123456789";
//该类用于参数随机字符
Random random=new Random();
//设置一个图片对象,用于返回给浏览器
BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics graphics=image.getGraphics();
graphics.setColor(Color.gray);
graphics.fillRect(0, 0, width, height);
graphics.setColor(Color.black);//可以这样更改颜色,不会影响用之前的颜色所画的东西
for(int i=0;i<4;i++) {
int position=random.nextInt(data.length());//获取到随机字符串的位置
String raString=data.substring(position, position+1);//获取到随机字符
//将随机字符写进图中
graphics.drawString(raString, width/5*(i+1), 15);
}
ImageIO.write(image, "jpg",response.getOutputStream());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
2)html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
<h2>切换验证码</h2>
<script>
function changeImageCode(){
document.getElementById("btn").isDisabled=true;
document.getElementById("identity").src='code?ts='+new Date().getTime();
<!-- 后面加了一个时间,是为了防止浏览器缓存,这样子每一次的验证码就不会重复-->
}
</script>
<!--这个src的意思是,这个图片是向映射为/code的servlet请求加载数据,加载完后设置false,停止加载
当点击了按钮,我们把加载设置设为true,然后又改变一下时间,从而让每一的验证码不会重复 -->
<image src="code" id="identity" onload="btn.disable=false" style="cursor:pointer;vertical-align:center">
</image>
<input type="button" value="看不清,更换验证码" onclick="changeImageCode()" id="btn" style="vertical-align=center">
</input>
</center>
</body>
</html>
7.servlet的生命周期
7.1什么是servlet的生命周期?
7.2servlet接口以及相关方法
7.3servlet生命周期整个过程描述
8.ServletConfig对象
8.1什么是ServletConfig对象?
配置信息:
8.2ServletConfig对象的作用
9.ServletContext对象
9.1什么是ServletContext对象?
9.2ServletContext对象的应用
3.在WebContent中设置一个db文件(其里面配置的信息一般为数据库的一些账号和密码等),然后在servlet中进行读取
db文件:
在servlet中的doget方法中:
10.Servlet之间的跳转
10.0简介
10.1转发Forward
eg:
10.2重定向Redirect
eg:
10.3两者区别
1.请求转发的网址不会变;
2.请求转发只有一个请求和响应,而请求重定向各有两个;
3.请求转发的资源一般为内部资源,而请求重定向一般是网络资源。且如果请求重定向要访问内部资源,要加上项目名;
eg:
11.线程安全
11.1什么是线程安全
11.2怎么解决线程并发问题
eg:
12.自动刷新
说明:自动刷新的实现方式有挺多种,我会列举两种,这边详细讲在jsp中的自动刷新,因为这是常用的。
定时刷新的原理:设置HTTP响应头Refresh:1;url=http://localhost:8080/demo/index.jsp
方法一、使用response.setHeader();方法
方法二、使用HTML的<meta>元素
步骤:
1)在servet返回一个带有meta标签的数据
2)在jsp文件中获取该数据
实例:
1)
2)
注意:这边的url一定要加项目名,因为我们是从浏览器中去访问,而不是从服务器。
13.案例文件的下载操作
eg:
1)下载Servlet的代码
package com.anli;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class downloadServlet
*/
@WebServlet("/downloadServlet")
public class downloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String filename=request.getParameter("filename");
//通知浏览器不要预览,而是下载文件
//1.告知浏览器文件的类型
//2.告知浏览器文件的打开方式是下载
String mimeType=this.getServletContext().getMimeType(filename);
//第一步
response.setContentType(mimeType);
//第二步
response.setHeader("Content-Disposition", "attachment:filename="+filename);
//通过ServletContext对象获取文件的绝对路径
String realPath=this.getServletContext().getRealPath(filename);
InputStream in=new FileInputStream(realPath);
ServletOutputStream outputStream=response.getOutputStream();//输出二进制文件的
//文件拷贝(复制)
int len=0;
byte[] buffer=new byte[1024];
while((len=in.read(buffer))>0) {
outputStream.write(buffer, 0, len);
}
in.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
2)进行部署,然后在访问该Servlet的时候,需要加 ?filename="你的文件名"
注意:这个案例的文件是在我们本地的项目中的,所以你需要自己搞一些文件放在webcontent文件去测试,特别注意路径的问题。