HttpServletRequest --- request(请求)
所有的 和请求相关的操作,都用这对象来处理
当有请求来的时候 , request就被实例化
HttpServletResponse --- response(响应)
所有和响应相关的操作,都用这个对象来处理
当有请求来的时候 , response 就被实例化
当你想要给出响应就使用 response ,, 我们给出的响应,必须要展示在客户端(浏览器)
init方法什么时候执行?
* 默认当我们第一次访问servlet的时候被调用,延迟加载。
* 初始化方法只执行一次。
public class HelloServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println(\"servlet初始化\");
System.out.println(config.getInitParameter(\"username\"));
System.out.println(config.getInitParameter(\"password\"));
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接收参数 ,处理请求
request.getParameter(\"username\");
request.getParameter(\"password\");
// 给出响应
// 客户端和服务器端的信息传递
// 设置响应的字符集 一定要放在获取流之前
// 服务器处理字符串按照UTF-8处理
response.setCharacterEncoding(\"utf-8\");
// 添加响应头,告诉浏览器以HTML的格式来解析响应字符串
response.addHeader(\"content-type\",\"text/html;charset=utf-8\");
//Io流
PrintWriter writer = response.getWriter();
//向客户端回复数据
writer.write(\"我是后台返回的数据\");
// * writer.write---写字符。
// * writer.print---写字节。
//流的操作
writer.flush();
writer.close();
}
}
System.out.println(\"请求的方法:\" + request.getMethod());
System.out.println(\"请求的根路径:\" + request.getContextPath());
System.out.println(\"请求的URI:\" + request.getRequestURI());
System.out.println(\"请求的URL:\" + request.getRequestURL());
System.out.println(\"请求的servletPath:\" + request.getServletPath());
@WebServlet(\"/demo.do\")
public class Demo01Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 根据key获取对应的value
request.getParameter(\"\");
// 获取一个key对应的多个值,返回值为String类型的数组 例如:复选框
String[] hobbies = request.getParameterValues(\"hobby\");
// System.out.println(Arrays.toString(hobbies));
// 获取请求中传过来的参数的key值,根据key值获取对应的value值
Enumeration<String> parameterNames = request.getParameterNames();
while(parameterNames.hasMoreElements()){
System.out.println(parameterNames.nextElement());
}
// 可以获取到请求中的所有的键值对,返回值是一个map集合
// 这个map集合的key是String,value是String[]
// username=admin,password=123456,hobby=a,b,c,gender=man
Map<String, String[]> map = request.getParameterMap();
for (Map.Entry<String, String[]> name : map.entrySet()) {
String key = name.getKey();
String[] value = name.getValue();
System.out.println(key + \"--->\" + Arrays.toString(value));
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
转发 request.getRequestDispatcher(\"demo03.do\").forward(request,response);
@WebServlet(\"/demo02.do\")
public class Demo02Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 请求转发---由多个servlet来处理同一个请求
*
* 请求转发是在服务器上完成的,跟客户端是否无关!!!
*
*
*/
String name = request.getParameter(\"name\");
System.out.println(\"Demo02Servlet,name:\" + name);
// getRequestDispatcher参数:转发的servlet的地址
// forward参数:request,response,把当前servlet用的request和response传给下一个
request.getRequestDispatcher(\"demo03.do\").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
@WebServlet(\"/demo04.do\")
public class Demo04Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 作用域:起作用的区域
*
* 往request作用域中添加了一个属性name,值是zhangsan
*
* 请求转发的时候是同一个request
*
*/
request.setAttribute(\"name\",\"zhangsan\");
// name怎么取出来?
System.out.println(\"demo04.do---name:\" + request.getAttribute(\"name\"));
request.getRequestDispatcher(\"demo05.do\").forward(request,response);
// 根据指定的key,删除对应的value
// request.removeAttribute(\"name\");
// 获取request作用域中的所有的key
// Enumeration<String> attributeNames = request.getAttributeNames();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
request.getRequestDispatcher(\"demo03.do\").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
重定向 response.sendRedirect(\"success.html\");
@WebServlet(\"/demo06.do\")
public class Demo06Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter()
response.setCharacterEncoding(\"utf-8\");
response.addHeader(\"content-type\",\"text/html;charset=utf-8\");
response.sendRedirect(\"success.html\");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
请求转发和重定向的区别:
1.重定向是两次请求,请求转发是一个请求
2.重定向是客户端行为,请求转发是服务器行为
3.重定向浏览器地址会发生改变,转发不会
最常见的客户端传参的方式两种,get,post
* 浏览器地址栏直接输入:一定是get请求
* 超级链接:一定是get请求
* 表单:可以是get,也可以是post,取决于method
*
* GET请求和POST请求的区别:
* GET:请求的参数会在浏览器的地址栏中显示,不安全;请求的长度限制在1K之内。
* 没有请求体,无法通过request去设置一些参数。
* POST:请求的参数不会在浏览器的地址栏中显示,相对安全。
* 把请求的参数封装成几个数据报文(请求体)。请求参数的长度没有限制。
本文来自博客园,作者:阿萨德菩提子,转载请注明原文链接:https://www.cnblogs.com/ychptz/p/16640749.html
来源:https://www.cnblogs.com/ychptz/p/16640749.html
本站部分图文来源于网络,如有侵权请联系删除。