Java Servlet(四):Servlet接口service工作(ServletRequest,ServletResponse对象)(jdk7+tomcat7+eclipse)
2016-02-28 17:32
423 查看
本篇将会记录,Servlet接收客户端传递来的参数信息,并返回信息使用的对象,及这些对象的函数相关用法。
还是在java ee工程中进行操作,在WebContent目录下创建一个login.jsp文件,并修改文件内容为:
在src目录下创建一个LoginServlet类,并实现Servlet接口及实现其接口函数:
修改web.xml注册LoginServlet servlet:
运行tomcat服务,在浏览器中输入http://localhost:8080/MyServlet001/login.jsp,填写表单信息提交,查看到console输出信息:
代码示例已经完成,接下来进行分析service接收参数的原理及相关对象:
如何在Servlet中获取请求信息?
1、Servlet中的service()方法用于应答请求,每次请求都会调用service()方法。(service方法是服务器调用的)
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {。。。}
ServletRequest :封装了请求信息,可以从中获取到任何的请求信息;
ServletResponse :封装了响应信息,可以使用该接口的方法实现用户响应的信息。
这两个(ServletRequest 和ServletResponse )接口的实现都是服务器实现的,并在服务器调用service()方法时传入。
可以通过以下操作去查证下:
而这个服务器可能是tomcat,也可能是其他servlet容器。
2、ServletRequest相关函数:
ServletRequest的getParameter(String argo)
ServletRequest的getParameterNames()
ServletRequest的getParameterValues(String argo)
ServletRequest的getParameterMap()
HttpServletRequest强制转化为 HttpServletRequest
HttpServletRequest 获取request URI
HttpServletRequest获取request Method
HttpServletRequest获取资源文件在服务器上的物理路径
HttpServletRequest获取请求过程中,通过uri传递的参数
HttpServletRequest获取servlet配置路径
HttpServletRequest获取servlet服務名稱。
3.ServletResponse对象
封装了响应信息,如果需要给用户什么响应,具体可以使用该接口的方法实现。
getWriter()方法:
可以返回一个PrintWriter对象,调用该对象的print()方法,将把print()中的参数直接打印到客户端浏览器上。
setContentType(string arg0):
设置相应内容类型:
内容类型可以参考:/tomcat/config/web.xml中设置信息。
可以通过response对象强制转化为:HttpServletResponse对象。
该对象比ServletResponse接口内容更多。
还是在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接口内容更多。
相关文章推荐
- maven tomcat插件启动原生Servlet的web程序
- tomcat添加外部项目
- tomcat添加外部项目
- java环境--JDK和Tomcat在linux上的安装和配置
- Nginx + Tomcat 动静分离实现负载均衡
- tomcat一直处于deploying状态。
- Tomcat+Spring web不能引入jquery
- tomcat和java环境配置
- 常用的tomcat和webLogic的区别
- Tomcat 9 + Mysql 5.6 配置 JNDI 数据源
- Tomcat的安装配置
- Java Servlet(二):servlet配置及生命周期相关(jdk7+tomcat7+eclipse)
- Eclipse 无法启动Tomcat原因总结
- tomcat 下部署 php
- tomcat端口被占用问题解决
- Java Servlet(一):创建工程(jdk7+tomcat7+eclipse)
- linux安装tomcat
- Apache和tomcat多项目整合发布
- Apache与Tomcat有什么关系和区别
- struts2异常couldn't clear tomcat cache ,There is no Action mapped for namespace [/] and action name [