法名 |
描述 |
String getParameter(String name) |
获得指定参数名对应的值。如果没有则返回null,如果有多个获得第一个。 例如:username=jack |
String[] getParameterValues(String name) |
获得指定参数名对应的所有的值。此方法专业为复选框提供的。 例如:hobby=抽烟&hobby=喝酒&hobby=敲代码 |
Map<String,String[]> getParameterMap() |
获得所有的请求参数。key为参数名,value为key对应的所有的值。 |
@H_502_834@
@WebServlet("/request05")
public class RequestServlet05 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
System.out.println("RequestServlet05...");
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
System.out.println("username = " + username);
String password = request.getParameter("password");
System.out.println("password = " + password);
String[] hobbies = request.getParameterValues("hobby");
System.out.println("hobby----");
for (String hobby : hobbies) {
System.out.println(hobby);
}
System.out.println("--------------------------------------------------");
Map<String, String[]> parameterMap = request.getParameterMap();
Set<String> keys = parameterMap.keySet();
for (String key : keys) {
System.out.println(key);
String[] values = parameterMap.get(key);
for (String value : values) {
System.out.println(value);
}
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
doPost(request, response);
}
}
请求参数乱码处理
我们在输入一些中文数据提交给服务器的时候,服务器解析显示出来的一堆无意义的字符,就是乱码。
那么这个乱码是如何出现的呢?如下图所示:

-
get方式, 我们现在使用的tomcat>=8.0了, 乱码tomcat已经处理好了
-
post方式, 就需要自己处理
void setCharacterEncoding(String env);
request.setCharacterEncoding("UTF-8");
乱码处理:保证编码和解码所使用的字符集一致,即可解决乱码。
使用BeanUtils封装
现在我们已经可以使用request对象来获取请求参数,但是,如果参数过多,我们就需要将数据封装到对象。
以前封装数据的时候,实体类有多少个字段,我们就需要手动编码调用多少次setXXX方法,因此,我们需要BeanUtils来解决这个问题。
BeanUtils是Apache Commons组件的成员之一,主要用于简化JavaBean封装数据的操作。
使用步骤:
- 导入jar
- 使用BeanUtils.populate(user,map)
表单 reg.html
<form action="request06" method="post">
username:<input type="text" name="username"><br>
password:<input type="password" name="password"><br>
hobby:<input type="checkBox" name="hobby" value="sing">唱歌
<input type="checkBox" name="hobby" value="dance">跳舞
<input type="checkBox" name="hobby" value="code">敲代码
<input type="submit" value="注册">
</form>
RequestServlet06
@WebServlet("/request06")
public class RequestServlet06 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
System.out.println("RequestServlet06...");
request.setCharacterEncoding("UTF-8");
try {
Map<String, String[]> parameterMap = request.getParameterMap();
User user = new User();
BeanUtils.populate(user,parameterMap);
System.out.println("user = " + user);
} catch (Exception e) {
e.printstacktrace();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
doPost(request, response);
}
}
小结
-
获取请求参数【通用】
- getParameter(String name):根据参数名称获取单个值
- getParameterValues(String name):根据参数名称获取多个值 用于复选框
- getParameterMap():获取所有请求参数封装到Map集合中
-
请求参数中文乱码处理
- get方式:没有中文乱码 无需处理 tomcat8.0版本以后已经处理了
- post方式:需要处理 request.setCharacterEncoding(“UTF-8”);
-
使用BeanUtils将所有请求参数map集合中的数据封装到javabean对象
-
导入jar包
-
BeanUtils.populate(Object bean,Map map);
注意:Map集合的key一定要和javabean的属性一致。
知识点-请求转发
请求转发:服务器内部资源跳转的一种方式
html:a标签、form表单action
js:location.href=“…”

