Java中的servlet

Q:什么是servlet

A:Java Servlet是运行在web服务器或应用服务器上的程序,它是作为web服务器或其他HTTP客户端的请求和HTTP服务端的数据库或应用程序的中间层.

Q:作用是什么呢?

A:处理客户端请求并将结果返回给客户端,一问一答.

Q:servlet的生命周期

A:servlet的生命周期分为三个部分:初始化,运行阶段,结束销毁阶段.

初始化阶段:servlet容器读取servlet类的class文件到内存中,创建servletconfig对象,这个文件中包含一系列的配置信息,创建servlet对象,调用init()方法,这个方法只会在创建的时候调用一次,无论以后访问多少次这个servlet,都不会再次创建.

运行阶段:servlet接受到一个客户端请求时,会在容器中创建servletRequest和servletResponse对象,然后调用service方法,并将两个对象传到service方法中,程序会将客户端的请求封装到servletRequest对象中,并在服务端进行处理,将处理结果封装到servletResponse对象中返回给客户端,同时销毁创建的两个对象.

销毁阶段:当web服务器关闭,servlet调用destory方法时,销毁servlet相关对象,释放资源和内存.

Q:get,post,put,delete请求的区别

A:get请求主要是获取服务器上的数据,用于查询;post是与服务器发生交互,创建新的种类,主要是用于新增;put是向服务器提交数据,修改数据信息,不会新增种类,相当于update;delete则是删除某个资源的.

下面我们来详细说书偶这两个有post和get请求的区别:

get:通过url将数据信息传送给服务器,从服务器上获取数据,效率高,安全差,因为url会暴露数据信息,同时get请求一般都会有大小的限制(虽然http协议没有对其进行限制,但是浏览器进行了,一般是2kb左右).

post:将参数封装到表单中,传递给服务器并下载数据的操作,但是效率不如get请求,安全性较高些,post请求一般的大小和服务器配置以及内存大小有关.

Q:get,post请求编码格式设置

A:tomcat容器时:get请求一般是在server.xml中将URIEncoding设置成你需要的编码格式,例如URIEncoding="UTF-8" ;

post请求时如果是在jsp页面需要charset设置成需要的编码格式,或者在servlet请求时使用request.setCharacterEncoding设置自己需要的编码格式,但是需要设置在方法第一步.

Q:servlet的实现方式

A:servlet通常有三种实现方式:一种是通过实现servlet接口;一种是继承GenericServlet抽象类,重写service方法;一种是继承Httpservlet抽象类,重写doGet和doPost方法.其中最常用的继承HttpServlet这个抽象类的:为大家展示一个示例:

package com.hydee.servlet.test;

import java.io.IOException;
import java.io.PrintWriter;

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

public class ServletDemo4 extends HttpServlet{
	//ServletDemo4的hashCode
	private static final long serialVersionUID = 658050167L;
	
	@Override  
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
        throws ServletException, IOException {  
        //如果要想显示中文,则即必须在获取流之前,先添加如下的代码,设置好解析用的字符集  
        resp.setContentType("text/html;charset=utf-8");  
  
  
        PrintWriter out = resp.getWriter();  
  
  
        //这个字符串里的内容就是在浏览器上显示的内容  
        String str = "<html><title></title><body>你好Hello World Servlet!!!</body></html>";  
        //将流中的内容写出去,  
        out.println(str);  
        out.flush();  
        out.close();  
        System.out.println("doget...");  
    }  
  
  
    @Override  
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
        throws ServletException, IOException {  
        PrintWriter out = resp.getWriter();  
        String str = "<html><title></title><body>你好Hello World Servlet!!!</body></html>";  
        out.println(str);  
        out.flush();  
        out.close();  
        System.out.println("dopost...");  
    }  	
}

其web.xml文件配置如下:

<?xml version="1.0" encoding="UTF-8"?>
 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
  metadata-complete="true">
  
    <!-- 配置和映射 Servlet -->
    <servlet>
    <servlet-name>my</servlet-name>  
    <servlet-class>com.hydee.servlet.test.ServletDemo4</servlet-class>  

        <!-- 
            指定Servlet被创建的顺序
            若为>=0,则在当前Web应用被Servlet容器加载时创建该Servlet实例(若为负数则还是在第一次访问服务器时创建)
            数值越小越早被创建
        -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- 一个servlet节点可以和多个servlet-mapping节点相匹配,也就是说一个servlet可以有多个虚拟路径 -->
    <servlet-mapping>
        <servlet-name>my</servlet-name>
        <url-pattern>/demo4</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
        <servlet-name>my</servlet-name>
        <url-pattern>/2.jsp</url-pattern>
    </servlet-mapping>
  
  
  
  </web-app>  
 

注释:外界访问servlet需要通过url映射完成,其在web.xml通过两个标签完成<servlet>和<servlet-mapping>,其中<servlet>中两个标签<servlet-name>对应注册名称,<servlet-class>对应完整的类名;<servlet-mapping>中的两个标签<servlet-name>对应注册名称,<url-pattern>对应映射的url地址.<servlet>中的标签<load-on-startup>设置servlet的创建顺序,这个标签的存在表示web容器在启动时会创建servlet容器并调用其中额init()方法.数字越小,加载的顺序越靠前.

Q:servlet和jsp的区别

A:servlet和jsp页面本质上说一样的,但是servlet更注重业务逻辑的处理,而jsp更注重效果的展示.

Q:servlet中的内置对象和作用域

A:servlet中有九大内置对象:

request(Request),response(page),out(page),session(session),page(page),pageContext(page),config(page),application(application),exception(page);

作用域解释:

application:全局共享,生命周期从应用程序启动到结束

session:一次会话,生命周期是会话创建到会话结束或者服务器强制关闭

request:一次请求

page:一个jsp页面

Q:servlet中的过滤器

A:servlet中的过滤器通过实现filter接口,重写init,doFilter和destory方法实现,其主要目的是为了设置编码集,过滤url和ip.

Q:servlet中的监听器

A:servlet中的监听器通过实现接口HttpSessionListener,其中监听器的级别有application级别,全局监听;session级别,监听会话;request级别,监听一个请求.在web.xml中的标签<listener>标签中配置.

Q:cookie和session的区别

A:session和cookie都是用来存储信息的,只不过session存储在服务端,cookie存储在客户端;当浏览器访问服务器时,会将域名下的所有cookie都发送给我们的服务器,服务器会根据cookie中的JsessionId信息查询到对应的session,从而获取到相关的有用信息,如果没有JseesionId,服务器就会调用request.getsession()这个方法创建一个session,并将其id作为返回值包含在cookie中返回给客户端.虽然两者都是用户存储信息,但是由于cookie中的信息是可以见到,安全性不高,一般都会设置过期时间和存放一些不是特别重要的信息.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值