Servlet中的HttpServletRequest

来源:互联网 发布:淘宝店运营方案 编辑:程序博客网 时间:2024/04/30 14:52

     1:note.txt

1:使用Java EE版本的Eclipse开发动态的WEB工程(Java WEB项目)

 1)把开发选项切换到Java EE
 2)可以window->show view中找到package Explore,把其拖到开发区左边
 3)在Servers面板中新建Tomcat服务器
 4)新建Dynamic Web project(动态web工程) ,其中Target Runtime需要选择Tomcat
 5)开发Java Web应用
 6)可以通过run on server 运行 WEB项目
 
 2:ServLet的HelloWorld
   1)创建一个ServLet接口实现类
   2)在web.xml文件中配置和映射ServLet
   <servlet>
     <servlet-name>helloServlet</servlet-name>
     <servlet-class>com.test.HelloServlet</servlet-class>
   </servlet>
  <servlet-mapping>
     <servlet-name>helloServlet</servlet-name>
     <url-pattern>/hello</url-pattern>
  </servlet-mapping>
  
   3)浏览器访问ServLet通过<url-pattern>/hello</url-pattern>
   
 3:servLet容器:运行ServLet,JSP,Filter,Listener
  1)可以来创建ServLet,并调用ServLet的相关生命周期方法
  2)JSP,Filter,Listen,Tag...运行在ServLet容器中
 
 4:ServLet生命周期的方法:以下方法都是由ServLet容器负责调用
  1)构造器:第一次请求ServLet时,创建ServLet的实例,调用构造器(说明是ServLet一个单实例)
  2)init:只被调用一次,在ServLet容器被实例化后立即调用,用于初始化ServLet
  3)service:被多次调用,每次调用时都会调用service方法,实际用于响应请求
  4)destory:在ServLet容器销毁时调用,只被调用一次,释放ServLet当前所占用的资源
  
 5:load-on-startup:在被加载时创建实例
 
 6:关于servlet-mapping
  1)同一个servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置可以是同一个servlet的注册名
  2)再Servlet映射到URL中也可以使用*(通配符),但是只能有2种固定格式
    一种是:*.扩展名(html,jsp),另外一种是:/*
    <servlet-mapping>
     <servlet-name>helloServlet</servlet-name>
     <url-pattern>*.html</url-pattern>
  </servlet-mapping>
  
  <servlet-mapping>
     <servlet-name>helloServlet</servlet-name>
     <url-pattern>/*</url-pattern>
  </servlet-mapping>
  以下是不合法的:
  <servlet-mapping>
     <servlet-name>helloServlet</servlet-name>
     <url-pattern>/*.html</url-pattern>
  </servlet-mapping>
  
 7:ServletConfig:是一个接口,封装了servlet配置信息,并且可以获取ServletContext对象
   1) 配置ServLet初始化参数 
   <init-param>
          <param-name>user</param-name>
          <param-value>root</param-value>
      </init-param>
      <init-param>
          <param-name>password</param-name>
          <param-value>123</param-value>
      </init-param>
   2):获取初始化参数:getInitParameter(String name):获取指定参数名的初始化参数
       getInitParameterName();获取参数名组成的Enumeration对象
       String user=servletConfig.getInitParameter("user");
String password=servletConfig.getInitParameter("password");
System.out.println("用户:"+user+",密码:"+password);
Enumeration<String> names=servletConfig.getInitParameterNames();
while(names.hasMoreElements()){
String name=names.nextElement();
String value=servletConfig.getInitParameter(name);
System.out.println("^^"+name+":"+value);
}
   3):ServletContext:是一个接口(是ServLet上下文)
    Sevlet引擎为每一个WEB应用程序都创建一个对应的ServletContext对象,包含在ServletConfig对象中
    调用ServletConfig.getServletContext方法可以返回ServletContext对应的引用
    --由于每一个Servlet WEB应用程序共享ServletContext对象,所以ServletContext是application(应用):用于保存所有用户的公共的数据信息
  ①获取当前web应用程序的初始化参数
  设置初始化参数:servletContext可以为所有的Servlet所获取,而Servlet的初始化参数只能被指定的一个servlet获取
   <!-- 配置当前WEB应用程序的初始化参数 -->
  <context-param>
      <param-name>driver</param-name>
      <param-value>com.mysql.jdbc.Driver</param-value>
  </context-param>
  <context-param>
      <param-name>jdbcUrl</param-name>
      <param-value>jdbc:mysql://localhost/testjdbc</param-value>
  </context-param>
  <context-param>
      <param-name>user</param-name>
      <param-value>root</param-value>
  </context-param>
  <context-param>
      <param-name>password</param-name>
      <param-value>123456</param-value>
  </context-param>
  
  方法:
  ServletContext servletContext=servletConfig.getServletContext();
String  driver=servletContext.getInitParameter("driver");
String  jdbcUrl=servletContext.getInitParameter("jdbcUrl");
String  user=servletContext.getInitParameter("user");
String  passwords=servletContext.getInitParameter("password");
System.out.println("driver:"+driver);
System.out.println("jdbcUrl:"+jdbcUrl);
System.out.println("user:"+user);
System.out.println("passwords:"+passwords);
System.out.println("---------------------------\n");
Enumeration<String> names2=servletContext.getInitParameterNames();
while(names2.hasMoreElements()){
String name2=names2.nextElement();
String value=servletContext.getInitParameter(name2);
System.out.println(name2+"-->"+value);
}
  ②获取当前WEB应用的某一个文件绝对路径:getRealPath()方法,不是文件部署前的路径
  ③获取当前WEB应用的根目录名称:
  
       String contextPath=servletContext.getContextPath();
System.out.println("WEB根目录名称:"+contextPath);
  ④获取当前WEB应用的某一个文件对应的输入流
   getResourceAsStream(String path):path的/ 为相当于当前WEB应用的路径
    InputStream isInputStream2=servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
          System.out.println("2."+isInputStream2);
          和attribute相关的几个方法:get
8:使用GET与Post请求区别:
get请求:参数附在url后面 ?以键值对存在,使用get请求传送数据一般限制在1kb以下(超链接,直接在浏览器中请求)
post请求:将表单内容作为http消息发送给WEB服务器,传送数据量比get请求数据量大(文件上传必须为post请求)
    9:如何在Servlet中获取请求信息
     1)servlet的service方法用于响应请求:因为每次请求都会调用service方法
       protected void service(HttpServletRequest request, HttpServletResponse response)
     HttpServletRequest request:封装了请求信息,可以从中获取任何的请求信息
     HttpServletResponse response:封装了相应信息,想响应什么,调用该接口的实现方法
       ①:获取请求参数:
         String getParameter(String name)//获取指定参数名称的值
         Map getParametermap();获取所有请求参数的名称与对应的值
         Enumeration  getParameterNames() 获取所有请求参数的名称//Enumeration是迭代器,是Iterator出现前的一个版本
         String[] getParameterValues(String name)获取指定参数名称的一组值(复选框)
     ②获取URL: ServletRequest子接口HttpServletRequest

     ③


     2:login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
  <form action="loginServlet" method="post">
     userName:<input type="text" name="user"/><br/>
     password:<input type="password" name="password"/><br/>
     interesting:<input type="checkbox" name="interesting" value="listening"/>listening&nbsp;
     <input type="checkbox" name="interesting" value="Speaking"/>Speaking&nbsp;
     <input type="checkbox" name="interesting" value="Reading"/>Reading&nbsp;
     <input type="checkbox" name="interesting" value="Writing"/>Writing<br/>
     <input type="submit" value="提交"/>
  </form>
</body>
</html>


 3:web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Servlet1</display-name>
  <!-- 配置当前WEB应用程序的初始化参数 -->
  <context-param>
      <param-name>driver</param-name>
      <param-value>com.mysql.jdbc.Driver</param-value>
  </context-param>
  <context-param>
      <param-name>jdbcUrl</param-name>
      <param-value>jdbc:mysql://localhost/testjdbc</param-value>
  </context-param>
  <context-param>
      <param-name>user</param-name>
      <param-value>root</param-value>
  </context-param>
  <context-param>
      <param-name>password</param-name>
      <param-value>123456</param-value>
  </context-param>
  <!--  配置和映射ServLet-->
  <servlet>
      <!-- ServLet注册的名字  -->
     <servlet-name>helloServlet</servlet-name>
      <!-- ServLet的全类名 -->
     <servlet-class>com.test.HelloServlet</servlet-class>
     <!-- 配置ServLet初始化参数  -->
      <init-param>
          <param-name>user</param-name>
          <param-value>root</param-value>
      </init-param>
      <init-param>
          <param-name>password</param-name>
          <param-value>123</param-value>
      </init-param>
  </servlet>
  <servlet>
    <servlet-name>loginServlet</servlet-name>
    <servlet-class>com.test.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
   <!-- 需要和某一个ServLet节点的servlet-name子节点保持一致 -->
     <servlet-name>helloServlet</servlet-name>
      <!-- 映射具体访问路径:/当前WEB应用的根目录 -->
     <url-pattern>/hello</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
     <servlet-name>loginServlet</servlet-name>
     <url-pattern>/loginServlet</url-pattern>
  </servlet-mapping>
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


   4:LoginServlet

package com.test;


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


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}



protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    System.out.println("请求来了");
    String user=request.getParameter("user");
    String password=request.getParameter("password");
    System.out.println("用户名:"+user+",密码:"+password);
    String[] params=request.getParameterValues("interesting");
    for(String value:params){
    System.out.println("--"+value);
    }
    Enumeration<String> names=request.getParameterNames();
    while(names.hasMoreElements())
    {
    String name=names.nextElement();//获取元素
    String value=request.getParameter(name);
    System.out.println(name+"-->"+value);
    }
    Map<String,String[]> map=request.getParameterMap();
    //entrySet():获取键值对,
    for(Map.Entry<String, String[]> entry:map.entrySet()){
    //Arrays.asList:将对象数组以list集合输出
    System.out.println(entry.getKey()+"-->"+Arrays.asList(entry.getValue()));
    }
    //HttpServletRequest是ServletRequest子接口
    HttpServletRequest httpServletRequest=(HttpServletRequest)request;//向下转型
    String requestURL=httpServletRequest.getRequestURI();
    System.out.println("请求的URL"+requestURL);
    String method=httpServletRequest.getMethod();
    System.out.println("请求的方法:"+method);
    }
}

0 0