javaweb中servlet技术的用法

javaweb中servlet技术的用法

本文讲解"javaweb中servlet技术的用法",希望能够解决相关问题。

 

servlet

servlet(server applet)是java servlet的简称。 是在服务器端执行的 , 用于响应客户端请求的java类。httpservlet 是使用java语言对http通信的实现。

servlet声明

在 web.xml 中声明servlet的请求url及对应的类路径 , 3.0版本后可以在类上使用 @webservlet(“/test”) 注解来声明

servlet-class : 内部地址路径

url-pattern : 对外发布的名字

servlet-name : 两者的对应

       testservlet     com.yuan.servlet.testservlet           testservlet     /testservlet   

servlet生命周期

加载 : 在web.xml中声明servlet相关信息

实例化 : 由webserver( 如 : tomcat )根据web.xml中声明信息进行实例化, 实例化后才能调用方法

第一种方式 : 第一次被请求时, 先实例化, 然后调用了 init() 方法进行初始化

第二种方式 : 在 web.xml 文件中在下加入 0web服务器启动时就会实例化

初始化 : 在init() 方法中,进行初始属性设置

服务 : 用户发请求后, 会调用 service(request, response) 方法, 请求/响应的信息由webserver封装成httpservletrequest / httpservletresponse对象

销毁 : 当servlet被销毁时, 调用destroy()方法, 可以在这个方法中释放一些资源

垃圾回收 : 被jvm进行垃圾回收时, 调用 finalize() 方法

package com.yuan.servlet;
import javax.servlet.servletconfig;
import javax.servlet.servletexception;
import javax.servlet.annotation.webservlet;
import javax.servlet.http.httpservlet;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import java.io.ioexception;
@webservlet("/testservlet")
public class testservlet extends httpservlet {
    @override
    public void init(servletconfig config) throws servletexception {
        // 初始化方法
    }
    @override
    protected void service(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
        // 服务方法
    }
    @override
    public void destroy() {
        //销毁方法
    }
}

请求方式

http定义了与服务器交互的不同方法,最基本的方法有4种,分别是get,post,put,delete。

一个url地址,它用于描述一个网络上的资源,而http中的get,post,put,delete就对应着对这个资源的查,改,增,删4个操作。

get/post比较

get一般用于获取/查询资源信息,而post一般用于更新资源信息

默认方式 :

-get 超链接, location.href, form表单 默认都是get的

-post 将 form表单的 method属性设置成 post, form通信转成post方式

传值方式 :

-get 数据会附在url之后, 参数显示在地址栏。所以是明文传值

-post 数据放置在http包的包体中, 参数不在地址栏显示, 登录时要使用post, 隐藏登录信息

传值大小:

-get 1k~8k,受浏览器的影响, 通常为2k

-post 理论上没有大小的限制, 所以做上传文件时, 由于文件的大小原因, 只能使用post

中文传递 :

-get 默认使用iso-8859-1, 现在的浏览器都有优化

-post 根据页面的中文编码设置, 服务器接值要转码

字符编码

gb2312编码:1981年5月1日发布的简体中文汉字编码国家标准。gb2312对汉字采用双字节编码,收录7445个图形字符,其中包括6763个汉字。

big5编码:台湾地区繁体中文标准字符集,采用双字节编码,共收录13053个中文字,1984年实施。

gbk编码:1995年12月发布的汉字编码国家标准,是对gb2312编码的扩充,对汉字采用双字节编码。

gbk字符集共收录21003个汉字,包含国家标准gb13000-1中的全部中日韩汉字,和big5编码中的所有汉字。

unicode编码(utf-8):国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。

u4e00-u9fa5 , 0x3400-0x4db5 (中文)

两种转页

内部转 :

request.getrequestdispatcher( "目标页面" ) .forward( request, response );

跳转后浏览器地址栏不会变化

目标页面路径可以使用相对路径

使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setattribute()

重定向 :

response.sendredirect( request.getcontextpath() + "目标页面" );

跳转后浏览器地址栏变化。

目标页面要使用绝对路径

这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setattribute()来传递

三种容器

存储容器 : 是指用于在请求或转页过程中用来存储所在传递的参数值的对象

常用方法

// 添加属性
.setattribute(key, value)
// 取属性值
.getattribute(key)
// 移除属性
.removeattribute(key)

在web项目中有三种容器, 因为它们的作用范围(生命周期)不同, 也叫三种作用域

其中 application 包含 多个session , session 包含多个 request

所以 从 request能得到session , 而从 request, session 能得到 application

request请求

类型 : httpservletrequest

生命周期 : 客户端发起请求创建

遇到响应 response 或者生成页面结束

常用方法 :

// 接页面传来的值
string value = request.getparameter(key);   //接一个值
string[] vals = request.getparametervalues(key);  //接一组值
// 得到其它容器
httpsession session = request.getsession();
servletcontext app = request.getservletcontext();
// 得到url 信息
stringbuffer url = request.getrequesturl();
string scheme = request.getscheme();
string servername = request.getservername();
int serverport = request.getserverport();
string uri = request.getrequesturi();
string cpath = request.getcontextpath();       // 得到绝对路径
string servleturl = request.getservletpath();  // 被请求servlet
string remoteaddr = request.getremoteaddr();  // 得到客户端ip
session请求

类型 : httpsession

生命周期 : 浏览器与服务器建立通信开始

主动关闭或长时间不与服务器通信结束

常用方法 :

// 取session 的 标识 id
string sid = session.getid();
// 获取最长等待时间
int max = session.getmaxinactiveinterval();
// 设置最长等待时间, 以秒为单位
session.setmaxinactiveinterval(len);
// 取所属的上下文
servletcontext app = session.getservletcontext();

在 web.xml中也可以设置最长等待时间, 单位是分钟

       30   
application上下文(全局)

类型 : servletcontext

生命周期 : 项目启动创建

项目关闭结束

常用方法 :

// 取项目的真实路径(发布路径)
string path = app.getrealpath(path);
// 取 web.xml 中设置的参数
string pv = app.getinitparameter(paramname);

在web.xml 里信息可以被application获取

       paramname     paramvalue   

servletconfig设置对象

在 servlet的init() 初始化方法传入参数 servletconfig

public void init(servletconfig config) throws servletexception {
    // 取web.xml 文件中在下的信息
	string icon = config.getinitparameter(configname);
	// 取所属的上下文
	servletcontext app = config.getservletcontext();
}

在web.xml 文件中在下的信息

              configname       configvalue          testservlet     com.yuan.servlet.testservlet   
相关文章