本篇将会记录,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. NOIp 2013 #3 转圈游戏 Label:模拟

    题目描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此 ...

  2. Linux远程传输命令之scp使用方法

      首先用pwd命令确定文件全路径   1.获取远程服务器上的文件 cykdeMacBook-Pro:~ cyk$ scp cyk@10.211.55.5:/home/cyk/Desktop/hi.t ...

  3. Windows Phone 8 MVVM

    Why? 1 reason MVVM works really well with XAML based applications is because of the powerful XAML bi ...

  4. Bone Collector(01背包)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87125#problem/N 题目: Description Many year ...

  5. 让Xcode的 stack trace信息可读

    让Xcode的 stack trace信息可读 昨天在写 iOS 代码的时候,调试的时候模拟器崩溃了.异常停在了如下整个 main 函数的入口处: int main(int argc, char *a ...

  6. uploadify 自动访问url 初始化 自动请求

    摘要: uploadify 自动请求url, 初始化时自动请求url解决方法. 项目中使用了uploadify 上传图片,当访问到上传页面url,uploadify初始化时再一次访问该url 当我在配 ...

  7. Hibernate笔试总结

    1.在Hibernate中,以下关于主键生成器说法错误的是(AC). A.increment可以用于类型为long.short或byte的主键. B.identity用于如SQL Server.DB2 ...

  8. liunx系统计划任务管理(at/crond调度)

    一.at命令 at命令格式at HH:MM YYYY-MM-DD 其中 HH(小时):MM(分钟) YYYY(年)-MM(月份)-DD(日) 启动atd进程 /etc/init.d/atd start ...

  9. javascript阻止事件冒泡的兼容写法及其相关示例

    //阻止事件冒泡的兼容写法 function stopBubble(e){ //如果提供了事件对象,则是一个非IE浏览器 if(e && e.stopPropagation) //因此 ...

  10. Lua修改文件名

    local lfs = require "lfs"local curPath = "..\\new\\"local  totalFile = 0 local s ...