request.getRequestdispatcher("转发地址");
forward(request,response);
request.getRequestdispatcher("转发地址").forward(request,response);
RequestServlet07.java
@WebServlet("/request07")
public class RequestServlet07 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
System.out.println("RequestServlet07...");
request.setAttribute("rkey","rrr");
request.getRequestdispatcher("request08").forward(request,response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
doPost(request, response);
}
}
RequestServlet08.java
package com.execise.web.request;
import javax.servlet.servletexception;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/request08")
public class RequestServlet08 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
System.out.println("RequestServlet08...");
Object rkey = request.getAttribute("rkey");
System.out.println(rkey);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
doPost(request, response);
}
}
特点:
-
转发发生在服务器内部,不能请求外部资源
-
转发地址栏不发生改变
-
转发发送一次请求
-
转发一般使用相对路径
-
转发请求数据不会丢失
-
转发可以访问到WEB-INF下的资源
小结
-
转发 :指的是将客户端的请求,服务端接收之后再交给第三方处理,是一种服务器内部资源跳转方式。
-
实现:request.getRequestdispacther(“转发地址”).forward(request,response);
作为域对象存取值
ServletContext:域对象 代表的是整个应用
域对象:一个有作用范围的对象 ,在它的作用范围中可以实现数据共享。
request域对象:一次请求,因此一般只能在转发中使用数据共享。
域对象是一个容器,这种容器主要用于Servlet与Servlet/JSP之间的数据传输使用的。
-
Object getAttribute(String name) ;
-
void setAttribute(String name,Object object) ;
-
void removeAttribute(String name) ;
小结
-
request域对象:在一次请求中共享数据,只能用在转发中
-
API
-
setAttribute(String name,Object value);
-
getAtrribute(String name);
-
removeAttribute(String name);
Response
HttpServletResponse概述
Response:封装响应信息,响应给客户端浏览器
体系结构:response–>RequestFacade-实现->HttpServletResponse-继承->ServletResponse
在Servlet API中,定义了一个HttpServletResponse接口(doGet,doPost方法的参数),它继承自ServletResponse接口,专门用来封装HTTP响应消息。由于HTTP响应消息分为响应行、响应头、响应体三部分,因此,在HttpServletResponse接口中定义了向客户端发送响应状态码、响应头、响应体的方法
作用
设置响应的三部分(响应行,响应头,响应体)
小结
-
Response:封装响应信息,设置响应信息 响应给客户端浏览器
-
体系结构:ServletResponse–继承–>HttpServletResponse–实现–>ResponseFacade
-
tomcat创建了request和response对象,开发中只需要使用这两个对象即可,使用request对象获取请求信息,使用response对象设置响应信息。
-
作用:设置响应内容
知识点-操作响应行
响应行
HTTP/1.1 200
响应头
响应体

常用的状态码:
200:请求成功
404:请求资源不存在 【请求地址写错】
500:服务器内部错误 【java代码报错】
302:重定向
304:读取缓存数据
403:请求禁止 没有权限访问
406:请求和响应的内容不一致
小结
-
设置的API: response.setStatus(int code);
-
http状态码
- 200:成功
- 404:请求资源不存在
- 500:服务器内部错误
知识点-操作响应头
响应头: 是服务器指示浏览器去做什么
一个key对应一个value
操作响应头的API

一个key对应多个value

关注的方法: setHeader(String name,String value);
常用的响应头:
-
Refresh:定时跳转 (eg:服务器告诉浏览器5s之后跳转到百度)
-
Location:重定向地址(eg: 服务器告诉浏览器跳转到xxx)
-
Content-disposition: 告诉浏览器下载
-
Content-Type:设置响应内容的MIME类型(服务器告诉浏览器内容的类型)
定时刷新
response.setHeader("refresh","秒数;url=跳转的路径");
response.setHeader("refresh","5; url=http://www.baidu.com");
重定向
@H_404_2679@

