本篇将会记录,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. 30秒修复Ubuntu菱形乱码问题

    将语言改为英文,我是按照第三种方式进行的,成功.参考博客: http://blog.sina.com.cn/s/blog_a126a955010180b8.html

  2. ArcGIS Engine中的数据访问

    ArcGIS Engine中的数据访问 数据是GIS的基础, 访问数据也是进行任何复杂的空间分析及空间可视化表达的前提.ArcGIS支持的数据格式比较丰富,对不同的数据格式支持的程度也有很大差异.本文 ...

  3. orcale 动态执行语句

    create or replace function fn_test2(tablename in varchar2) return number is rtn number; begin --通用的获 ...

  4. CentOS安装开发组相关的包

    yum groupinstall "Development Tools"   yum groupremove "Development Tools"

  5. unity3d插件Daikon Forge GUI 中文教程1-Daikon Forge介绍

    DF-GUI特点: ·        深编辑器集成:DF-GUI提供广泛的整合与Unity3D编辑环境,包括自定义检查人员对每个组件向导来简化复杂的多步任务,提高生产力的上下文菜单,编辑控件在一个所见 ...

  6. 理解group by 语句的扩展使用

    在SQL的开发中我们会经常使用group by语句对数据进行分组统计,然而在一些复杂的BI报表开发中会常遇到更复杂的分组需求,单单使用group by 就不能解决我们的问题了,这时我们就需要学习了解一 ...

  7. Ubuntu 12.04 系统安装极点五笔输入法

    习惯用五笔了,在Ubuntu下安装了下五笔: 下面就实际操作,安装极点五笔输入法! 在终端中执行如下命令: sudo wget http://www.xiit.cn/wp-content/upload ...

  8. 数组遍历map和each使用

    <body> <input type="/> <input type="/> <input type="/> </b ...

  9. stdout( 标准输出流)和 stderr( 标准输入流) 重定向问题

    我想把提示信息和错误信息列表都写入到同一个文件里, /* ** 设置流, 使输出与错误流都指向指定的文件 */ if( (output1 = freopen( PATH, "a", ...

  10. NYOJ背包问题

    #include <stdio.h> struct group{ int value; int weight; }; void Sort(group bag[],int num) { in ...