本篇将会记录,Servlet接收客户端传递来的参数信息,并返回信息使用的对象,及这些对象的函数相关用法。

还是在java ee工程中进行操作,在WebContent目录下创建一个login.jsp文件,并修改文件内容为:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form id="form1" method="POST" action="LoginServlet">
用户名称:<input id="username" name="username" type="text" />
用户 密码:<input id="password" name="password" type="password" />
<br/>
<input name="checkBox" type="checkbox" value="000"/>000
<br/>
<input name="checkBox" type="checkbox" value="001"/>001
<br/>
<input name="checkBox" type="checkbox" value="002"/>002
<br/>
<input name="checkBox" type="checkbox" value="003"/>003
<br/>
<input type="submit" name="submit" value="submit"/>
</form>
</body>
</html>

在src目录下创建一个LoginServlet类,并实现Servlet接口及实现其接口函数:

 package com.dx.hello;

 import java.io.IOException;
import java.util.*; import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest; public class LoginServlet implements Servlet { public LoginServlet() {
// TODO Auto-generated constructor stub
} @Override
public void destroy() {
// TODO Auto-generated method stub } @Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
} @Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
} @Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub } @Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
System.out.println("LoginService's service ... ");
// ServletRequest的getParameter(String argo)
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username:" + username);
System.out.println("password:" + password); // ServletRequest的getParameterNames()
Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
System.out.println("--->" + name);
String value = request.getParameter(name);
System.out.println("--->" + value);
} // ServletRequest的getParameterValues(String argo)
String[] checkboxs = request.getParameterValues("checkBox");
for (String value : checkboxs) {
System.out.println("key:checkBox,value:" + value);
} // ServletRequest的getParameterMap()
Map<String, String[]> map = request.getParameterMap();
for (Map.Entry<String, String[]> item : map.entrySet()) {
System.out
.println("getParameterMap()---->key:" + item.getKey() + ",value:" + Arrays.asList(item.getValue()));
} // 强制转化为 HttpServletRequest
HttpServletRequest httpRequest = (HttpServletRequest) request; // 获取request URI
String requestURI = httpRequest.getRequestURI();
System.out.println("HttpServletRequest的getRequestURI():"+requestURI); // 获取request Method
String method = httpRequest.getMethod();
System.out.println("HttpServletRequest的getMethod():"+method); // 获取资源文件在服务器上的物理路径
String relaPath = httpRequest.getRealPath("/WEB-INF/classes/jdbc.properties");
System.out.println("HttpServletRequest的getRealPath():"+relaPath); // 获取请求过程中,通过uri传递的参数
String queryString = httpRequest.getQueryString();
System.out.println("HttpServletRequest的getQueryString():"+queryString); // 获取servlet配置路径
String servletPath = httpRequest.getServletPath();
System.out.println("HttpServletRequest的getServletPath():"+servletPath); // 获取servlet服務名稱。
String servletName = httpRequest.getServerName();
System.out.println("HttpServletRequest的getServerName():"+servletName); } }

修改web.xml注册LoginServlet servlet:

     <servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.dx.hello.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>

运行tomcat服务,在浏览器中输入http://localhost:8080/MyServlet001/login.jsp,填写表单信息提交,查看到console输出信息:

LoginService's service ...
username:111
password:2222
--->username
--->111
--->password
--->2222
--->checkBox
--->001
--->submit
--->submit
key:checkBox,value:001
key:checkBox,value:002
getParameterMap()---->key:username,value:[111]
getParameterMap()---->key:password,value:[2222]
getParameterMap()---->key:checkBox,value:[001, 002]
getParameterMap()---->key:submit,value:[submit]
HttpServletRequest的getRequestURI():/MyServlet001/LoginServlet
HttpServletRequest的getMethod():POST
HttpServletRequest的getRealPath():D:\java\workset\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\MyServlet001\WEB-INF\classes\jdbc.properties
HttpServletRequest的getQueryString():null
HttpServletRequest的getServletPath():/LoginServlet
HttpServletRequest的getServerName():localhost

代码示例已经完成,接下来进行分析service接收参数的原理及相关对象:

如何在Servlet中获取请求信息?

