Jsp第三课 Servlet常用对象
Posted 笔触狂放
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jsp第三课 Servlet常用对象相关的知识,希望对你有一定的参考价值。
在Servlet技术的学习过程中,需要用到很多的常用对象,而且其用法也非常重要,这里介绍第二个常用对象,HttpServletRequest
概念
request对象是用于接收浏览器发送过来的请求数据。
常用获得浏览器请求的方法
代码如下:
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获得浏览器的请求,得到请求信息
//得到请求的URL地址
String a=request.getRequestURL().toString();
System.out.println(a);
//得到请求的数据
String b=request.getRequestURI();
System.out.println(b);
//得到请求的URL地址中附带的参数
String c=request.getQueryString();
System.out.println(c);
//得到来访者的IP地址
String d=request.getRemoteAddr();
System.out.println(d);
//来访者的主机名
String e=request.getRemoteHost();
System.out.println(e);
//来访者的端口号
int f=request.getRemotePort();
System.out.println(f);
//得到请求URL地址时使用的方法(重要)
String h=request.getMethod();
System.out.println(h);
//获取WEB服务器的IP地址
String l=request.getLocalAddr();
System.out.println(l);
//获取WEB服务器的主机名
String n=request.getLocalName();
System.out.println(n);
//获取WEB服务器的端口号
int m=request.getLocalPort();
System.out.println(m);
}
将项目运行在tomcat服务器上,然后通过浏览器地址去访问服务器:
查看到控制台输出的信息如下:
当浏览器携带数据访问服务器的时候,我们观察一下效果:
常用获得浏览器发送的数据信息的方法
代码如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获得浏览器发送过来的姓名和年龄的数据
String a=request.getParameter("name");
String b=request.getParameter("age");
String c=request.getParameter("phone");
System.out.println("获得浏览器发送给Servlet的数据为:"+a+"--"+b+"--"+c);
//当浏览器发送的数据是同一个名称多个不同的数据
//servlet需要使用以下这个方法去接收这种数据
String[] ss=request.getParameterValues("hobby");
System.out.println(Arrays.toString(ss));
//tomcat服务器的编码格式是:ISO-8859-1
//注意:servlet获得浏览器表单发送的数据时,
//获得的名称一定要和表单上文本框定义的name属性中的名称保持一致
//当浏览器发送大量数据给servlet的时候
//如果使用getParameter一个个获得,效率太慢
//使用以下方法可以节省代码,加快开发速度
Enumeration<String> e= request.getParameterNames();
while (e.hasMoreElements()) {
//循环获得的是浏览器发给servlet的数据的名称
String name=e.nextElement();
if (name.equals("hobby")) {
String[] str=request.getParameterValues(name);
System.out.println(name+":"+Arrays.toString(str));
}else {
String value=request.getParameter(name);
System.out.println(name+":"+value);
}
}
//使用Map集合获得浏览器发送的所有数据
Map<String,String[]> map=request.getParameterMap();
for (Entry<String, String[]> entry : map.entrySet()) {
String name=entry.getKey();
String[] values=entry.getValue();
System.out.println(name+"%"+Arrays.toString(values));
}
}
创建一个jsp页面,编辑一个表单,供用户填写提交的信息:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<!-- 创建表单 -->
<form action="Servlet2" method="get">
姓名:<input type="text" name="name" ><br>
年龄:<input type="text" name="age" ><br>
手机号:<input type="text" name="phone" ><br>
兴趣爱好:<input type="checkbox" name="hobby" value="看书">看书
<input type="checkbox" name="hobby" value="打游戏">打游戏
<input type="checkbox" name="hobby" value="看小学妹">看小学妹
<br>
<input type="submit" value="提交">
</form>
</body>
</html>
当用户填写完信息,点击提交的时候,将数据发送给指定的虚拟地址为Servlet2的Servlet。
通过控制台可以看到,四种方式都能获得浏览器发送的数据信息。
代码自行编写后,运行查看效果,请初学者仔细梳理知识点的获得,以及数据传输的流程。
请求转发
那么这篇文章讲解另一种跳转多个Servlet的方式。
什么是请求转发?
指一个servlet收到浏览器请求后,通知tomcat服务器去调用另外一个servlet进行处理
注意:
当浏览器使用get请求访问ServletA的时候,ServletA会对应doGet方法接收浏览器的请求,
然后由于ServletA将该请求转发给ServletB,在转发的过程中请求没有发生变化,还是get请求,
ServletB还是使用doGet方法接收.同理,post也是一样的流程.
代码如下:
package com.servlet;
import java.io.IOException;
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 Servlet3
*/
@WebServlet("/Servlet3")
public class Servlet3 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Servlet3() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//当浏览器访问Servlet3的时候,Servlet3自己跳转到Servlet4,
//由Servlet4回复消息给浏览器
request.setAttribute("apple", "苹果");
request.getRequestDispatcher("Servlet4")
.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
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 Servlet4
*/
@WebServlet("/Servlet4")
public class Servlet4 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Servlet4() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter pw=response.getWriter();
String a=(String) request.getAttribute("apple");
pw.print("收到Servlet3的请求,回复消息给浏览器,任务已完成,获得Servlet3携带的数据为:"+a);
}
/**
* @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);
}
}
访问流程图如下:
整个的访问流程称为一次请求,Servlet3跳转至Servlet4的方式称为请求转发
重定向与请求转发的区别:
共同点:
都是用于Servlet之间的跳转
区别:
重定向属于浏览器跳转,请求转发属于服务器跳转
重定向浏览器的访问地址会发生变化,请求转发浏览器地址是不会发生改变
重定向跳转Servlet是不能携带数据跳转,请求转发跳转Servlet是可以携带数据跳转
response对象中在跳转页面的时候是不能存储数据做跳转
request对象在跳转页面 到时候是可以存储数据,带上数据跳转页面
总结:
一般不需要将一个Servlet的数据发给另一个Servlet的时候,使用重定向跳转页面
需要发送数据的时候,使用请求转发跳转页面
重定向和请求转发的区别
1.请求转发是在服务器完成的,重定向是在客户端完成的
2.请求转发的速度快,重定向速度慢
3.请求转发的是同一次请求,重定向是二次不同的请求
4.请求转发地址栏没有变化,重定向地址栏有变化
5.转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成的
以上是关于Jsp第三课 Servlet常用对象的主要内容,如果未能解决你的问题,请参考以下文章