java登录页面笔记总结,JavaWeb基础总结笔记(上)

JavaWeb中Request、Response、ServletContext对象的使用详解

Request

获取请求行数据

获取请求方式

String getMethod()

(*)获取虚拟目录

String getContextPath()

获取Servlet路径

String getServletPath()

获取get方式请求参数

String getQueryString()

(*)获取请求URI和URL

String getRequestURI()

StringBuffer getRequestURL()

获取协议及版本

String getProtocol()

获取客户机的IP地址

String getRemoteAddr()

MyServlet类

@WebServlet("/demo1")

public class MyServlet extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {

String method = req.getMethod();

System.out.println("请求方式"+method);

String contextPath = req.getContextPath();

System.out.println("虚拟目录"+contextPath);

String servletPath = req.getServletPath();

System.out.println("servlet路径"+servletPath);

String queryString = req.getQueryString();

System.out.println("get方式请求参数"+queryString);

String requestURI = req.getRequestURI();

System.out.println("请求URI"+requestURI);

StringBuffer requestURL = req.getRequestURL();

System.out.println("请求URL"+requestURL);

String protocol = req.getProtocol();

System.out.println("协议及版本"+protocol);

String remoteAddr = req.getRemoteAddr();

System.out.println("客户机IP地址"+remoteAddr);

}

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

this.doPost(req,resp);

}

}

登录页:

Title

启动tomcat服务器(虚拟目录为/root),访问login.html输入abc并提交

d47c0d837f3099ae6c16e5805ed70507.png

idea输出结果:

请求方式: POST

虚拟目录: /root

servlet路径: /demo1

get方式请求参数: null

请求URI: /root/demo1

请求URL: http://localhost:8080/root/demo1

协议及版本: HTTP/1.1

客户机IP地址: 0:0:0:0:0:0:0:1

将form中post换成get方式,再次提交,结果:

请求方式: GET

虚拟目录: /root

servlet路径: /demo1

get方式请求参数: username=abc

请求URI: /root/demo1

请求URL: http://localhost:8080/root/demo1

协议及版本: HTTP/1.1

客户机IP地址: 0:0:0:0:0:0:0:1

获取请求头数据

通过请求头的名称获取请求头的值

String getHeader(String name)

获取所有的请求头名称

Enumeration getHeaderNames()

@WebServlet("/demo1")

public class MyServlet extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {

Enumeration headerNames = req.getHeaderNames();

while (headerNames.hasMoreElements()){

//请求头的名称

String requestName = headerNames.nextElement();

System.out.print("请求头的名称:"+requestName);

//请求头的值

String header = req.getHeader(requestName);

System.out.println("请求头的值:"+header);

}

}

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

this.doPost(req,resp);

}

}

结果:

请求头的名称:host请求头的值:localhost:8080

请求头的名称:connection请求头的值:keep-alive

请求头的名称:upgrade-insecure-requests请求头的值:1

请求头的名称:user-agent请求头的值:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36

请求头的名称: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

请求头的名称:sec-fetch-mode请求头的值:navigate

请求头的名称:referer请求头的值:http://localhost:8080/root/login.html

请求头的名称:accept-encoding请求头的值:gzip, deflate, br

请求头的名称:accept-language请求头的值:zh-CN,zh;q=0.9

请求头的名称:cookie请求头的值:JSESSIONID=97917D6D1FAD1D35757576268BD7DED3; Idea-fe3516c6=7bffffd5-2036-45b3-9613-35358f80bd96; Webstorm-cca88c1f=3ab543cf-2131-4475-9a5b-d0cd0e5d216b; Hm_lvt_eaa57ca47dacb4ad4f5a257001a3457c=1573474754,1573523933,1573525590,1573526587

获取请求体数据

请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数

步骤:

获取流对象

BufferedReader getReader()获取字符输入流,只能操作字符数据

ServletInputStream getInputStream()获取字节输入流,可以操作所有类型数据

再从流对象中拿数据

注册页

Title

@WebServlet("/demo1")

public class MyServlet extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {

System.out.println(req.getMethod());

//获取字符输入流

BufferedReader reader = req.getReader();

String line=null;

//读取数据输出结果

while((line=reader.readLine())!=null){

System.out.println(line);

}

}

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

this.doPost(req,resp);

}

}

启动tomcat服务器,访问register.html注册页面,输入tkrs

