基础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的主要内容,如果未能解决你的问题,请参考以下文章

jsp基础语言-jsp代码段

Java web中使用到的技术

filter与servlet

JSP基础--JSP入门

基础3——servlet

servlet框架改进(基础)