Servlet的常用方法

Java web在服务器和浏览器之前运行的Java类被称为Servlet,以下记录目前接触过的常见的的Servlet方法

1.service方法

Tomcat服务器调用的唯一方法,即使是doGet方法和doPost方法,也只不过是在super.service()当中,判断一下当前是用什么method调用的。服务器只认service方法,无论使用post还是get来获取网页。

2.设置输出在浏览器网页上文本的格式
resp.setContentType("text/html;charset=utf-8");

设置输出在浏览器网页上文本的格式,告诉浏览器以何种形式来对文本进行解析。此命令会在请求头当中新增一个Content-Type: text/html;charset=utf-8的属性键值对。此方法解决了中文打印在浏览器发生乱码的问题

3.服务器向浏览器页面上打印文字的方法
resp.getWriter().write("Hello World");

服务器向浏览器页面上打印文字的方法,所有的网页都是由这个方法一行一行打出来的。

4.设置服务器对接收来自浏览器请求的编码格式
req.setCharacterEncoding("utf-8");

设置Tomcat服务器对接收来自浏览器请求的编码格式,此方法解决了接收浏览器的中文信息在服务器上乱码的问题。该方法对post和get方法都适用。之后所有的接受的请求,服务器都会按照utf-8的格式解析。

5.uname=new String(uname.getBytes(“iso8859-1”),“utf-8”);

使用String重新编码,该方法解决了一句话当中的中文乱码问题。

6.req.getParameter(“uname”);

从前端的form表单当中接收的信息的方法

7.req.getRequestDispatcher(“page”).forward(req, resp);

请求转发的方法,此方法可以使其他的Servlet执行而不改变页面网址,相当于把别的Servlet变成一个方法拿过来调用。

8.request.setAttribute(object name,Object value);

由于请求转发的方法没有传递参数的形参位置,如果请求转发的过程当中,需要向转发的Servlet传递信息的时候,需要使用此方法将参数的键值对加入到request对象当中。request.getAttribute(Object obj)方法可以提取出对应的属性

9.response.sendRedirect(“URI路径”).

重定向方法,该方法可以真正意义上运行一个Servlet请求,就连网址也会发生变化,但是因为是新的请求,原来的request对象没有办法跟到这里,要是想要上一次请求的数据,需要session和cookie的协助

10.临时Cookie

新增Cookie:

Cookie c = new Cookie("uname", uname);
resp.addCookie(c);

此方法可以新增一条临时cookie数据,在关闭浏览器之前会一直保存(存储在浏览器的内存当中)。新建cookie信息会在http的响应头当中体现出来。存储的cookie信息会在请求头当中出现。

11.定时Cookie
c.setMaxAge(24*60*60);

将Cookie存储到硬盘当中,暂时不会随着关闭浏览器而数据消失,默认cookie信息存储好之后,每次请求都会附带,除非设置有效路径

c.setPath("/Login/main");
12.提取网页request当中的cookie信息
Cookie cks[] = req.getCookies();
String uname = new String();
if (cks!=null)
{
    for (int i = 0 ;i<cks.length;i++)
    {
        if (cks[i].getName().equals("uname"))
            uname = cks[i].getValue();
    }
}

需要注意的是,如果当前页面的request当中不存在cookie,getCookies()方法返回的是null,在对cookie进行操作之前记得要判断是否是空值。

13.Session技术
HttpSession hs = req.getSession();

Tomcat已经将session的流程进行了完全的封装,这一句指令当中即是获取session对象,又是创建session对象,取决于当前浏览器的cookie是否存在JSESSIONID这一行键值对。如果存在,则返回其对应的session对象,请求中没有标识符也就是创建session对象。JSESSIONID只存储在浏览器内存当中,关闭浏览器会失效。

服务器中session默认存储时间是30分钟,不过可以设置session的存在时间。(这也解释了为什么在OJ做题的时候,太久不操作页面会自动掉线,其实是session到期了)。

如果在session存在时间内,对服务器进行了操作,session消失时间会被重置。

hs.setMaxInactiveInterval(arg0);//设置session对象在服务器的保存时间
hs.invalidate();//立即销毁session
14.ServletContext对象几种重要的使用方式
(1)创建方式:
ServletContext sc = this.getServletContext();
ServletContext sc2 = this.getServletConfig().getServletContext();
ServletContext sc3 = req.getSession().getServletContext();

三种创建方式都可以

和session不同,session用于存储同一用户的不同请求的数据,而ServletContext更像是一个存于服务器的全局变量,不同的用户都可以对ServletContext数据进行存取。

(2)获取项目中web.xml文件中的全局配置数据
sc.getInitParameter(String name); //根据键的名字返回web.xml中配置的全局数据的值,返回String类型。
sc.getInitParameterNames();//返回键名的枚举

如果数据不存在返回null。

配置方式:注意 一组标签只能存储一组键值对数据,多组可以声明多个进行存储。

<context-param>
  	<param-name>nameparam-name>
  	<param-value>zhangsanparam-value>
context-param>
  • 作用:可以在不重启服务器的情况下,直接修改全局变量,(解耦)
(3)获取项目webroot下的资源的绝对路径。
String path=sc.getRealPath(String path);	

获取的路径为项目根目录,path参数为项目根目录中的路径

(4)获取webroot下的资源的流对象
InputStream is = sc.getResourceAsStream(String path);
/**		注意:
*				此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要使用类加载器获取。
*				path参数为项目根目录中的路径
*/
15.ServletConfig对象

ServletContext可以很轻松的读取web.xml文件当中的全局信息,如果想读取只针对于该Servlet的内容,则需要ServletConfig对象进行读取。

Servlet在web的局部对象写法(内容必须写到与其对应的servlet标签当中):

<init-param>
    <param-name>configparam-name>
    <param-value>utf-8param-value>
init-param>

局部数据在Servlet读取的方法:

ServletConfig sc = this.getServletConfig(); //创建ServletConfig对象
String code=sc.getInitParameter("config");

你可能感兴趣的:(Java,学习记录,Java,Servlet)