7b5514d4d00f091a2825fc5c2f693c8e.png

结果:

POST

username=tkrs

获取请求参数通用方式

不论get还是post请求方式都可以使用下列方法来获取请求参数

String getParameter(String name)根据参数名称获取参数值

String[] getParameterValues(String name)根据参数名称获取参数值的数组

Enumeration getParameterNames()获取所有请求的参数名称

Map getParameterMap()获取所有参数的map集合

注册页:

Title

游戏

体育

servlet:

@WebServlet("/demo1")

public class MyServlet extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {

//1. `String getParameter(String name)`根据参数名称获取参数值

String name = req.getParameter("username");

System.out.println("username的值为: "+name);

System.out.println("-----------------");

//2. `String[] getParameterValues(String name)`根据参数名称获取参数值的数组

String[] hobbies = req.getParameterValues("hobby");

System.out.println("hobby的值为: "+ Arrays.toString(hobbies));

System.out.println("-----------------");

//3. `Enumeration getParameterNames()`获取所有请求的参数名称

Enumeration parameterNames = req.getParameterNames();

System.out.println("所有请求参数为: ");

while (parameterNames.hasMoreElements()){

String s = parameterNames.nextElement();

System.out.println(s);

}

System.out.println("-----------------");

//4. `Map getParameterMap()`获取所有参数的map集合

Map parameterMap = req.getParameterMap();

System.out.println("所有参数map集合为: ");

Set set = parameterMap.keySet();

for(String key:set){

System.out.println("参数:"+key);

System.out.println("值:");

String[] strings = parameterMap.get(key);

for (String s : strings) {

System.out.println(s);

}

}

System.out.println("-----------------");

}

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

this.doPost(req,resp);

}

}

运行:

ca94d4d5acc17d62aed301ae330c23a4.png

结果:

username的值为: tkrs

-----------------

hobby的值为: [game, sport]

-----------------

所有请求参数为:

username

password

hobby

-----------------

所有参数map集合为:

参数:username

值:

tkrs

参数:password

值:

123

参数:hobby

值:

game

sport

-----------------

中文乱码问题:

get方式:tomcat 8 已经将get方式乱码问题解决了

post方式:会乱码

解决:在获取参数前,设置request的编码 request.setCharacterEncoding("utf-8");

请求转发

一种在服务器内部的资源跳转方式

步骤: 1. 通过request对象获取请求转发器对象:

`RequestDispatcher getRequestDispatcher(String path)`

2. 使用RequestDispatcher对象来进行转发:

`forward(ServletRequest request, ServletResponse response) `

特点: 1. 浏览器地址栏路径不发生变化

2. 只能转发到当前服务器内部资源中

3. 转发是一次请求@WebServlet("/demo2")

public class MyRes2 extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {

System.out.println("demo2被访问了");

req.getRequestDispatcher("/demo3").forward(req,resp);

}

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {

this.doPost(req,resp);

}

}

------------

@WebServlet("/demo3")

public class MyRes3 extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {

System.out.println("demo3被访问了");

}

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {

this.doPost(req,resp);

}

}

访问demo2:

demo2被访问了

demo3被访问了

共享数据

域对象:一个有作用范围的对象,可以在范围内共享数据

request域:代表一次请求的范围,一般用于请求转发的多个资源***享数据

方法:

void setAttribute(String name,Object obj):存储数据

Object getAttitude(String name):通过键获取值

void removeAttribute(String name):通过键移除键值对

@WebServlet("/demo2")

public class MyRes2 extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {

System.out.println("demo2被访问了");

req.setAttribute("msg","demo2设置的消息");

req.getRequestDispatcher("/demo3").forward(req,resp);

}

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {

this.doPost(req,resp);

}

}

------------------

@WebServlet("/demo3")

public class MyRes3 extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {

System.out.println("demo3被访问了");

Object msg = req.getAttribute("msg");

System.out.println(msg);

}

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {

this.doPost(req,resp);

}

}

访问demo2,输出:

demo2被访问了

demo3被访问了

demo2设置的消息

获取ServletContext

ServletContext getServletContext()

巩固Request知识的案例:用户登陆

用户登录案例需求:

1.编写login.html登录页面 username & password 两个输入框

2.使用Druid数据库连接池技术,操作mysql,test数据库中user表

3.使用JdbcTemplate技术封装JDBC