response.sendRedirect("demo09");
package com.execise.web.response;
import javax.servlet.servletexception;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/response02")
public class ResponseServlet02 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
System.out.println("ResponseServlet02...");
response.sendRedirect("/day23/response03");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
doPost(request, response);
}
}
重定向
response.sendRedirect("重定向的路径");
特点:
-
重定向地址栏发送改变
-
重定向发生了两次请求
-
重定向不能访问WEB-INF下的资料,并且请求数据会丢失
-
重定向可以访问外部资源
-
重定向一般使用绝对路径,如果是同一个项目内的资源,可以使用相对路径。
小结
操作响应头
response.setHeader(String name,String value)
重定向
重定向 :服务端让客户端重新发送一次请求
实现:response.sendRedirect(“重定向地址”);
转发和重定向的区别 【forward和redirect的区别?】:
-
转发发送一次请求,地址栏不发生改变;重定向发送两次请求,地址栏发送改变
-
转发请求信息不会丢失;重定向请求信息会丢失
-
转发只能请求服务器内部资源;重定向既可以请求服务器内部资源,又可以请求外部资源
-
转发可以访问WEB-INF下的资源;重定向不行
-
转发一般使用相对路径,重定向使用一般使用绝对路径
相对路径:有参照物,根据当前位置进行参照选择资源
./ :当前位置
../:上一级目录
eg:
index.html:<a href="request05">转发</a><br> :相对的就是当前页面 【静态资源】
ResponseDemo01:response.sendRedirect("response02"); :相对的是当前Servlet地址 【动态资源】
绝对路径:直接通过地址定位唯一资源
1. 以盘符开头的:D:\czbk\java119\day24-request&response
2. 以Http开头的:http://localhost:8080/day24/WEB-INF/a.html
相对路径
index.html:http://localhost:8080/day24/index.html
response01:http://localhost:8080/day24/response01
所以:这里 我从index.html页面跳转到response01的Servlet 使用相对路径 直接写response01就可以了
路径跳转加/: /表示的是绝对路径
前端加/: /加在前端代表的是服务器的地址:http://localhost:8080
后台加/: 注意这个地址给谁用:
如果是服务器使用【转发】,表示的就是当前应用地址:http://localhost:8080/day24
如果是给客户端用【重定向】,表示的就是服务器的地址:http://localhost:8080
一般情况下,项目中建议使用相对路径。
操作响应体
操作响应体的API

页面输出只能使用其中的一个流实现,两个流是互斥的.
响应乱码处理
解决字符流输出中文乱码问题
response.setContentType("text/html;charset=utf-8");
使用字节输出流输出中文乱码问题
response.setHeader("Content-type", "text/html;charset=utf-8");
ServletoutputStream outputStream = response.getoutputStream();
outputStream.write("你好".getBytes("utf-8"));
package com.execise.web.response;
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;
import java.io.IOException;
@WebServlet("/response04")
public class ResponseServlet04 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
System.out.println("ResponseServlet04...");
response.setContentType("text/html;charset=UTF-8");
ServletoutputStream outputStream = response.getoutputStream();
outputStream.write("打倒小日本!".getBytes("UTF-8"));
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
doPost(request, response);
}
}
小结
-
操作响应体
-
字符流输出:response.getWriter().print(“…”);
-
字节流输出:response.getoutPutStream.write(byte[]);
-
响应中文乱码
-
原因:内容在编码和解码时使用的字符编码集不一致导致。
-
解决:response.setContentType(“text/html;charset=UTF-8”);
案例-完成文件下载
创建文件下载的列表的页面,点击列表中的某些链接,下载文件.

