基础3——servlet
Posted 鹏达君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础3——servlet相关的知识,希望对你有一定的参考价值。
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文件去测试,特别注意路径的问题。
以上是关于基础3——servlet的主要内容,如果未能解决你的问题,请参考以下文章