javaWeb2

创建一个servlet

Servlet是一个接口。

工程名称:lianxiJavaWeb2

1.创建HelloServlet 名字的Java

2.web.xml映射文件

3.执行http://localhost:8080/lianxiJavaWeb2/hello

package servlet;

 

import java.io.IOException;

 

import javax.servlet.Servlet;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

//创建servlet接口的实现类

public class HelloServletimplements Servlet{

public HelloServlet(){

System.out.println("HelloServlet conjstractor...");

}

 

@Override

public void destroy() {

System.out.println("destroy");

}

 

@Override

public ServletConfig getServletConfig() {

System.out.println("getServletConfig");

return null;

}

 

@Override

public String getServletInfo() {

System.out.println("getServletInfo");

return null;

}

 

@Override

public void init(ServletConfig arg0)throws ServletException {

System.out.println("init");

}

 

@Override

public void service(ServletRequest arg0, ServletResponse arg1)

throws ServletException, IOException {

System.out.println("service");

}

}

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_2_5.xsd" version="2.5">

 

<!-- 配置映射Servlet -->

<servlet>

<servlet-name>helloServlet</servlet-name>

<servlet-class>servlet.HelloServlet</servlet-class>

<load-on-startup>1</load-on-startup>//启动时创建servlet实例调用init方法

</servlet>

<servlet-mapping>

<servlet-name>helloServlet</servlet-name>

<url-pattern>/hello</url-pattern>//映射的具体访问路径

</servlet-mapping>

</web-app>

/hello /:表示当前web应用的根目录也就是http://localhost:8080/lianxiJavaWeb2/;hello

 

Servlet容器:运行servlet,jsp,filter等软件环境。

1.可以创建servlet、并调用servlet的相关生命周期方法。

2.调用Jsp,filter listener,tag。。。。

Servlet生命周期的方法:以下方法都是由servklet容器负责调用

1.4个生命周期相关方法:1构造器(创建实例):第一次请求servlet时,创建servlet实例,调用构造器。这说明servlet是单实例的。只被调用1次

2.init方法:只被调用1次,在创建好实例后立即被调用,用于调用初始化servlet

 

3.Service:每次请求都会调用servlet方法,实际用于响应请求的。被调用多次。

Destroy:只被调用1次在当前servlet所在的web应用被卸载钱调用,用于释放当前servlet所占用的资源。

创建一个servlet

Servlet是一个接口。

工程名称:lianxiJavaWeb2

1.创建HelloServlet 名字的Java

2.web.xml映射文件

3.执行http://localhost:8080/lianxiJavaWeb2/hello

package servlet;

 

import java.io.IOException;

 

import javax.servlet.Servlet;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

//创建servlet接口的实现类

public class HelloServletimplements Servlet{

public HelloServlet(){

System.out.println("HelloServlet conjstractor...");

}

 

@Override

public void destroy() {

System.out.println("destroy");

}

 

@Override

public ServletConfig getServletConfig() {

System.out.println("getServletConfig");

return null;

}

 

@Override

public String getServletInfo() {

System.out.println("getServletInfo");

return null;

}

 

@Override

public void init(ServletConfig arg0)throws ServletException {

System.out.println("init");

}

 

@Override

public void service(ServletRequest arg0, ServletResponse arg1)

throws ServletException, IOException {

System.out.println("service");

}

}

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_2_5.xsd" version="2.5">

 

<!-- 配置映射Servlet -->

<servlet>

<servlet-name>helloServlet</servlet-name>

<servlet-class>servlet.HelloServlet</servlet-class>

<load-on-startup>1</load-on-startup>//启动时创建servlet实例调用init方法

</servlet>

<servlet-mapping>

<servlet-name>helloServlet</servlet-name>

<url-pattern>/hello</url-pattern>//映射的具体访问路径

</servlet-mapping>

</web-app>

/hello /:表示当前web应用的根目录也就是http://localhost:8080/lianxiJavaWeb2/;hello

 

Servlet容器:运行servlet,jsp,filter等软件环境。

1.可以创建servlet、并调用servlet的相关生命周期方法。

2.调用Jsp,filter listener,tag。。。。

Servlet生命周期的方法:以下方法都是由servklet容器负责调用

1.4个生命周期相关方法:1构造器(创建实例):第一次请求servlet时,创建servlet实例,调用构造器。这说明servlet是单实例的。只被调用1次

2.init方法:只被调用1次,在创建好实例后立即被调用,用于调用初始化servlet

 

3.Service:每次请求都会调用servlet方法,实际用于响应请求的。被调用多次。

Destroy:只被调用1次在当前servlet所在的web应用被卸载钱调用,用于释放当前servlet所占用的资源。

2.Load-on-startup:可以指定servlet被调用的时机。0、1、2、3、4、5 越小越被启动。

配置在servlet节点中 若为负数,在第一次请求时被创建 若为0或整数,则在当前web应用被servlet容器加载时创建实例,数值越小越早被创建。

