Servlet中的service方法

  Servlet中的service方法用于应答浏览器请求,每次请求都会调用该方法。

	@Override
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
        }

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

ServletResponse:封装了响应信息,用于响应用户请求。

这两个接口都是服务器给予实现的,并在服务器调用service方法时传入。

1.ServletRequest:

  1.1  获取请求参数:

       1.1.1  String getParameter(String name); 根据名字获取值

html:

<!DOCTYPE html>
<html>
  <head>
    <title>login.html</title>
	
    <meta name="keywords" content="keyword1,keyword2,keyword3">
    <meta name="description" content="this is my page">
    <meta name="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
  
  <body>
    <form name="f1" id="f1" action="login" method="post">
      <table>
        <tr>
          <td>Login:</td>
          <td><input type="text" name="login" id="login"></td>
        </tr>
        <tr>
          <td>Password:</td>
          <td><input type="password" name="password" id="password"></td>
        </tr> 
        <tr>
          <td colspan="2"><input type="submit"></td>
        </tr>
      </table>
    </form>
  </body>
</html>
xml:

  <!-- 配置和映射servlet -->
  <servlet>
  <!-- servlet注册的名字 -->
    <servlet-name>loginServlet</servlet-name>
    <!-- servlet的全类名-->
    <servlet-class>com.sa.servlet.LoginServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  <!-- 需要和某一个servlet节点的servlet子节点的文本节点一致 -->
    <servlet-name>loginServlet</servlet-name>
    <!-- 映射具体 的访问路径: /  代表当前web应用的根目录 -->
    <url-pattern>/login</url-pattern>
  </servlet-mapping> 
LoginServlet:

	@Override
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
        String login=request.getParameter("login");
        String password=request.getParameter("password");
        System.out.println("login:"+login);
        System.out.println("password:"+password);

	}
	
输出结果:

login:admin
password:123

       1.1.2  Map<String, String>  getParameterMap();返回请求参数的键值对。

                key:参数名,value:参数值,String[] 类型

	@Override
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		Map<String, String[]> map=request.getParameterMap();
		for (String key : map.keySet()) {
			   System.out.println("key= "+ key + " and value= " + Arrays.toString(map.get(key)));
			  }

	}
	
输出结果:

key= login and value= [admin]
key= password and value= [123]
key= interesting and value= [Party, Shopping]

       1.1.3  Enumeration<String>  getParameterNames();返回参数名对应的Enumeration对象。

	@Override
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		//Map<String, String> request.getParameterMap();
		//Enumeration<String> request.getParameterNames();
		//String[] request.getParameterValues(arg0);
		Enumeration<String> enums=request.getParameterNames();
		while(enums.hasMoreElements()){
			String name=enums.nextElement();
			String[] value=request.getParameterValues(name);
			System.out.println("name:"+name+",value:"+Arrays.toString(value));
		}
查看结果:

name:login,value:[admin]
name:password,value:[123]
name:interesting,value:[Playing, Party]

       1.1.4  String[] getParameterValues(String name);根据名字获取值数组,例如checkbox

html:

<!DOCTYPE html>
<html>
  <head>
    <title>login.html</title>
	
    <meta name="keywords" content="keyword1,keyword2,keyword3">
    <meta name="description" content="this is my page">
    <meta name="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
  
  <body>
    <form name="f1" id="f1" action="login" method="post">
      <table>
        <tr>
          <td>Login:</td>
          <td><input type="text" name="login" id="login"></td>
        </tr>
        <tr>
          <td>Password:</td>
          <td><input type="password" name="password" id="password"></td>
        </tr> 
        <tr>
          <td>interesting:</td>
          <td>
          <input type="checkbox" name="interesting" value="Playing"/>Playing
          <input type="checkbox" name="interesting" value="TV"/>TV
          <input type="checkbox" name="interesting" value="Party"/>Party
          <input type="checkbox" name="interesting" value="Sport"/>Sport
          <input type="checkbox" name="interesting" value="Shopping"/>Shopping
          </td>
        </tr>
        <tr>
          <td colspan="2"><input type="submit"></td>
        </tr>

      </table>
    </form>
  </body>
