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常见结构

@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()方法,常用的具体如下:

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重定向到其他站点的资源。

public void sendRedirect(String location) throws IOException;   //location可使用绝对URL和相对URL

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

    工作原理:

    

    请求分派

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

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)等方法来利用请求域属性传递对象数据。实例如下:

boolean isError=true;
request.setAttribute("error", isError);
request.getRequestDispatcher("servletcom.jsp").forward(request, response);
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>进行跳转。        

JSP/Servlet Web 学习笔记 DayFour的更多相关文章

  1. JSP/Servlet Web 学习笔记 DayOne

    JSP概述 1)JSP是一种动态网页技术标准,它是在传统的页面HTML文件中插入Java程序段和JSP标记(tag),从而形成JSP文件(*.jsp),也称JSP页面. 2)JSP容器是一个支持JSP ...

  2. JSP/Servlet Web 学习笔记 DayTwo

    JSP指令 a)page指令 定义JSP文件中的全局属性.一个JSP页面可以包含多个page指令.除了Import以外,其他page指令定义的属性/值只能出现一次. 其详细语法为: <%page ...

  3. JSP/Servlet Web 学习笔记 DaySix —— EL表达式

    1)EL从scope中得到参数时可以自动转换类型,因此对于类型转换的限制更加宽松. 2)使用EL表达式,可以简化变量和对象的访问. 3)EL表达式必须以 ${XXXX} 来表示. 4)EL提供点(.) ...

  4. JSP/Servlet Web 学习笔记 DayFive

    ServletConfig <只对当前Servlet有效> (1)在Web容器初始化Servlet实例时,都会为这个Servlet准备一个唯一的ServletConfig实例(俗称Serv ...

  5. JSP/Servlet Web 学习笔记 DayThree

    JSP内置对象 使用JSP语法可以存取这些内置对象来执行JSP网页的Servlet环境相互作用.内置对象其实是由特定的Java类所产生的.每一种内置对象都映射到一个特定的Java类或者端口,在服务器运 ...

  6. JSP/Servlet Web 学习笔记 DayThree —— 实现一个登陆小界面

    项目说明 利用JSP.HTML.JS实现了一个简易的登陆系统.根据前两天的所学,实现了如下功能: a)用户名.密码验证(不基于数据库,只做一个简单的表单数据获取并验证) b)页面访问次数统计 c)验证 ...

  7. [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. Java Web学习笔记之---JSP

    Java Web学习笔记之---JSP (一)JSP常用语法 (1)HTML注释 <!--所要注释的内容 --> 在客户端显示一个注释. (2)隐藏注释 <%--所要注释的内容--% ...

  9. java web 学习笔记 编码问题总结

       java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...

随机推荐

  1. P1024 一元三次方程求解

    P1024 一元三次方程求解 #include<cstdio> #include<iostream> #include<algorithm> using names ...

  2. [干货分享]一篇可能会让你爱上MVVM与ReactiveCocoa的文章

    概要 在此工程中,本文将讨论将MVC改造为MVVM需要的一些基本方法,同时会适当穿插部分关于MVVM概念性的讨论!本文最大的意义在于,提供了一种读者可以复现的方式,逐步引出从MVC向MVVM尽可能平滑 ...

  3. ES6的数组方法之Array.from

    首先说说什么是数组:数组在类型划分上归为Object,属于比较特殊的对象,数组的索引值类似于对象的key值. 数组的几个注意点: 1.数组的长度是可读属性,不可更改,数组的长度根据索引最大值. 2.数 ...

  4. LunaSchedule记录

    博客访问量突破10000!!!(值得高兴一下 用一学期超级课程表,被50+M的内存占用,巨慢的加载速度给弄烦了,就自己开发了一款课程表管理程式 添加日历订阅,自动导入到系统日历,无需安装任何app L ...

  5. 深入理解java虚拟机学习笔记(二)垃圾回收策略

    上篇文章介绍了JVM内存模型的相关知识,其实还有些内容可以更深入的介绍下,比如运行时常量池的动态插入,直接内存等,后期抽空再完善下上篇博客,今天来介绍下JVM中的一些垃圾回收策略.        一. ...

  6. Tomcat+jdk 环境处理 java jsp代码编写web环境的容器

    Tomcat是由 Apache 软件基金会下属的 Jakarta 项目开发的一个Servlet 容器,按照 SunMicrosystems 提供的技术规范,实现了对 Servlet 和 JavaSer ...

  7. scrapy--selenium(二)

    今天学习了很多,还是想给大家讲一讲正题:scrapy的动态加载AJax的网页爬取:selenium.让我们开始 三: 针对大型电商网站:京东网,因为比较有代表性,爬出来有点小成就.先给大家看下效果图. ...

  8. strak组件(8):基本增删改查实现及应用和排序

    效果图: 新增函数: def reverse_common_url(self, name, *args, **kwargs) 反向生成url,需要传增删改的url作为参数,携带原参数 def reve ...

  9. 笔记-爬虫-js代码解析

    笔记-爬虫-js代码解析 1.      js代码解析 1.1.    前言 在爬取网站时经常会有js生成关键信息,而且js代码是混淆过的. 以瓜子二手车为例,直接请求https://www.guaz ...

  10. spark streaming的应用

    今天我们讲spark streaming的应用,这个是实时处理的,类似于Storm以及Flink相关的知识点, 说来也巧,今天的自己也去听了关于Flink的相关的讲座,可惜自己没有听得特别清楚,好像是 ...