Servlet url映射可以使用通配符:/*;*.html;*.do;*.action

既带/又带扩展名的不合法。

servletConfig

封装了Servlet配置信息,并且可以获取servletContext 对象;

配置servlet的初始化参数:必须在load-on-startup前面

<servlet>

<servlet-name>helloServlet</servlet-name>

<servlet-class>servlet.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>123456</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

1.获取初始化参数:getInitParameter(String name):获取指定参数的初始化参数

2.getInitParameterNames() :获取参数名组成的Enumeration 对象。

获取servlet的配置名称:servletConfig.getServletName();

servletContextservlet为每个web应用程序创建一个对应的servletContext对象,servletContext对象包含在servletConfig对象中,调用servletConfig.getServletContext方法可以返回ServletContext对象的引用。由于一个web应用程序中的所有Servlet都共有一个ServletContext对象,所以servletContext被称之为application 对象(Web应用程序对象)

1,可以由servletConfig获取

2.该对象代表当前web应用:可以认为servletContext是当前web应用的大管家,可以从中获取到当前web应用的各方面信息。

获取当前web应用的初始化参数:

<!-- 配置当前web应用的初始化参数 -->全局初始化参数

<context-param>

<param-name>driver</param-name>

<param-value>com.mysql.jdbc.Driver</param-value>

</context-param>

ServletContext context = servletConfig.getServletContext();

String driver = context.getInitParameter("driver");

Enumeration<String> names = context.getInitParameterNames();

while(names.hasMoreElements()){

String name = names.nextElement();

}

 

1)获取当前Web应用的某一个文件在服务器上的绝对路径: 而不是部署前的路径。

String realpath = context.getRealPath("/index.jsp");

2)获取当前web应用的名称:

String contextPath = context.getContextPath();/lianxiJavaWeb

3)获取当前web应用的某个文件对应的输入流。

getResourceAsStream(String path):path的/为当前web应用的根目录。

ClassLoader classLoader = getClass().getClassLoader();

InputStream is = classLoader.getResourceAsStream("jdbc.properties");

InputStream is2 = context.getResourceAsStream("/WEB-INF/classes/jdbc.properties");

Attribute相关方法:

HTTP

GET请求和POST请求:

如何在Servlet中获取请求信息:

1.Servletservice()方法

public void service(ServletRequest arg0, ServletResponse arg1)

2. throws ServletException, IOException {}

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

4.ServletResponse:封装了响应信息如果想给用户什么响应,具体可以使用该接口进行实现。

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

6.ServletRequest

7.String getParameter(String name):根据参数名,返回参数值

8.Map getParameterMap() ;

9.Enumeration getParameterNames();根据请求参数的名字,返回请求参数对应的字符串数组。返回参数名对应的Enumeration对象,类似于ServletConfiggetInitParameterNames();

10.String[] getParameterValues(String name)返回请求参数的键值对key:参数名,value:参数值String数组类型。

用于获取checkbox这样类型的值

请求URI获取:

HttpServletRequest httpServletRequest =(HttpServletRequest) request;

String requestURI = httpServletRequest.getRequestURI();

String method = httpServletRequest.getMethod();

HttpServletRequest:是ServletRequest的子接口,针对于Http请求所定义。里面包含了大量获取Http请求相关的方法。

ServletResponse

ServletResponse封装了响应信息,如果想给用户什么信息,具体可以使用该接口实现。

getWriter():返回PrintWriter对象,将把print()中的参数直接打印到客户的浏览器上。

response.setContentType("application/msword");设置响应类型.

Void sendRedirect(String location) :请求的重定向。(此方法为HttpServletResponse中定义)。

GenericServlet:是ServletServletConfig接口的实现类。,但是是一个抽象类方法。、存在意义:如果新建的servlet程序直接继承GenericServlet,会使开发更简洁。

具体实现:

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

子类:

public class LoginServletextends MyGenericServlet{

public void init(ServletConfig arg0)throws ServletException{

//对当前的Servlet进行初始化。覆盖了MyGenericServlet的init()方法。

super.init(arg0);

System.out.println("初始化。。");

}

@Override

public void service(ServletRequest arg0, ServletResponse arg1)

throws ServletException, IOException {

}

}

public abstract class MyGenericServlet implements Servlet,ServletConfig {

 

@Override

public void destroy() {

}

@Override

public ServletConfig getServletConfig() {

return servletConfig;

}

 

@Override

public String getServletInfo() {

// TODO Auto-generated method stub

return null;

}

private ServletConfigservletConfig;

@Override

public void init(ServletConfig arg0)throws ServletException {

servletConfig = arg0;

 

}

 

@Override

public abstract void service(ServletRequest arg0, ServletResponse arg1)

throws ServletException, IOException ;

 

@Override

public String getInitParameter(String arg0) {

return servletConfig.getInitParameter(arg0);

}

 

@Override

public Enumeration<String> getInitParameterNames() {

// TODO Auto-generated method stub

return servletConfig.getInitParameterNames();

}

 

@Override

public ServletContext getServletContext() {

// TODO Auto-generated method stub

return servletConfig.getServletContext();

}

 

@Override

public String getServletName() {

// TODO Auto-generated method stub

return servletConfig.getServletName();

}

 

}


HttpServlet

实际开发中,继承 HttpServlet 覆盖doPost()方法;直接使用HttpSerlvetRequest和HttpSerlvetResponse。

 

/**

 * 针对于Http协议定义的一个Servlet基类

 * @author Administrator

 *

 */

public class MyHttpServletRequestextends MyGenericServlet {

 

@Override

public void service(ServletRequest arg0, ServletResponse arg1)

throws ServletException, IOException {

//Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例

if(arg0 instanceof HttpServletRequest){

HttpServletRequest request = (HttpServletRequest)arg0;

if(arg1 instanceof HttpServletResponse){

HttpServletResponse response = (HttpServletResponse)arg1;

service(request,response);

}

}

 

}

public void service(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//1.获取请求方式

String method = request.getMethod();

//2.根据请求方式调用对应方法

if("GET".equalsIgnoreCase(method)){

doGet(request,response);

}

if("POST".equalsIgnoreCase(method)){

doPost(request,response);

}

}

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

// TODO Auto-generated method stub

}

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

// TODO Auto-generated method stub

}

 

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值