</html>
LoginServlet:

	@Override
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
        String login=request.getParameter("login");
        String password=request.getParameter("password");
        String[] interesting=request.getParameterValues("interesting");
        System.out.println("login:"+login);
        System.out.println("password:"+password);
        System.out.println("interesting:"+Arrays.toString(interesting));

	}
输出结果:



  1.2   获取请求的URI:

          HttpServletRequest是ServletRequest的子接口,针对于HTTP请求所定义,里面有

大量获取HTTP信息的方法。

	@Override
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		HttpServletRequest httpServletRequest=(HttpServletRequest) request;
		String uri=httpServletRequest.getRequestURI();
		System.out.println("uri:"+uri);

	}
	
输出结果:
uri:/MyLab2/login

  1.3   获取请求方式:

	@Override
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		HttpServletRequest httpServletRequest=(HttpServletRequest) request;
		String method=httpServletRequest.getMethod();
		System.out.println("method:"+method);

	}
输出结果:

method:POST

2. ServletReponse:

   2.1   getWriter():

          返回PrintWriter对象,调用该对象的print()方法,把print()中参数打印在网页上。

	@Override
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
        PrintWriter writer=response.getWriter();
        writer.println("hello world");

	}
查看页面:


  2.2  setContentType():

	@Override
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("application/msword");
        PrintWriter writer=response.getWriter();
        writer.println("hello world");

	}
设置为内容类型为“application/msword”,这样返回的内容下载下来:



      2.3 void sendRedirect(String location):

     请求的重定向。(此方法为HttpServletResponse中定义)


  
 在web.xml文件中设置两个WEB应用的初始化参数:user,password.

定义一个login.html,里边定义两个请求字段:user,password,发送请求到loginServlet.

loginServlet中,获取请求的user,password,比较其和web.xml文件中的初始化参数是否一致,

若一致,则响应: hello,xxx;若不一致,则响应: sorry ,xxx;

  html:

<!DOCTYPE html>
<html>
  <head>
    <title>login.html</title>
	
    <meta name="keywords" content="keyword1,keyword2,keyword3">
    <meta name="description" content="this is my page">
    <meta name="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
  
  <body>
    <form name="f1" id="f1" action="login" method="post">
      <table>
        <tr>
          <td>Login:</td>
          <td><input type="text" name="login" id="login"></td>
        </tr>
        <tr>
          <td>Password:</td>
          <td><input type="password" name="password" id="password"></td>
        </tr> 
        <tr>
          <td colspan="2"><input type="submit"></td>
        </tr>

      </table>
    </form>
  </body>
</html>
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://java.sun.com/xml/ns/javaee" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    <!-- 配置当前WEB应用的参数 -->
  <context-param>
      <param-name>user</param-name>
      <param-value>sasa</param-value>
   </context-param>
      <context-param>
      <param-name>password</param-name>
      <param-value>123</param-value>
   </context-param> 
  <!-- 配置和映射servlet -->
  <servlet>
  <!-- servlet注册的名字 -->
    <servlet-name>loginServlet</servlet-name>
    <!-- servlet的全类名-->
    <servlet-class>com.sa.servlet.LoginServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  <!-- 需要和某一个servlet节点的servlet子节点的文本节点一致 -->
    <servlet-name>loginServlet</servlet-name>
    <!-- 映射具体 的访问路径: /  代表当前web应用的根目录 -->
    <url-pattern>/login</url-pattern>
  </servlet-mapping> 
 
</web-app>
LoginServlet:

package com.sa.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet implements Servlet {
     
	public LoginServlet(){

	}
	@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 {
		// TODO Auto-generated method stub
        String user=request.getParameter("login");
        String password=request.getParameter("password");
        ServletContext servletContext=request.getServletContext();
        String user2=servletContext.getInitParameter("user");
        String password2=servletContext.getInitParameter("password");
        //HttpServletResponse httpServletResponse=(HttpServletResponse) response;
        PrintWriter writer=response.getWriter();
        if(user.equals(user2)&&password.equals(password2)){       	       	
        	writer.println("hello,"+user);
        }else{
        	writer.println("sorry,"+user);
        }

	}
	

}
测试:











  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值