文件下载分析
将服务器上已有的文件拷贝到本地(客户端)
IO流操作 response.getoutputStream()向客户端写入流
文件下载的方式
链接的方式:直接将服务器上的文件的路径写到href属性中.如果浏览器不支持该格式文件,那么就会提示进行下载保存, 如果浏览器支持这个格式(eg: png, jpg…)的文件,那么直接打开,不再下载了
手动编写代码实现下载.无论浏览器是否识别该格式的文件,都会下载.
超链接方式
-
准备下载资源
-
编写下载页面 编写a标签
-
浏览器访问下载
编码方式
手动编码方式要求
思路
-
处理请求响应中文乱码
-
获取要下载的文件名称
-
使用ServletContext对象获取要下载文件的字节输入流
-
设置响应头,告诉浏览器执行下载操作
-
设置响应头,告诉浏览器要下载的文件类型
-
使用response以字节流的方式将下载文件内容输出到客户端浏览器
代码实现
package com.execise.web.response;
import sun.misc.BASE64Encoder;
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;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Base64;
@WebServlet("/download")
public class DownloadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
request.setCharacterEncoding("UTF-8");
String filename = request.getParameter("filename");
System.out.println("下载的原文件名:filename = " + filename);
InputStream is = getServletContext().getResourceAsstream("download/" + filename);
String mimeType = getServletContext().getMimeType(filename);
response.setContentType(mimeType);
String userAgent = request.getHeader("user-agent");
if(userAgent.contains("Firefox")){
filename = base64EncodeFileName(filename);
}else{
filename = URLEncoder.encode(filename,"UTF-8");
}
System.out.println("编码后的文件名:filename = " + filename);
response.setHeader("Content-disposition","attachment;filename="+filename);
ServletoutputStream os = response.getoutputStream();
int length = 0;
byte[] bytes = new byte[8192];
while((length=is.read(bytes))!=-1){
os.write(bytes,0,length);
}
is.close();
os.close();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
doPost(request, response);
}
public static String base64EncodeFileName(String fileName) {
BASE64Encoder base64Encoder = new BASE64Encoder();
try {
return "=?UTF-8?B?"
+ new String(base64Encoder.encode(fileName
.getBytes("UTF-8"))) + "?=";
} catch (UnsupportedEncodingException e) {
e.printstacktrace();
throw new RuntimeException(e);
}
}
}
细节处理
告诉浏览器设置的响应头里面不支持中文的, 抓包来看:

解决方案: 手动进行编码再设置进去就ok了
filename = URLEncoder.encode(filename,“UTF-8”);
综合案例-注册

说白了:就是向数据库中插入一条用户记录
数据库
create database day24;
use day24;
CREATE TABLE tb_user(
id int primary key auto_increment,
username varchar(20) unique,
password varchar(32)
);
INSERT INTO tb_user(username,password) values('zhangsan','123'),('lisi','234');
SELECT * FROM tb_user;
JavaBean
package com.execise.bean;
import java.io.Serializable;
public class User implements Serializable {
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 + '\'' +
'}';
}
}
导入依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>MysqL</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
工具类和配置文件
db.properties
mybatis-config.xml
log4j.properties
register.html
注册案例思路

UserDao.java
package com.execise.dao;
import com.execise.bean.User;
public interface UserDao {
User selectByUsername(String username);
int add(User user);
}
UserDao.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.execise.dao.UserDao">
<select id="selectByUsername" resultType="user" parameterType="string">
select * from tb_user where username=#{username}
</select>
<insert id="add" parameterType="user">
insert into tb_user values(null,#{username},#{password})
</insert>
</mapper>
RegisterServlet.java
package com.execise.web;
import com.execise.bean.User;
import com.execise.dao.UserDao;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.sqlSession;
import org.apache.ibatis.session.sqlSessionFactory;
import org.apache.ibatis.session.sqlSessionFactoryBuilder;
import javax.servlet.servletexception;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
sqlSession sqlSession = null;
try {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
Map<String, String[]> parameterMap = request.getParameterMap();
User user = new User();
BeanUtils.populate(user,parameterMap);
InputStream is = Resources.getResourceAsstream("mybatis-config.xml");
sqlSessionFactory sqlSessionFactory = new sqlSessionFactoryBuilder().build(is);
sqlSession = sqlSessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user1 = userDao.selectByUsername(user.getUsername());
if(user1==null){
userDao.add(user);
sqlSession.commit();
response.getWriter().print("用户注册成功!");
}else{
response.getWriter().print("用户名已存在!");
}
} catch (Exception e) {
sqlSession.rollback();
e.printstacktrace();
response.getWriter().print("服务器异常!");
}finally {
if(sqlSession!=null){
sqlSession.close();
}
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
doPost(request, response);
}
}
小结
-
注册:本质就是向数据库中插入一条数据
-
思路:
-
获取请求参数
-
将注册信息插入数据库
-
根据处理结果进行响应


