Servlet笔记

有幸选到了被称为东北java第一人姜国海老师的j2ee课,就开设一个板块,做一些笔记,这个板块就用来做Servlet笔记。


Servlet:

Servlet可以被理解为运行在服务器段的小程序,Servlet是一个接口,这个接口下需要实现的方法有

1、void destroy() servlet的销毁方法

2、ServletConfig getServletConfig() 获取Servlet配置 这个配置写在web.xml中,用<init-param><param-name>name</param-name> <param-value>value</param-value></init-param> 以name-value的形式进行配置。

3、String getServletInfo() 获取Servlet的信息。老师说这个函数基本上没啥用..

4、void init(ServletConfig config) throws ServletException 这个函数进行Servlet的初始化,实现的时候至少需要写this.config = config;

5、void service(ServletRequest request , ServletResponse response) throws ServletException, IOException 这里进行Servlet的业务逻辑书写。


HttpServlet是实现了Servlet的类

HttpServlet中默认情况下,无论是get还是post提交过来都会经过service()方法进行处理,然后转向doGet()方法或者doPost()方法,这在其service()方法源码中有体现:

String method = req.getMethod();//获取数据传输方法

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

//to do... 中间就调用了doGet()方法

}

//以及对于其他传输方法的处理

继承了这个类的类一般内部不写成员变量,因为线程不安全。

也可以implements SingleThreadModel,来使得一个时刻最多只有一个线程在执行或者也可以用synchronized实现线程安全,但是效率很低,而且SingleThreadModel快被废弃了。


HttpServletRequest:

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

对于一个HttpServletRequest对象request,常用方法有下:

1、request.setContentType("text/html;charset=utf-8");

2、request.getQueryString();//返回url中的查询字符串 url中?后面那一串 比如www.test.html?id=1 id=1就是查询字符串

3、request.getParameter(String name);//获取请求中的参数数据name这个参数对应的value 比如对于上面那个url,request.getParameter("id");返回值就是1;

4、request.getParameterNames();//返回名的枚举 可以通过枚举的遍历方式进行遍历 不做赘述

5、request.getParameterValues(String name);//返回一个String数组 因为前台传输过来可能有多个相同name的name-value对;

6、request.getCookies();//获得所有cookies,返回结果是一个Cookie数组Cookie[];

7、request.getSession();//获得session,返回结果是HttpSession类型 session.getId()可以获取sessionID,只要传输sessionID就可以session对应的作用,传输sessionID的方法一般有cookie(最常用)、url rewriting(用到response.encodeURL(String url))、隐藏域提交(使用一个隐藏的form表单进行提交);

8、request.getAttribute(String name)/request.setAttibute(String arg0,String arg1);//读取/设置请求中的名值对


HttpServletResponse:

HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。对于HttpServletResponse类型的对象response,常用方法如下:

1、response.setContentType(String arg0);//设置ContentType

contentType:用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件;

2、response.setHeader(String arg0,String arg1);//设置响应头

3、response.getWriter();//获取文本输出打印流 返回类型是PrintWriter 一般使用之后不会调用PrintWriter方法进行关闭,因为那样会导致其他想访问这个组件的程序无法正常运行;

6、response.addCookie(Cookie cookie); //添加一个cookiecookie和session的作用及其区别看这里

7、response.encodeURL(String url)//重写url 后面跟上jsessionid=标识这次会话的一串字符串

除cookie外跟踪 Session 的一种另机制,如果客户端浏览器不支持 Cookie,Servlet 容器可以重写客户请求的 URL,把 Session ID 添加到 URL 信息中。这就是重写url来传输Session ID的方法;


HttpSession:

HttpSession表示一个会话,我们可以把一次会话所需要的共享数据放到一个HttpSession中,对于这个类的对象session有以下常用方法:

1、session.setAttribute(String arg0,String arg1);//设置session中的名值对

2、session.getAttribute(String name);//获取session中对应名name的值

3、session.removeAttribute(String name);//移除session中name对应的域属性,如果这个域属性为null 则什么都不做

4、session.getAttributeNames();//获取session中所有名的枚举,用正常遍历枚举(Enumeration)的方法遍历即可;

5、session.getId();//获取sessionID 标识当前会话的值

6、session.setMaxInactiveInterval(int arg0);//超过arg0秒就释放这个session

7、session.invalidate();//将session置为失效


ServletContext:

是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。一个用户可以有多个request,有一个session,但是ServletContext所有用户只能有一个,所以这里面的东西是所有用户都共享的,重要的,线程安全的信息。使用getServletContext()方法可以获取这个ServletContext实例sc,这是单例。常用方法如下:

1、sc.getInitParameter(String name)   //获取初始化参数

2、sc.getInitParameterNames() 前者  //获取初始化参数中所有名name的枚举

3、sc.getAttribute(String name) //sc.setAttribute(String name,String value)//获取name对应的值/设置名值对

4、sc.removeAttribute(String name) //删除sc中name对应的域属性,没有则什么都不做

5、sc.getRealPath(String fileName) //获取fileName对应的真实路径


RequestDispatcher:

请求派发器,一个Web资源的包装器,可以用来把当前request传递到该资源,或者把新的资源包括到当前响应中。

创建实例的方法:

RequestDispatcher rd = getServletConfig().getServletContext().getRequestDispatcher(String arg0);//参数为派发地址

简单来说这个类的实例rd常用的有两个方法:

1、rd.include(HttpServletRequest request, HttpServletResponse response);//相当于把新的资源包括到当前响应中

2、rd.forward(HttpServletRequest request, HttpServletResponse response);//转发请求


web.xml:

web.xml文件是用来初始化配置信息,有的可以用注解来实现,介绍一些课上讲的标签:

<web-app>

<servlet>

    <servlet-name>servlet的名字</servlet-name>

    <servlet-class>servlet对应的类的全称</servlet-class>

    <init-param>

        <param-name>配置参数的name</param-name>

        <param-value>这个name对应的value</param-value>

    </init-param><!-- 为这个servlet配置name value名值对 可以通过ServletConfig实例的getInitParameter(String name)获取到 -->

</servlet><!-- 配置一个servlet -->

<servlet-mapping>

    <servlet-name>之前设置好的name</servlet-name>

    <url-pattern>自己设定的url</url-pattern>

</servlet-mapping><!-- 设置servlet和url的映射关系 通过这个url就可以访问到这个servlet -->

</web-app><!-- 在一个web-app标签之内 -->



Filter:

Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源。

Filter是一个声明了以下方法的接口:

1、void destroy();//filter销毁

2、void init(FilterConfig config);//filter初始化

3、void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

      throws IOException, ServletException;//最重要的函数 在这里进行过滤

    doFilter(request,response,chain)方法可以视为这样工作:

  1. 调用目标资源之前,让一段代码执行。
  2. 是否调用目标资源(即是否让用户访问web资源)。//chain.doFilter(request,response);这条代码是分水岭 这之前处理请求对象,之后处理响应对象
  3. 调用目标资源之后,让一段代码执行。

先告一段落...未完待续

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值