4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您

5.登录失败跳转到FailServlet展示:登录失败,用户名或密码错误

导入jar包,lib包要放在web下的WEB-INF目录内

caffd9e35240c99bf02cfc40341abb48.png

在数据库test中创建user表 CREATE TABLE USER(

id INT PRIMARY KEY AUTO_INCREMENT,

username VARCHAR(32) UNIQUE NOT NULL,

`PASSWORD` VARCHAR(32) NOT NULL

);

创建封装数据的User类 public class User {

private Integer id;

private String username;

private String password;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

@Override

public String toString() {

return "User{" +

"id=" + id +

", username='" + username + '\'' +

", password='" + password + '\'' +

'}';

}

}

创建JDBCUtils工具类 public class JDBCUtils {

//使用druid连接池

private static DataSource source = null;

static{

try {

Properties pros = new Properties();

InputStream is = new FileInputStream("druid.properties");

pros.load(is);

//根据提供的DruidDataSourceFactory创建对应的DataSource对象

source = DruidDataSourceFactory.createDataSource(pros);

} catch (Exception e) {

e.printStackTrace();

}

}

public static Connection getConnection() throws Exception {

Connection conn = source.getConnection();

return conn;

}

public static DataSource getDataSource() {

return source;

}

}

properties文件: url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&rewriteBatchedStatements=true

username=root

password=sjh2019

driverClassName=com.mysql.cj.jdbc.Driver

initialSize=10

maxActive=20

maxWait=1000

filters=wall

UserDao类 public class UserDao {

private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

public User login(User user) throws Exception {

try{

//获取用户名

String name = user.getUsername();

//获取密码

String password = user.getPassword();

//1.编写sql

String sql = "select * from user where username = ? and password = ?";

//2.调用query方法

User loginuser = template.queryForObject(sql,

new BeanPropertyRowMapper<>(User.class),

name, password);

return loginuser;

}catch (Exception e){

e.printStackTrace();

return null;

}

}

}

登陆的Servlet @WebServlet("/LoginServlet")

public class LoginServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//设置字符集编码

request.setCharacterEncoding("utf-8");

//获取用户输入的用户名和密码

String username = request.getParameter("username");

String password = request.getParameter("password");

User user = new User();

user.setUsername(username);

user.setPassword(password);

try {

//查询该用户在数据库是否存在

User loginuser = new UserDao().login(user);

if(loginuser!=null){

request.setAttribute("user",loginuser);

request.getRequestDispatcher("/SuccessServlet").forward(request,response);

}else {

request.getRequestDispatcher("/FailServlet").forward(request,response);

}

} catch (Exception e) {

e.printStackTrace();

}

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

}

SuccessServlet @WebServlet("/SuccessServlet")

public class SuccessServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

User user = (User) request.getAttribute("user");

String name = user.getUsername();

//设置编码

response.setContentType("text/html;charset=utf-8");

//输出

response.getWriter().write("登录成功!"+name+",欢迎您");

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

}

FailServlet @WebServlet("/FailServlet")

public class FailServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//设置编码

response.setContentType("text/html;charset=utf-8");

//输出

response.getWriter().write("抱歉,用户名或密码错误");

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

}

测试

插入一条用户记录 INSERT INTO USER VALUES

(1,'fanxian','123');

登陆登陆页面

输入fanxian 123

a2a5e073d950c6ac42efcf8eb1f1d3b2.png

d3b33be4e0abacb725d9f6767e9fe180.png

输入其他则报错:

9bfaa5b596e14843afdbae8736625980.png

1fbd9a4b4207ccf7a458b0e65828bc76.png

可使用beanutils包简化数据的封装,需要导入一个beanutils的jar包

然后修改LoginServlet如下: @WebServlet("/LoginServlet")

public class LoginServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//设置字符集编码

request.setCharacterEncoding("utf-8");

User user = new User();

Map parameterMap = request.getParameterMap();

try {

//使用beanutils封装表单提交的数据

BeanUtils.populate(user,parameterMap);

//查询该用户在数据库是否存在

User loginuser = new UserDao().login(user);

if(loginuser!=null){

request.setAttribute("user",loginuser);

request.getRequestDispatcher("/SuccessServlet").forward(request,response);

}else {

request.getRequestDispatcher("/FailServlet").forward(request,response);

}

} catch (Exception e) {

e.printStackTrace();

}

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

}