页面的准备 login.html
<!DOCTYPE html>
<html lang="en">
<head>
<Meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<center>
<h1>用户登录</h1>
<form action="login" method="post">
姓名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="登录"/>
</form>
</center>
</body>
</html>
代码实现
UserDao.java
package com.execise.dao;
import com.execise.bean.User;
public interface UserDao {
User select(User user);
}
UserDao.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.execise.dao.UserDao">
<select id="select" resultType="user" parameterType="user">
select * from tb_user where username=#{username} and password=#{password}
</select>
</mapper>
LoginServlet.java
package com.execise.web;
import com.execise.bean.User;
import com.execise.dao.UserDao;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.sqlSession;
import org.apache.ibatis.session.sqlSessionFactory;
import org.apache.ibatis.session.sqlSessionFactoryBuilder;
import javax.servlet.servletexception;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
sqlSession sqlSession = null;
try {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
Map<String, String[]> parameterMap = request.getParameterMap();
User user = new User();
BeanUtils.populate(user,parameterMap);
InputStream is = Resources.getResourceAsstream("mybatis-config.xml");
sqlSessionFactory sqlSessionFactory = new sqlSessionFactoryBuilder().build(is);
sqlSession = sqlSessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
User loginUser = userDao.select(user);
if(loginUser==null){
response.getWriter().print("登录失败!");
}else{
response.getWriter().print("登录成功!");
}
} catch (Exception e) {
e.printstacktrace();
response.getWriter().print("服务器异常!");
}finally {
if(sqlSession!=null){
sqlSession.close();
}
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
doPost(request, response);
}
}
小结
-
登录:根据用户名和密码去查询数据库 看是否存在一条用户记录
-
思路:
-
获取请求参数
-
根据用户名密码查询数据库
-
根据返回的user对象 user==null 表示登录失败 user!=null 表示登录成功
总结
1. request
-
概念:request用来封装请求信息
-
体系结构:HttpServletRequest-继承->ServletRequest
-
request对象来源:由服务器tomcat创建并传入Servlet
-
作用:操作请求信息、请求转发、作为域对象存储数据
-
操作请求行
request.getmethod();
request.getRequestURI();
request.getcontextpath();
-
操作请求头
request.getHeader("User-Agent");
request.getHeader("Referer");
-
操作请求体【获取请求参数】
request.getParameter("name属性值");
request.getParameterValues("name属性值");
request.getParameterMap();
request.setCharacterEncoding("UTF-8");
BeanUtils.populate(javabean名称,参数map集合);
-
请求转发
request.getRequestdispatcher("转发的地址").forward(request,response);
-
作为域对象存储数据
request.setAttribute(String key,Object value);
request.getAttribute(String key);
request.removeAttribute(String key);
2. response
-
response:封装响应信息
-
体系结构:HttpServletResponse-继承->ServletResponse
-
response来源:由服务器tomcat创建 并传入到Servlet中
-
作用:操作响应信息
-
操作响应行 setStatus(int statusCode);
-
操作响应头
response.setHeader("Refresh","5; url=http://www.baidu.com");
response.sendRedirect("重定向的地址");
response.setHeader("Content-disposition","attachment;filename="+filename);
response.setHeader("content-type",mimeType);
-
操作响应体
response.setContentType("text/html;charset=UTF-8");
response.getWriter.print("输出内容");
response.getoutputStream.write("输出内容");
相关文章
显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...