Servlet
简介
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
Servlet 的任务
- 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
- 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
- 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
- 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
- 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。
Servlet实例
准备
1.新建一个Web项目
2.在src下建一个包
3.在你创建的包下,new一个Servlet
4.new成功后,会直接进入web.xml
5.点开你创建的Servlet,会发现飘红
将鼠标放在servlet上,按ALT Enter两个键
然后IDEA会自动导入Servlet需要的包
6.配置Tomcat
第一个Servlet代码
1.编写Servlet类
package priv.sehun.Servlet;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
public class ServletDemo extends javax.servlet.http.HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
doGet(request,response);
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
//防止乱码
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String str = "你好,世界";
//将字符串响应到网页
response.getWriter().println(str);
}
}
2.配置web.xml
<servlet>
<servlet-name>ServletDemo</servlet-name>
<servlet-class>priv.sehun.Servlet.ServletDemo</servlet-class>
</servlet>
<!--====================================================================-->
<servlet-mapping>
<servlet-name>ServletDemo</servlet-name>
<url-pattern>/haha</url-pattern>
</servlet-mapping>
3.运行
4.在浏览器访问查看
localhost:8080/Demo/haha
5.运行结果:
6.注意
每修改一次代码,都要运行一次,然后再访问查看
其他示例
一个动态刷新的图片验证码
运行结果如下:每隔两秒自动刷新
主要代码:
package priv.sehun.Servlet;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
public class ServletDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//自动刷新网页
resp.setHeader("refresh","2");
//制作一个图片作为验证码
BufferedImage image = new BufferedImage(500,100,BufferedImage.TYPE_3BYTE_BGR);
//设置图片的属性
Graphics2D graphics = image.createGraphics();
graphics.setColor(Color.pink);
Font font = new Font(null,Font.BOLD,100);
graphics.setFont(font);
//往图片里写入随机数
String num = String.valueOf(newRandom());
graphics.drawString(num,100,80);
//让浏览器知道我们给的是一张图片
resp.setContentType("image/jpg");
//ImageIO默认是使用缓存目录,可以通过ImageIO.setUseCache(false)来设置,更改缓存策略,不使用文件目录缓存,使用内存缓存
//不加这行代码可能会到505界面
ImageIO.setUseCache(false);
//让网站去打开图片
ImageIO.write(image,"jpg",resp.getOutputStream());
}
//生成随机数
public int newRandom(){
int num = (int)(Math.random()*9+1)*79779;
return num;
}
}
配置web.xml
<servlet>
<servlet-name>ServletDemo2</servlet-name>
<servlet-class>priv.sehun.Servlet.ServletDemo2</servlet-class>
</servlet>
<!--====================================================================-->
<servlet-mapping>
<servlet-name>ServletDemo2</servlet-name>
<url-pattern>/code</url-pattern>
</servlet-mapping>
通过servletContext对象读取网站配置文件
1.新建一个properties文件
name=百香果女孩
age=18
info=博君一肖使我快乐
url=jdbc:mysql://localhost:3306/smbms
2.编写servlet类
package priv.sehun.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
public class ServletDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获得配置文件的路径
String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/resources/database.properties");
Properties properties = new Properties();
FileInputStream is = new FileInputStream(realPath);
//把文件流加载到配置文件的对象中;
properties.load(is);
String name = properties.getProperty("name");
String age = properties.getProperty("age");
String info = properties.getProperty("info");
String url = properties.getProperty("url");
//响应到网页
resp.getWriter().println(name);
resp.getWriter().println(age);
resp.getWriter().println(info);
resp.getWriter().println(url);
}
}
3.配置web.xml
<servlet>
<servlet-name>Servlet3</servlet-name>
<servlet-class>priv.sehun.Servlet.ServletDemo3</servlet-class>
</servlet>
<!--====================================================================-->
<servlet-mapping>
<servlet-name>Servlet3</servlet-name>
<url-pattern>/s</url-pattern>
</servlet-mapping>
4.运行结果如下: