首先说一下ServletRequest,ServletResponse类的使用方法:

public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
/*
* 如何在Servlet中获取请求信息:
* (1):Servlet的servlet()方法用于应答请求:因为每次请求都会调用servlet()方法;
* ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
* ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现.
* 这两个接口的实现类都是服务器给予实现的, 并在服务器调用 service 方法时传入.
*
* ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
* */
System.out.println("请求来了");
System.out.println(request);
System.out.println(response);

// 获取请求参数: String getParameter(String name): 根据请求参数的名字, 返回参数值.
//若请求参数有多个值(例如 checkbox), 该方法只能获取到第一个提交的值.

//获取login.html中的user和password
String user=request.getParameter("user");
String password=request.getParameter("password");

System.out.println(user+"---"+password);

//String[] getParameterValues(String name): 根据请求参数的名字, 返回请求参数对应的字符串数组.

//获取login.html中复选框的多个值,其中复选框中的name值是相等
String inte=request.getParameter("interesting");
System.out.println(inte);
String[] interestings=request.getParameterValues("interesting");
for(String inter:interestings){
System.out.println("--->"+inter);
}

//Enumeration getParameterNames(): 返回参数名对应的 Enumeration 对象,
//类似于 ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法.
Enumeration<String> names=request.getParameterNames();
while(names.hasMoreElements()){
String name=names.nextElement();
String value=request.getParameter(name);

System.out.println("name:"+name+"---"+"value:"+value);
}

//Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型.
//此方法可以把key值相同的所有value值放在一起输出
Map<String, String[]> map=request.getParameterMap();
for(Map.Entry<String, String[]> entry:map.entrySet()){
System.out.println(entry.getKey()+"《---》"+Arrays.asList(entry.getValue()));
}

//HttpServletRequest是ServletRequest的子接口,
//针对于 HTTP 请求所定义. 里边包含了大量获取 HTTP 请求相关的方法.
HttpServletRequest http=(HttpServletRequest) request;

//获取请求的URL,
String requestUrl=http.getRequestURI();
System.out.println(requestUrl);

//获取请求方式:即两种请求方式post和get
String method=http.getMethod();
System.out.println(method);

//获取请求的 Serlvet 的映射路径
String servletPath = http.getServletPath();
System.out.println(servletPath); // /loginServlet

//获取请求的查询字符串get请求?后面的字符串
String queryString=http.getQueryString();
System.out.println(queryString);

//ServletResponse封装了响应信息,如果想给用户什么响应, 具体可以使用该接口的方法实现
//不用看控制台,直接在页面上让用户就可以看到

//设置相应类型,例如word文档
response.setContentType("application/msword");//application/msword是word文档

//getWriter(): 返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印到客户的浏览器上.
PrintWriter out=response.getWriter();

String user1=getServletContext().getInitParameter("user");
String password1=getServletContext().getInitParameter("password");
System.out.println("user1:"+user1+"---"+"password1"+password1);
if(user.equals(user1) && password.equals(password1)){
out.println("helloworld...");
}

//void sendRedirect(String location): 请求的重定向. (此方法为 HttpServletResponse 中定义.)

}

----------------------------------------------------------------------------------------------------

将继承Servlet接口的类简化:将这个类改造成一个抽象方法,然后让其他子类来继承这个抽象的父类

改在的抽象类:MyGenericServlet

/*
* 自定一个servlet接口的实现类:让开发任何Servlet都继承该类,以简化开发
* 将其定义为一个抽象类,里面有一个抽象方法
* */
public abstract class MyGenericServlet implements Servlet,ServletConfig{
//这些是Servlet接口的方法
@Override
public void destroy() {}

@Override
public ServletConfig getServletConfig() {
return servletConfig;
}

public void init() throws ServletException {
// TODO Auto-generated method stub

}

@Override
public String getServletInfo() {
return null;
}

private ServletConfig servletConfig;

@Override
public void init(ServletConfig servletConfig) throws ServletException {
this.servletConfig=servletConfig;

}

//这个方法必须实现,所以弄成抽象的方法
@Override
public abstract void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException;

//一下是,ServletConfig接口的方法:
@Override
public String getInitParameter(String arg0) {
return servletConfig.getInitParameter(arg0);
}

@Override
public Enumeration getInitParameterNames() {
return servletConfig.getInitParameterNames();
}

@Override
public ServletContext getServletContext() {
return servletConfig.getServletContext();
}

@Override
public String getServletName() {
return servletConfig.getServletName();
}

}

-----------------------

子类继承抽象的父类:

public class LoginServlet extends MyGenericServlet{

//对当前的Servlet初始化:覆盖init方法
@Override
public void init() throws ServletException{
System.out.println("初始化>>>>");
}
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
/*
* 如何在Servlet中获取请求信息:
* (1):Servlet的servlet()方法用于应答请求:因为每次请求都会调用servlet()方法;
* ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
* ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现.
* 这两个接口的实现类都是服务器给予实现的, 并在服务器调用 service 方法时传入.
*
* ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
* */
System.out.println("请求来了");
System.out.println(request);
System.out.println(response);

// 获取请求参数: String getParameter(String name): 根据请求参数的名字, 返回参数值.
//若请求参数有多个值(例如 checkbox), 该方法只能获取到第一个提交的值.

//获取login.html中的user和password
String user=request.getParameter("user");
String password=request.getParameter("password");

System.out.println(user+"---"+password);

//String[] getParameterValues(String name): 根据请求参数的名字, 返回请求参数对应的字符串数组.

//获取login.html中复选框的多个值,其中复选框中的name值是相等
String inte=request.getParameter("interesting");
System.out.println(inte);
String[] interestings=request.getParameterValues("interesting");
for(String inter:interestings){
System.out.println("--->"+inter);
}

//Enumeration getParameterNames(): 返回参数名对应的 Enumeration 对象,
//类似于 ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法.
Enumeration<String> names=request.getParameterNames();
while(names.hasMoreElements()){
String name=names.nextElement();
String value=request.getParameter(name);

System.out.println("name:"+name+"---"+"value:"+value);
}

//Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型.
//此方法可以把key值相同的所有value值放在一起输出
Map<String, String[]> map=request.getParameterMap();
for(Map.Entry<String, String[]> entry:map.entrySet()){
System.out.println(entry.getKey()+"《---》"+Arrays.asList(entry.getValue()));
}

//HttpServletRequest是ServletRequest的子接口,
//针对于 HTTP 请求所定义. 里边包含了大量获取 HTTP 请求相关的方法.
HttpServletRequest http=(HttpServletRequest) request;

//获取请求的URL,
String requestUrl=http.getRequestURI();
System.out.println(requestUrl);

//获取请求方式:即两种请求方式post和get
String method=http.getMethod();
System.out.println(method);

//获取请求的 Serlvet 的映射路径
String servletPath = http.getServletPath();
System.out.println(servletPath); // /loginServlet

//获取请求的查询字符串get请求?后面的字符串
String queryString=http.getQueryString();
System.out.println(queryString);

//ServletResponse封装了响应信息,如果想给用户什么响应, 具体可以使用该接口的方法实现
//不用看控制台,直接在页面上让用户就可以看到

//设置相应类型,例如word文档
response.setContentType("application/msword");//application/msword是word文档

//getWriter(): 返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印到客户的浏览器上.
PrintWriter out=response.getWriter();

String user1=getServletContext().getInitParameter("user");
String password1=getServletContext().getInitParameter("password");
System.out.println("user1:"+user1+"---"+"password1"+password1);
if(user.equals(user1) && password.equals(password1)){
out.println("helloworld...");
}

//void sendRedirect(String location): 请求的重定向. (此方法为 HttpServletResponse 中定义.)

}

}

-----------------------------------------------------------------------------------------------

上面的抽象类正好是GenericServlet抽象类,及子类直接继承GenericServletc抽象类即可;

其中GenericServlet,是一个Servlet。是Servlet接口和ServletConfig接口的实现类,但是一个抽象类。其中Servlet方法为抽象方法。

如果新建的Servlet类直接继承GenericServlet抽象类,是开发更加简便;

具体实现:

①. 在 GenericServlet 中声明了一个 SerlvetConfig 类型的成员变量, 在 init(ServletConfig) 方法中对其进行了初始化
②. 利用 servletConfig 成员变量的方法实现了 ServletConfig 接口的方法
③. 还定义了一个 init() 方法, 在 init(SerlvetConfig) 方法中对其进行调用, 子类可以直接覆盖 init() 在其中实现对 Servlet 的初始化.
④. 不建议直接覆盖 init(ServletConfig), 因为如果忘记编写 super.init(config); 而还是用了 SerlvetConfig 接口的方法,
则会出现空指针异常.
⑤. 新建的 init(){} 并非 Serlvet 的生命周期方法. 而 init(ServletConfig) 是生命周期相关的方法.

public class LoginServlet extends GenericServlet{

//对当前的Servlet初始化:覆盖init方法
@Override
public void init() throws ServletException{
System.out.println("初始化>>>>");
}
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
/*
* 如何在Servlet中获取请求信息:
* (1):Servlet的servlet()方法用于应答请求:因为每次请求都会调用servlet()方法;
* ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
* ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现.
* 这两个接口的实现类都是服务器给予实现的, 并在服务器调用 service 方法时传入.
*
* ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
* */
System.out.println("请求来了");
System.out.println(request);
System.out.println(response);

// 获取请求参数: String getParameter(String name): 根据请求参数的名字, 返回参数值.
//若请求参数有多个值(例如 checkbox), 该方法只能获取到第一个提交的值.

//获取login.html中的user和password
String user=request.getParameter("user");
String password=request.getParameter("password");

System.out.println(user+"---"+password);

//String[] getParameterValues(String name): 根据请求参数的名字, 返回请求参数对应的字符串数组.

//获取login.html中复选框的多个值,其中复选框中的name值是相等
String inte=request.getParameter("interesting");
System.out.println(inte);
String[] interestings=request.getParameterValues("interesting");
for(String inter:interestings){
System.out.println("--->"+inter);
}

//Enumeration getParameterNames(): 返回参数名对应的 Enumeration 对象,
//类似于 ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法.
Enumeration<String> names=request.getParameterNames();
while(names.hasMoreElements()){
String name=names.nextElement();
String value=request.getParameter(name);

System.out.println("name:"+name+"---"+"value:"+value);
}

//Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型.
//此方法可以把key值相同的所有value值放在一起输出
Map<String, String[]> map=request.getParameterMap();
for(Map.Entry<String, String[]> entry:map.entrySet()){
System.out.println(entry.getKey()+"《---》"+Arrays.asList(entry.getValue()));
}

//HttpServletRequest是ServletRequest的子接口,
//针对于 HTTP 请求所定义. 里边包含了大量获取 HTTP 请求相关的方法.
HttpServletRequest http=(HttpServletRequest) request;

//获取请求的URL,
String requestUrl=http.getRequestURI();
System.out.println(requestUrl);

//获取请求方式:即两种请求方式post和get
String method=http.getMethod();
System.out.println(method);

//获取请求的 Serlvet 的映射路径
String servletPath = http.getServletPath();
System.out.println(servletPath); // /loginServlet

//获取请求的查询字符串get请求?后面的字符串
String queryString=http.getQueryString();
System.out.println(queryString);

//ServletResponse封装了响应信息,如果想给用户什么响应, 具体可以使用该接口的方法实现
//不用看控制台,直接在页面上让用户就可以看到

//设置相应类型,例如word文档
response.setContentType("application/msword");//application/msword是word文档

//getWriter(): 返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印到客户的浏览器上.
PrintWriter out=response.getWriter();

String user1=getServletContext().getInitParameter("user");
String password1=getServletContext().getInitParameter("password");
System.out.println("user1:"+user1+"---"+"password1"+password1);
if(user.equals(user1) && password.equals(password1)){
out.println("helloworld...");
}

//void sendRedirect(String location): 请求的重定向. (此方法为 HttpServletResponse 中定义.)

}

}