1、Servlet中的service()方法用于应答请求,每次请求都会调用service()方法。(service方法是服务器调用的)

@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {。。。}

ServletRequest :封装了请求信息,可以从中获取到任何的请求信息;

ServletResponse :封装了响应信息,可以使用该接口的方法实现用户响应的信息。

这两个(ServletRequest 和ServletResponse )接口的实现都是服务器实现的,并在服务器调用service()方法时传入。

可以通过以下操作去查证下:

 System.out.println(request);
//执行上边语句将会输出如下信息:
//org.apache.catalina.connector.RequestFacade@d952d1

而这个服务器可能是tomcat,也可能是其他servlet容器。

2、ServletRequest相关函数:

  • ServletRequest的getParameter(String argo)
 String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username:" + username);
System.out.println("password:" + password);
  • ServletRequest的getParameterNames()
 Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
  String name = names.nextElement();
  System.out.println("--->" + name);
  String value = request.getParameter(name);
  System.out.println("--->" + value);
}
  • ServletRequest的getParameterValues(String argo)
 String[] checkboxs = request.getParameterValues("checkBox");
for (String value : checkboxs) {
System.out.println("key:checkBox,value:" + value);
}
  • ServletRequest的getParameterMap()
 Map<String, String[]> map = request.getParameterMap();
for (Map.Entry<String, String[]> item : map.entrySet()) {
System.out
.println("getParameterMap()---->key:" + item.getKey() + ",value:" + Arrays.asList(item.getValue()));
}
  • HttpServletRequest强制转化为 HttpServletRequest
 HttpServletRequest httpRequest = (HttpServletRequest) request;
  • HttpServletRequest 获取request URI
 String requestURI = httpRequest.getRequestURI();
System.out.println("HttpServletRequest的getRequestURI():"+requestURI);
  • HttpServletRequest获取request Method
 String method = httpRequest.getMethod();
System.out.println("HttpServletRequest的getMethod():"+method);
  • HttpServletRequest获取资源文件在服务器上的物理路径
 String relaPath = httpRequest.getRealPath("/WEB-INF/classes/jdbc.properties");
System.out.println("HttpServletRequest的getRealPath():"+relaPath);
  • HttpServletRequest获取请求过程中,通过uri传递的参数
 String queryString = httpRequest.getQueryString();
System.out.println("HttpServletRequest的getQueryString():"+queryString);
  • HttpServletRequest获取servlet配置路径
 String servletPath = httpRequest.getServletPath();
System.out.println("HttpServletRequest的getServletPath():"+servletPath);
  • HttpServletRequest获取servlet服務名稱。
String servletName = httpRequest.getServerName();
System.out.println("HttpServletRequest的getServerName():"+servletName);

3.ServletResponse对象

封装了响应信息,如果需要给用户什么响应,具体可以使用该接口的方法实现。

  • getWriter()方法:

可以返回一个PrintWriter对象,调用该对象的print()方法,将把print()中的参数直接打印到客户端浏览器上。

         // 返回PrintWriter对象,如果想给用户什么响应,具体可以使用该接口的方法实现。
PrintWriter out = response.getWriter();
out.println("hello");

setContentType(string arg0):

设置相应内容类型:

        // 设置相应的内容类型
response.setContentType("miscrosoft/word");

内容类型可以参考:/tomcat/config/web.xml中设置信息。

可以通过response对象强制转化为:HttpServletResponse对象。

该对象比ServletResponse接口内容更多。