74ab7bdcc759766e0139c55fdf7fbd16.png

Response

功能:设置响应消息

设置响应行

格式:HTTP/1.1 200 ok

设置状态码:setStatus(int sc)

设置响应头:setHeader(String name, String value)

设置响应体:

获取输出流

字符输出流:PrintWriter getWriter()

字节输出流:ServletOutputStream getOutputStream()

使用输出流,将数据输出到客户端浏览器

重定向案例

请求的Servlet

@WebServlet("/RequestServlet")

public class RequestServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//第一种方法 设置状态码和响应头

//response.setStatus(302);

//response.setHeader("location","ResponseServlet");//相对路径 相当于./ResponseServlet

//或者response.setHeader("location","/root/ResponseServlet");(/root是我的虚拟目录)绝对路径

//第二种方法

response.sendRedirect("ResponseServlet");

System.out.println("准备进行重定向");

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request,response);

}

}

响应的Servlet

@WebServlet("/ResponseServlet")

public class ResponseServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

System.out.println("重定向成功");

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request,response);

}

}

在浏览器访问

42047d9af841110a2b1f6355a3eea26d.png

结果:

7d86102a1a1360992cb8f4aea21012f1.png

控制台输出:

0a38172be73e6fc23c391594bf40ad74.png

重定向的特点:redirect

地址栏发生变化

重定向可以访问其他站点(服务器)的资源

重定向是两次请求。不能使用request对象来共享数据

转发的特点:forward

转发地址栏路径不变

转发只能访问当前服务器下的资源

转发是一次请求,可以使用request对象来共享数据

路径写法:

路径分类

相对路径:通过相对路径不可以确定唯一资源

如:./index.html

不以/开头,以.开头路径

规则:找到当前资源和目标资源之间的相对位置关系

./:当前目录

../:后退一级目录

绝对路径:通过绝对路径可以确定唯一资源

- 如:http://localhost/day15/responseDemo2 /day15/responseDemo2

- 以/开头的路径

规则:判断定义的路径是给谁用的?判断请求将来从哪儿发出

给客户端浏览器使用:需要加虚拟目录(项目的访问路径)

建议虚拟目录动态获取:request.getContextPath()

, 重定向...

之前的重定向例子请求servlet代码可改为 String contextPath = request.getContextPath();

response.sendRedirect(contextPath+"/ResponseServlet");

System.out.println("准备进行重定向");

给服务器使用:不需要加虚拟目录

转发路径

见上文Request中的转发案例

服务器输出字符数据到浏览器

步骤:

获取字符输出流

输出数据

乱码问题:

1. PrintWriter pw = response.getWriter();获取的流的默认编码是ISO-8859-1

2. 设置该流的默认编码

3. 告诉浏览器响应体使用的编码 @WebServlet("/OutServlet")

public class OutServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//1.设置浏览器编码格式

//方式一:response.setHeader("content-type","text/html;charset=utf-8");

//方式二:

response.setContentType("text/html;charset=utf-8");

//3.获取输出流

PrintWriter writer = response.getWriter();

//4.输出

writer.write("你好 response");

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request,response);

}

}

659b80f8dc1a1144232acf6fb8d5bfb5.png

服务器输出字节数据到浏览器

步骤:

获取字节输出流

输出数据 @WebServlet("/OutServlet2")

public class OutServlet2 extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//1.设置浏览器编码格式

//方式一:response.setHeader("content-type","text/html;charset=utf-8");

//方式二:

response.setContentType("text/html;charset=utf-8");

//3.获取输出流

ServletOutputStream writer = response.getOutputStream();

//4.输出

writer.write("你好 response".getBytes(StandardCharsets.UTF_8));

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request,response);

}

}

3f963be55393b7c0ebb574e544d626de.png

验证码实例:

@WebServlet("/CheckServlet")

public class CheckServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//获取图片对象

int width=200;//宽

int height=100;//高

BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

//设置背景色

Graphics graphics = image.getGraphics();//得到画笔

graphics.setColor(Color.PINK);//设置颜色

graphics.fillRect(0,0,width-1,height-1);//填充颜色

//画边

graphics.setColor(Color.blue);

graphics.drawRect(0,0,width-1,height-1);

//加验证码

Random random = new Random();

String s="qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM0123456789";

