- 一,Request对象
- --1,概述
- --2,测试
- 二,练习Request解析请求参数
- --0,项目结构
- --1,创建HTML网页
- --2,创建Servlet程序
- 三,改造Servlet程序实现入库
- --1,导入jar包
- --2,修改Servlet程序
- --3,测试
- 四,请求转发
- --1,概述
- --2,测试
- 五,Response对象
- --1,概述
- --2,测试
1,用来接受请求,并且能够解析 请求参数.
GET方式: http://localhost:8080/user/userServlet?id=10&name=jack
POST方式: 数据不会在地址栏拼接的
2,常用的有两种:
ServletRequest 父接口
HttpServletRequest 子接口
package cn.tedu.cgb2110boot03.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;
import java.util.Arrays;
@WebServlet
public class RequestServlet01 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);//和doGet干一样的活
}
//http://localhost:8080/RequestServlet01?name=jack&pwd=123
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("恭喜您,请求成功~~");
// Servlet解析请求参数HttpServletRequest
//1.getParameter()--根据参数名获取参数值
String s = request.getParameter("name");
String p = request.getParameter("pwd");
System.out.println(s+p);
//2.getParameterValues()--根据参数名获取参数值,可以获取多个值,存入数组
String[] datas = request.getParameterValues("like");
System.out.println( Arrays.toString(datas) );//[足球, 篮球]
//3.HttpServletRequest的其他API
System.out.println( request.getCharacterEncoding() );//获取请求使用的字符集UTF-8
System.out.println( request.getMethod() );//获取请求方式GET
System.out.println( request.getContextPath() );//获取项目名称(被缺省)
System.out.println( request.getRequestURI() );//要访问的资源路径/RequestServlet01
System.out.println( request.getRequestURL() );//包含着http://localhost:8080/RequestServlet01
System.out.println( request.getRemotePort() );//发起请求时的端口号
System.out.println( request.getQueryString() );//获取请求时携带的参数
}
}
二,练习Request解析请求参数
–0,项目结构
–1,创建HTML网页
测试 Servlet解析请求参数 1.以get方式提交的数据
2.以post方式提交的数据
–2,创建Servlet程序package cn.tedu.cgb2110boot03.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("/user/addServlet")
public class RequestServlet02 extends HttpServlet {
//处理那些post请求
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("恭喜您,成功的提交了用户的数据!");
//TODO 解析请求参数
//TODO jdbc入库
}
//处理那些get请求
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("恭喜您,成功的提交了部门的数据!");
//TODO 解析请求参数
//TODO jdbc入库
}
}
三,改造Servlet程序实现入库
–1,导入jar包
–2,修改Servlet程序4.0.0 cn.tedu cgb2110boot03 0.0.1-SNAPSHOT cgb2110boot03 Demo project for Spring Boot 1.8 UTF-8 UTF-8 2.3.7.RELEASE mysql mysql-connector-java 5.1.48 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine org.springframework.boot spring-boot-dependencies ${spring-boot.version} pom import org.apache.maven.plugins maven-compiler-plugin 3.8.1 1.8 1.8 UTF-8 org.springframework.boot spring-boot-maven-plugin 2.3.7.RELEASE cn.tedu.cgb2110boot03.Cgb2110boot03Application repackage repackage
package cn.tedu.cgb2110boot03.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;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@WebServlet("/user/addServlet")
public class RequestServlet02 extends HttpServlet {
//处理那些post请求
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("恭喜您,成功的提交了用户的数据!");
//TODO 解析请求参数
String user = request.getParameter("user");
String pwd = request.getParameter("pwd");
String age = request.getParameter("age");
System.out.println(user+pwd+age);
//TODO jdbc入库
try {
//1,导入jar包(在pom.xml里添加jar包的坐标依赖)
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
String url="jdbc:mysql:///cgb211001?characterEncoding=utf8";
Connection c = DriverManager.getConnection(url, "root", "root");
//获取传输器
String sql = "insert into user values(null,?,?,?)" ;//sql骨架
PreparedStatement ps = c.prepareStatement(sql);
ps.setObject(1,user);
ps.setObject(2,pwd);
ps.setObject(3,age);
//执行SQL
ps.executeUpdate();//执行增删改的SQL
//释放资源
ps.close();
c.close();
System.out.println("恭喜您,用户信息已经入库成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
//处理那些get请求
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("恭喜您,成功的提交了部门的数据!");
//TODO 解析请求参数(部门编号,名称,地址)
String deptno = request.getParameter("deptno");
String deptname = request.getParameter("deptname");
String deptloc = request.getParameter("deptloc");
//TODO jdbc入库
try {
//1,导入jar包(在pom.xml里添加jar包的坐标依赖)
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
String url="jdbc:mysql:///cgb211001?characterEncoding=utf8";
Connection c = DriverManager.getConnection(url, "root", "root");
//获取传输器
String sql = "insert into dept values(?,?,?)" ;//sql骨架
PreparedStatement ps = c.prepareStatement(sql);
ps.setObject(1,deptno);
ps.setObject(2,deptname);
ps.setObject(3,deptloc);
//执行SQL
ps.executeUpdate();
//释放资源
ps.close();
c.close();
System.out.println("恭喜您,部门信息已经入库成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
–3,测试
四,请求转发
–1,概述
是服务器内部的过程,客户端感受不到.
过程: 浏览器 -> A----B
特点: 一次请求一次响应. 地址栏不会改变. 全程使用同一个Request对象.
实现: request.getRequestDispatcher(“B的访问规则”).forward(request,response);
ServletA
package cn.tedu.cgb2110boot03.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("/testa")
public class ServletA extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("ServletA...doGet()被触发!");
//请求转发: 实现 访问A时,A背后调用B 的效果
//特点: 地址栏不变 + 同一个request对象(在A里存,在B里取)
request.setAttribute("name","jack");
//参数是 目标资源的访问规则.目标资源必须是在同一个项目里才能请求转发
request.getRequestDispatcher("/testb").forward(request,response);
}
}
ServletB
package cn.tedu.cgb2110boot03.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("/testb")
public class ServletB extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("ServletB...doGet()被触发!");
//获取A中存好的数据
Object o = request.getAttribute("name");
System.out.println(o);//jack
}
}
五,Response对象
–1,概述
专门用来给浏览器做出响应.
本质上就是获取一个输出流,利用输出流写出数据
常用对象:
ServletResponse – 父接口
HttpServletResponse – 子接口
常用方法:
1, getWriter() – 获取字符流(只能写出字符数据)
2, getOutputStream() – 获取字节流(写出任意格式的数据)
3, setContentType() – 写出数据中,如果包含中文,解决中文乱码
4, sendRedirect() – 完成重定向
package cn.tedu.cgb2110boot03.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;
import java.io.PrintWriter;
//Servlet充当服务器:接受请求Request + 做出响应Response
// http://localhost:8080/resp/servlet01?id=10&name=张三
@WebServlet("/resp/servlet01")
public class ResponseServlet01 extends HttpServlet {
//如果是get请求,Servlet会自动调用doGet()
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//TODO 解析请求参数
String id = request.getParameter("id");
String name = request.getParameter("name");
//响应时使用的默认的字符集iso-8859-1,为了防止响应时的中文乱码问题,加以下代码
response.setContentType("text/html;charset=utf8");
//响应解析到的数据
PrintWriter out = response.getWriter();
out.println(id);//提供了一个换行写出的功能
out.write(name);
}
}