Java Servlet(四):Servlet接口service工作(ServletRequest,ServletResponse对象)(jdk7+tomcat7+eclipse)的更多相关文章

  1. Java Servlet(一):创建工程(jdk7+tomcat7+eclipse)

    本篇文件主要记录下怎么在jdk7+tomcat7下,使用eclipse创建并运行一个servlet工程. 安装具体步骤从网上搜索就可以找到,这里不再赘述. 在eclipse中切换到j2ee下, 从导航 ...

  2. Java Servlet(二):servlet配置及生命周期相关(jdk7+tomcat7+eclipse)

    该篇文章记录了Servlet配置相关用法及Servlet在Servlet容器中生命周期方法. Tomcat是一个Servlet容器: 1.Servlet容器管理了Servlet的整个生命周期,并调用s ...

  3. java 多线程:Callable接口;FutureTask类实现对象【Thread、Runnable、Callable三种方式实现多线程的区别】

    Callable接口介绍: Java5开始,Java提供了Callable接口,像是Runnable接口的增强版,Callable接口提供了一个 call()方法可以作为线执行体. call()方法比 ...

  4. Java Servlet(五):GenericServlet与Servlet、HttpServlet之间的关系(jdk7+tomcat7+eclipse)

    本篇主要记录下,对GenericServlet的作用理解,及其与Servlet/HttpServlet之间的关系. 示例完成业务: 1.新建一个login.jsp页面,要求改页面能输入username ...

  5. Java Servlet(六):HttpServlet实现原理(jdk7+tomcat7+eclipse)

    本篇记录了HttpServlet的实现过程,主要讲述了如何依赖Servlet,GenericServlet实现的原理. HttpServlet实现过程:1.是一个Servlet,继承自GenericS ...

  6. Java Servlet(七):JavaWeb MVC 操作(jdk7+tomcat7+eclipse)

    之前一段时间一直忙于毕业设计,也没有空学习了,本篇继续学习. 本篇将开始学习java web下使用servlet下来操作数据库,并展示到界面上的使用方法. 新建工程ServletMvc001. 目录结 ...

  7. java第四章接口

    接口(interface) 语法:修饰符 interface 接口名 extends 父接口1,父接口2....{ //常量定义   //方法定义} class 类名 extends 父类名 impl ...

  8. 【Servlet】Servlet应用的get、post访问及和JSP的配合使用

    Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面. 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用 ...

  9. java基础(十三)之接口

    接口 什么是接口? 生活中也有很多的接口,比如USB接口.定义了接口就是定义了调用对象的标准. 接口基本语法 1.使用interface定义:2.接口当中的方法都是抽象方法:因为抽象函数不能生成对象, ...

随机推荐

  1. Linq to DataTable 左连接

    所先创建2个DataTable并对其赋值,来进行模拟. DataTable dt1 = new DataTable(); dt1.Columns.Add("ID", typeof( ...

  2. 匈牙利 算法&模板

    匈牙利 算法 一. 算法简介 匈牙利算法是由匈牙利数学家Edmonds于1965年提出.该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法. 二分图的定义: 设G=(V,E)是一个 ...

  3. 【BZOJ2190】【SDOI2008】仪仗队

    Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是 ...

  4. 基于MINA构建简单高性能的NIO应用

    mina是非常好的C/S架构的java服务器,这里转了一篇关于它的使用感受. 前言MINA是Trustin Lee最新制作的Java通讯框架.通讯框架的主要作用是封装底层IO操作,提供高级的操作API ...

  5. 人工智能 --test

    http://zhidao.baidu.com/link?url=9qp_SbSRfzMezkD25FZiWyNDsMxgcK6lecYYt0SW1ESsqkRaV5LYQ-0ysk3F2e35ajA ...

  6. PS中常用快捷键

    Prtsc:印屏幕 Tab:隐藏工具栏 F:图片在编辑区的显示模式 F8:显示选中框区域的信息 Ctrl+N:新建画布 Ctrl+'+':放大 Ctrl+'-':缩小 工具栏三角形+鼠标:拖拽(只移动 ...

  7. 获取IP(windows和linux)

    #ifdef _WIN32 #include <winsock2.h> #include <Ws2tcpip.h> #pragma comment(lib,"ws2_ ...

  8. [LintCode] Intersection of Two Arrays II 两个数组相交之二

    Given two arrays, write a function to compute their intersection.Notice Each element in the result s ...

  9. Point Grey FlyCapture 实例汇总

    Example Language Description AsyncTriggerEx C++ Demonstrates some of the basic asynchronous trigger ...

  10. Js中this用法及注意点详解

          我们在写js时,特别是用到回调函数时,经常会发现this指代的对象总是可能脱离自己的思路而发生改变.面向对象语言的特性告诉我们this始终指代它的调用者,而在js中回调函数中内部的this ...