手记

Java Web servlet理解

前言:按照习惯,首先上个demo。
一个servlet例子:
第一步:java代码:

package com.zhoum.intelligentler.servlet;
public class DownloadServlet extends HttpServlet{
@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        String queryString = req.getQueryString();
        Map<String, String> map = QueryStringUtil.createQueryMap(queryString);
        String src = map.get("src");
        String dst = map.get("dst");
        String md5 = map.get("md5");
        System.out.println("传入的src为:" + src);
        System.out.println("传入的dst为:" + dst);
        System.out.println("传入的md5为:" + md5);
        PrintWriter pw = resp.getWriter();
        pw.println("传入的src为:" + src);
        pw.println("传入的dst为:" + dst);
        pw.println("传入的md5为:" + md5);
        pw.flush();
        pw.close();
    }
}

第二步:web.xml文件:在web.xml文件中配置写好的servlet即服务器端的代码。

<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>intelligentler</display-name>

  <servlet>
  <servlet-name>downloadservlet</servlet-name><!--两个name名字应该一样-->
  <servlet-class>com.zhoum.intelligentler.servlet.DownloadServlet</servlet-class>
  <!--class中写的是DownloadServlet的绝对路径-->
  </servlet>

  <servlet-mapping>
  <servlet-name>downloadservlet</servlet-name>
  <url-pattern>/servlet/download</url-pattern><!--通过这个url来访问服务器端代码-->
  </servlet-mapping>

</web-app>

第三步:启动tomcat服务器,输入网址:http://localhost:8080/intelligentler/servlet/download

从以上的demo可以看出,用户通过输入url(url-pattern)来定位到对应的servlet-name,然后再从servlet-name对应到servlet-name的绝对路径servlet-class,来执行服务器段代码DownloadServlet.

一、有两种应用程序
1、桌面应用程序:需要下载,安装,更新等。如QQ,office等
2、web应用程序:就是我们开发的web项目,这不需要用户下载,只需要用户客户端联网,访问相应的互联网资源。
二、Http协议
HTTP是一个属于应用层的面向对象的超文本传输协议,基于TCP/IP协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。HTTP特点:
(1)无连接:分为4个阶段:建立连接、发送请求、等待响应、关闭连接
优点:快速、简单、不占用网络服务器资源
缺点:速度由网络来决定,每次传输数据量不能太大
(2)无状态:HTTP 协议只负责传输数据,不负责保管所传递的数据.
Http访问服务器资源的方式
1、URL:(Uniform/Universal Resource Locator)统一资源定位符,请求的是服务器上的资源。资源是一个抽象的概念,指存放在服务器上的能够被客户端访问到的所有类型的文件(比如:文本、图片、音频、视频等)。
2、表单提交
get和post方法的区别
⑴get方法通过URL传递参数,用户在客户端地址栏可见,如果是传递密码的话,不安全;post方法通过请求的body传递参数,用户在客户端不可见,更安全。
⑵get方法通过地址栏URL传递请求,而URL本身有长度限制,一般不超过255个字符;post方法通过请求body传递参数,没有长度限制。
三、Servlet
1、Servlet概念:
首先Servlet是一个java应用程序----->服务器端的java应用程序----->具有独立于平台和协议的特性----->可生成动态的Web页面。
Servlet担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。客户请求<----->Servlet<------>服务器响应
2、Servlet生命周期
指Servlet对象在服务器内存中从创建到调用,到销毁的整个过程。
(1)实例化:当客户端通过URL请求的时候,web容器根据web.xml配置自动调用该Servlet的构造方法,实例化对象。
(2)初始化:通过该servlet对象调用init()方法,读取web.xml中该servlet的配置信息,为service方法提供相关数据。
(3)服务:通过该对象调用service()方法,如果是继承HttpServlet,则根据请求头信息中的请求方法,调用对应的doGet()/doPost()
(4)销毁:不是在service()方法调用完后,立即调用,而是由JVM来决定。当JVM需要销毁一些对象、释放内存空间的时候,才会去调用该实例的destroy()方法。
3、HttpServletRequest(interface)
公共接口类HttpServletRequest继承自ServletRequest.客户端浏览器发出的请求被封装成为一个HttpServletRequest对象。所有的信息包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统都包含在其内。
4、HttpServletResponse(interface)
代表服务器向浏览器返回的响应直接输出内容到浏览器,使用Servlet输出HTML页面
PrintWriter out = response.getWriter();
out.print("Hello :");
设置响应的内容类型:
response.setContentType("text/html; charset=UTF-8");
注意:使用response对象跳转,可以跳到项目外的一个URL资源上
如:response.sendRedirect(“http://www.baidu.com”);
使用request对象跳转,只能在本项目资源中跳转
如:request.getRequestDispatcher(“url”).forward(request,response);
5、javax.servlet.RequestDispatcher(interface)
对请求响应进行补充的一个接口,主要负责两个功能
RequestDispatcher disp = request.getRequestDispatcher("login_ok.jsp");
(1)跳转
disp.forward(ServletRequest,ServletResponse);
(2)包含
disp.include(ServletRequest,ServletResponse);
程序中一般连写:
request.getRequestDispatcher("login_ok.jsp").forward(request,response);
6、HttpSession(interface)
是在服务器端保存数据最常见的方式
Session:会话,(进行某活动连续的)一段时间,使用该对象可以完成一定的操作。会话信息的范围仅限于当前Web应用程序(
ServletContext
),因此存储在一个上下文中的信息在另一个上下文中不是直接可见的。
Ⅰ.Hibernate中Session和Servlet中HttpSession的区别
Hibernate中Session对象:主要作用是数据库连接、数据库操作
Servlet中HttpSession对象:
(1)帮助服务器,识别不同的浏览器
(2)帮助服务器传递数据到不同的Servlet或JSP页面
(3)能够人工控制连续的时间段的长短。
Ⅱ.HttpSession 对象的常用方法:
(1)创建
HttpSession session = request.getSession(true);
要求服务器端重新创建一个session对象
HttpSession session = request.getSession(false);
不需要服务器端新建session对象,只需要从已有的session中取一个
HttpSession session = request.getSession();
没有要求,由服务器自动分配
(2)识别浏览器
//随机生成一个不重复的id,随着响应发送给浏览器,绑定在浏览器中,每次浏览器请求,都会把该id返回并与服务器端的id对比
String id = session.getId();
(3)传递数据
//把数据存入session中
session.setAttribute("name",object);
//在其他Servlet或jsp页面中取出数据
Object obj = session.getAttribute("name");
一般情况下,需要先判断是否为空,再取值
(4)设置有效时间
一个session对象默认有30分钟的有效时间

 //设置单个session对象的最长有效时间
    session.setMaxInactiveInterval(60*60*24秒);
    //设置整个工程中所有session的有效时间
    <session-config>
        <session-timeout>20000</session-timeout>
    </session-config>
(5)清除数据
session.removeAttribute("name");
(6)设置Session失效或钝化
session.invalidate();

例如:
Session类似储物柜,最主要作用就是存取数据
寝室的储物柜:
(1)一人一个
(2)能够存取东西
(3)一般的一个柜子一把钥匙
(4)特殊情况,可以给柜子贴封条
(5)有时候柜子可能两个人或N个人共用

20人推荐
随时随地看视频
慕课网APP