【11】Servlet

Servlet

开发动态web资源的技术,采用单例设计模式.其实就是一个可以向浏览器输出数据或者接收用户的请求数据的java类。

一、使用Servlet

  1. 编写一个类,实现Servlet接口或继承实现类(GenericServlet、HttpServlet)

  2. 部署到web服务器中

二、tomcat对java工程要求的目录结构

工程名
|
|-- 静态web资源 ——>外界可直接访问
|-- WEB-INF ——>外界无法非法直接访问,由服务器调用
    |--classes  ——>存储所有的class文件
    |--lib  ——>需要使用的jar包
    |--web.xml  ——>servlet的配置信息
<web-app>
    <servlet>
        <servlet-name>别名</servlet-name>
        <servlet-class>完整类名</servlet-class>
        <init-param>
            <param-name></param-name>
            <param-value></param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>别名</servlet-name>
        <url-pattern>URL路径</erl-pattern>
    </servlet-mapping>
</web-app>

三、生命周期

  1. init ——>初始化工作,比如读取配置文件,有且只有调用一次(单例模式)
  2. service——>处理用户请求
  3. destroy——>清理资源,移除时调用

四、运行原理

  1. 通过URI定位,与web.xml匹配获取全类名
  2. 用反射创建servlet对象并调用init方法
  3. 创建request对象封装用户的请求
  4. 创建response对象并调用service方法处理用户请求

五、映射问题

  1. 一个Servlet可以映射多个url路径的

    • 方式一:配置多个servlet-mapping
    • 方式二:配置多个url-pattern
  2. servlet-nameservlet-class的绑定要在servlet-mapping

  3. 映射路径的通配符(固定)

    • 路径匹配:”/”开头,”/*”结尾
    • 文件扩展名匹配:”*.扩展名”
    • 注意:
      • ”*”在中间是普通字符,而非通配符
      • 映射冲突时,”/”开头的优先级>”*”开头的优先级>默认映射
    • 配置缺省Servle<url-pattern>/</url-pattern>时,如果根路径中有静态页面(非jsp)是访问不到的,为什么?

六、HttpRequest对象

代表了客户端的请求,HTTP请求的所有信息都被封装到这个对象

  1. 获取客户端的信息

    request.getMethod();//获取请求方式
    request.getRequestURI();//获取请求的资源
    request.getProtocol();//获取请求的协议
    request.getHeaderNames();//获取所有请求头,返回Enumeration
  2. 获取请求参数

    request.getParameter(name); //获取单值的请求参数
    request.getParameterValues(name); // 获取多值的请求参数
    request.setCharacterEncoding("UTF-8"); //通知Request对象获取实体内容时用UTF-8
    new String(getBytes("iso8859-1"),"utf-8");//解决URI参数乱码问题
  3. 作为域对象传递数据
    域对象:可以存储数据,也可以把数据传递给其他Servlet.

    //Servlet1
    request.setAttribute(name,value);//添加数据
    request.getRequestDispatcher("/Servlet2").forward(request,response);//请求转发,共享请求数据
    //Servlet2
    request.getAttribute(name);//获取数据
    request.removeAttribute(name);//移除共享
  4. 请求重定向和请求转发

    • 请求重定向
      • 原理:由浏览器发出新的请求,新建Request对象
      • 浏览器地址栏改变
      • 是request的方法
    • 请求转发
      • 原理:由服务器发出请求,浏览器不知道,不新建Request对象
      • 浏览器地址栏不变
      • 只能转发到同一个WEB应用的组件
      • 是response的方法
    • 注意:URI中的”/”在服务器代表工程的根,在浏览器代表主机
response.sendRedirect("/day08/message.jsp");//请求重定向
request.getRequestDispatcher("/message.jsp").forward(request, response);//请求转发

七、HttpResponse对象

主要功能是向浏览器输出数据和通知浏览器处理一些信息。(见HTTP的笔记

八、ServletContext

  1. 由Tomcat启动时为各个工程创建一个ServletContext对象,代表整个WEB工程
  2. 获取当前应用路径

    getServletContext().getContextPath();
  3. 向浏览器输入信息

    getWrite()
  4. 解决硬编码问题
    在web.xml配置

    <context-param>
        <param-name>charset</param-name>
        <param-value>utf-8</param-value>
    </context-param>

    然后再

    String charset= getServletContext().getInitParameter("charset");
    request.setContentType("text/html;charset="+charset);
    response.setCharacterEncoding(charset);
  5. 作为域对象使用

    存放的数据可以供工程内的所有Servlet使用,具体使用跟其他域对象(比如上文的request)差不多。

  6. 获取文件资源

    InputStream in = getServletContext().getResourceAsStream(uri);
    String root = getServletContext().getRealPath(uri);

九、Servlet的缺点

  • 所有HTML标签都要包在Java字符串中,难以排版
  • 所有的文本和HTML标签都要进行硬编码,修改需要重新编译
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值