javaWEB中的ServletRequest,ServletResponse的使用,及简化Servlet方法的更多相关文章

  1. JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用

    JavaWeb中监听器+过滤器+拦截器区别.配置和实际应用 1.前沿上一篇文章提到在web.xml中各个元素的执行顺序是这样的,context-param-->listener-->fil ...

  2. javaWeb中servlet开发(3)——Servlet生命周期

    生命周期:是一个程序的存在周期,servlet由于是受容器的管理,所以容器来决定其生命周期 1.servlet生命周期 2.servlet生命周期对应的方法 3.servlet生命周期代码 publi ...

  3. javaWEB总结(6):ServletRequest

    1.首先看ServletRequest的API javax.servlet Interface ServletRequest All Known Subinterfaces: HttpServletR ...

  4. JavaWeb中监听器

     一.事件源:三大域! ServletContext 生命周期监听:ServletContextListener,它有两个方法,一个在创建时调用,一个在销毁时调用: void contextIniti ...

  5. javaWeb中怎么获取提交表单里面的值

    在javaWeb中如何获得html文件中的表单里面的值? <!DOCTYPE html> <html> <head> <meta charset=" ...

  6. JavaWeb中的监听器

    JavaWeb中的监听器 l  事件源:三大域! ServletContext ¨       生命周期监听:ServletContextListener,它有两个方法,一个在出生时调用,一个在死亡时 ...

  7. 十:JavaWeb中的监听器(一)

    2.1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域 ...

  8. javaWEB中的四种域对象

    javaWEB中的四种域对象 (1)ServletContext ServletContext是最大的Web域对象,在整个工程内有效,可以存储一些需要全局部署的配置文件,也可以存储其他信息,不过因为它 ...

  9. 在JavaWeb中使用Log4j步骤

    在JavaWeb中使用Log4J指南.每次在开始写一个项目的时候都忘记Log4J如何配置.所以写个步骤,作为记录. 第一步 下载Log4J jar包 从Apache Logging Services ...

随机推荐

  1. Java FX中TreeView节点选中和双击事件监听

    TreeItem<String> treeRoot = new TreeItem<String>("Root"); treeRoot.setExpanded ...

  2. 树形DP+贪心(乱搞)(HDU4714)

    题意:给出一个树形图,要求把该树形成一个环最少的步骤(断开一条边和形成一条边都需一步) 分析:很明显,要想把树形成一个环,就要先把其分裂成m条子链之后把子链形成环需要的步骤是2*m+1,所以只需要m最 ...

  3. [原创]java WEB学习笔记60:Struts2学习之路--Actioin-声明式异常处理

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. java基础(59):Eclipse把自动括号匹配改成C++那样的(强迫症,没办法)

    在Eclipse开发环境下依次选择: 1.Windows->Preferences->Java->Code Style->Formatter: 2.在Active Profil ...

  5. ubuntu安装jdk遇到的问题:cannot execute binary file

    安装完jdk,配置好环境变量出现如下状况: cannot execute binary file 问题原因: jdk的位数与ubuntu的系统位数不一致 jdk 64位 ubuntu 32位 然后通过 ...

  6. C++之路进阶——bzoj3524(Couriers)

    F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser  gryz2016 Logout 捐赠本站 Notice:由于本OJ ...

  7. CCF真题之图像旋转

    201503-1 问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度. 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可. 输入格式 ...

  8. paper 19 :机器学习算法(简介)

    本来看了一天的分类器方面的代码,乱乱的,索性再把最基础的概念拿过来,现总结一下机器学习的算法吧! 1.机器学习算法简述 按照不同的分类标准,可以把机器学习的算法做不同的分类. 1.1 从机器学习问题角 ...

  9. RF前端

    加入LTE之后的多模多频需求: 在加入LTE后,不但要求终端在多模的基础上增加LTE工作频段,而且还要增加可以确保用户实现国际漫游的频段.然而 全球分配的LTE频段较多且较离散.   频段 上行工作频 ...

  10. zw版【转发·台湾nvp系列Delphi例程】HALCON DirectShow (Delphi Prism)

    zw版[转发·台湾nvp系列Delphi例程]HALCON DirectShow (Delphi Prism) namespace DirectShow_Prism;interfaceuses Sys ...