前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JSP/Servlet Web 学习笔记 DayFour

JSP/Servlet Web 学习笔记 DayFour

作者头像
Rekent
发布2018-09-04 15:12:34
5220
发布2018-09-04 15:12:34
举报
文章被收录于专栏:日常分享日常分享

Servlet概述

  Servelt是使用Java Servlet应用程序接口及相关类和方法的Java程序。

  Servlet是用Java编写的Server端程序,它与协议和平台无关。Servlet运行于Java服务器中。

  Java Servlet API 定义了Servlet和服务器之间的标准接口,这使得Servlet具有跨服务器平台的特性

  通常,Servlet采用一种无状态的“请求-响应”模型来访问。它能处理客户端传来的Http请求,从中提取参数,处理业务逻辑,最终返回数据或输出HTML。它还可以访问数据库,进行计算,并和Enterprise JavaBean 组件进行通信。


 Servlet的运行原理

  见之前的JSP运行原理。


Servlet的生命周期

  有javax.servlet.Servlet定义。

  装载类--->初始化(init())--->服务(service())--->销毁(destroy())


Servlet常见结构

代码语言:javascript
复制
@WebServlet("/Name")
public class Servlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
   *  init()
     */
    public Servlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   * 处理get请求
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doPost(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
   * 处理post请求
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        
        
        
    }

}

Servlet获取请求中的参数

  类似于JSP,采用getParameter()方法,常用的具体如下:

代码语言:javascript
复制
public String getParameter(String name);   //获取指定名称的参数值
public String[] getParameterValues(String name); //适用于一个参数名对应多个值的情况
public java.util.Enumeration getParameterNames(); //返回一个包含请求消息中所有参数名的枚举对象。
public java.util.Map getParamterMap(); //返回所有参数名和对应参数值的map

数据乱码问题:

      POST方法:按HTML页面指定的编码进行编码。

            在Servelt类的请求处理方法需先调用HttpServletRequest接口的setCharacterEncoding(String enc)方法使数据按参数编码。

通常使用response.setContentType("text/html;charset=utf-8")即可。

      GET方法:参数被拼接到URL后面提交。即上述方法已经不起作用。

           在发送这些数据前先手工把他们按页面指定的编码方式编码好:java.net.URLEncoder.encode(String s,String enc)方法。然后再发送。

           再Servlet类的请求处理方法中再手工解码:java.net.URLDecoder.decode(String s,String enc)方法。

最好的做法是再URL中不要使用中文等非ASCII字符。


重定向 && 请求分派

绝对URL

以“/”开头的路径,指的是相对于Web应用根目录的路径。

相对URL

不是以“/”开头的路径,指的是相对于当前路径目录的路径。

    重定向

    相关方法: HttpServletRequest接口提供的sendRedirect()

    说明:不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一容器中的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源

代码语言:javascript
复制
public void sendRedirect(String location) throws IOException;   //location可使用绝对URL和相对URL

注意:重定向会将当前URL改变为定向后的程序的URL,即Get方法不能通过重定向传递给后者。发起者和被调用者使用各自的request和response实例。

    工作原理:

    请求分派

    相关方法:  Servlet API中定义了一个RequestDispatcher接口,俗称请求分派器。它定义了如下两个方法:

代码语言:javascript
复制
public void forward(ServletRequest request,ServletResponse response) throws ServletException, IOException;

public void include(ServletRequest request,ServletResponse response)    throws ServletException, IOException;

    说明:获取RequestDispatcher实例的方法有两种

          调用ServletContext接口提供的getRequestDispatcher(String url)    URL必须为绝对路径

          调用ServletRequest接口提供的getRequestDispatcher(String url)    URL可以为相对路径,也可以为相对路径

       只能将请求转发给同一个Web应用中的其他组件,不能转发到其他站点的资源。

注意:请求转发过程接受后,浏览器保持初始的URL地址不变。并且发起者和被调用者共用一个request和response实例。

    工作原理:

   另外:因为公用一个request、response实例,则该方法可以利用setAttribute(String name, Oject obj)以及getAttribute(String name)等方法来利用请求域属性传递对象数据。实例如下:

代码语言:javascript
复制
boolean isError=true;
request.setAttribute("error", isError);
request.getRequestDispatcher("servletcom.jsp").forward(request, response);
代码语言:javascript
复制
boolean a=(boolean)request.getAttribute("error");
跳转的另一端直接获取即可

Servlet的调用

  1)URL调用:当在配置文件中指定Servlet映射地址后,可直接从浏览器调用Servlet,如:

       http://localhost:8080/helloworld

  2)JSP文件中调用:可使用<jsp:include>或者<jsp:forward>语句在JSP页面中调用一个Servlet,如:

         <jsp:include page="/Servlet" flush="true"/>

    页面执行中,当遇到这一句会跳转到响应的Servlet,当Servlet执行结束后控制权又回到原来的JSP页面中。

    也可以用<jsp:forward>进行跳转。        

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Servlet概述
  •  Servlet的运行原理
  • Servlet的生命周期
  • Servlet常见结构
  • Servlet获取请求中的参数
  • 重定向 && 请求分派
    •     重定向
      •     请求分派
      • Servlet的调用
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档