for (int i = 1; i <=4 ; i++) {

int index = random.nextInt(s.length());

char c = s.charAt(index);

graphics.drawString(c+"",width/5*i,height/2);

}

//加干扰线

graphics.setColor(Color.green);

for (int i = 1; i <=4 ; i++) {

int x1=random.nextInt(width);

int x2=random.nextInt(width);

int y1=random.nextInt(height);

int y2=random.nextInt(height);

graphics.drawLine(x1,y1,x2,y2);

}

//输出图片

ImageIO.write(image,"jpg",response.getOutputStream());

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request, response);

}

}

228c57f4ed115c7aa1b013badcdbf8b1.png

ServletContext

获取

两种方式:

this.getServletContext()

request.getServletContext()

@WebServlet("/Get")

public class Get extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

ServletContext servletContext = this.getServletContext();

ServletContext servletContext1 = request.getServletContext();

System.out.println(servletContext==servletContext1);

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request, response);

}

}

打印结果为true

获取MIME类型

MIME类型:在互联网通信过程中定义的一种文件数据类型

格式: 大类型/小类型

text/html

image/jpeg

获取: String getMimeType(String file)

@WebServlet("/Get")

public class Get extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

ServletContext servletContext = this.getServletContext();

String filename="test.jpeg";

String mimeType = servletContext.getMimeType(filename);

System.out.println(mimeType);

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request, response);

}

}

访问

c4de74041b4d6c8bfb2f45dc5023e5b1.png

结果:

63c0dc7a1feb5c0ceabf770da2763afe.png

域对象

共享数据

setAttribute(String name,Object value)设置数据

getAttribute(String name)获取数据

removeAttribute(String name)移除数据

作用范围:所有用户所有请求的数据

@WebServlet("/Set")

public class Set extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

ServletContext servletContext = this.getServletContext();

servletContext.setAttribute("msg","肖战是肖恩的孙子");

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request, response);

}

}

@WebServlet("/Get")

public class Get extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

ServletContext servletContext = this.getServletContext();

String msg = (String) servletContext.getAttribute("msg");

response.setContentType("text/html;charset=utf-8");

response.getWriter().write(msg);

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request, response);

}

}

c25f78ac9a8c564d2e6cf2393205bb3c.png

c5f09ad873df4abbd2144a3ac4c39d18.png

获取文件的真实(服务器)路径

5e0cb427573b64beed01b51aad7b155b.png

@WebServlet("/Get")

public class Get extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

ServletContext servletContext = this.getServletContext();

String bPath = servletContext.getRealPath("/b.txt");

System.out.println("b.txt的真实路径: "+bPath);

String cPath = servletContext.getRealPath("/WEB-INF/c.txt");

System.out.println("c.txt的真实路径: "+cPath);

String aPath = servletContext.getRealPath("/WEB-INF/classes/a.txt");

System.out.println("a.txt的真实路径: "+aPath);

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {![在这里插入图片描述](https://uploadfiles.nowcoder.com/files/20191226/592649258_1577371981391_20191226180214280.png)

this.doPost(request, response);

}

}

访问

2cd3dfad0e4f83491755e447227524cd.png

控制台输出:

de646f0bdef764dbb004dba8fcf135b7.png

文件下载综合案例

在web目录下创建一个images目录存放一张图片

260fb325c0312dd56c341109eba3bb8d.png

download.html

Title

点击下载图片

DownloadServlet

@WebServlet("/DownloadServlet")

public class DownloadServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//获取文件名

String filename = request.getParameter("filename");

//利用servlet对象获取图片真实路径

ServletContext servletContext = this.getServletContext();

String realPath = servletContext.getRealPath("/images/"+filename);

//输入流读取文件

FileInputStream inputStream = new FileInputStream(realPath);

//设置响应方式

String mimeType = servletContext.getMimeType(filename);//获取文件mime类型

response.setContentType(mimeType);

response.setHeader("content-disposition","attachment;filename="+filename);//附件下载

//输出流写出文件

ServletOutputStream outputStream = response.getOutputStream();

byte[] bytes=new byte[1024];

int len=0;

while((len=inputStream.read(bytes))!=-1){

outputStream.write(bytes,0,len);

}

inputStream.close();//关闭输入流

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request, response);

}

}

打开页面

d8a854783b22901e77a9997aa8d4e139.png

4428bcebf1f290488f3b48a12e8acb0a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值