一、Servlet 注册

  web.xml里边注册Servlet ,定义格式如下:

  <servlet>
    <servlet-name>helloworld</servlet-name>
    <servlet-class>golden.test.helloworld</servlet-class>
    <init-param>
      <param-name></param-name>
      <param-value></param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>helloworld</servlet-name>
    <url-pattern>/helloworld</url-pattern>
  </servlet-mapping>

二、Servlet 生命周期

  init

    ServletConfig->StandardWrapperFacade

    初始化参数,通过config.getInitParameterNames()获取,数据来源于web.xml对Servlet的init-param参数配置

    ServletContext 上下文,通过config.getServletContext()获取

  service

    ServletRequest->HttpServletRequest->RequestFacade

    ServletResponse->HttpServletResponse->ResponseFacade

  destory

三、Servlet一些类、方法、配置、使用方式

  GenericServlet

  HttpServlet

  load-on-startup Web.xml配置文件启动加载

  url-pattern 通配符   *.xxx  比如.do   .action   /开头或者*.开头

  ServletContext获取路径

    context.getRealPath("")  Web应用的根目录

    context.getResource("index.jsp")  返回Url   url.getPath()返回Web访问路径:/localhost/app/index.jsp

    context.getResourceAsStream("abc.txt")

  ServletContext属性操作(设置、获取、删除)

    context.setAttribute("username","zhangsan");

    context.getAttribute("username");

    context.removeAttribute("username");

  ServletContext获取初始化参数

    context.getInitParameterNames()  数据来源于web.xml的context-param参数配置

  重定向redirect

    服务器通知浏览器请求另外一个地址。 response.setRedirect("topage.html");

  转发forward

    服务器内部转发行为。只输出最后一个Servlet的Response数据。

    RequestDispatcher dispatcher = request.getRequestDispatcher("to_servlet_name");

    dispatcher.forward(request,response);

  包含include

    服务器内部Include行为。

    RequestDispatcher dispatcher = request.getRequestDispatcher("to_servlet_name");

    dispatcher.include(request,response);

四、Response发送数据

  使用字节流  

ServletOutputStream os = response.getOutputStream();
String data = "EN中文";
response.setContentType("text/html;charset=utf-8");//设置浏览器字符解码方式 如果不设置,默认ISO 8859-1传输,浏览器默认解码使用GBK
os.write(data.getBytes("UTF-8"));//设置流字符编码,与浏览器字符解码一致 如果不设置,默认GBK
// os.println(data);//异常报告:不是ISO 8859-1字符:[中]

  使用字符流

response.setContentType("text/html;charset=utf-8");//设置浏览器字符编码解析方式
// response.setCharacterEncoding("utf-8");
PrintWriter pw = response.getWriter();
pw.append("EN中文"); 

五、Request获取数据

// POST方式 中文处理
request.setCharacterEncoding("UTF-8"); Enumeration<String> names = = request.getParameterNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
String value = request.getParameter(name);
pw.println(name + ": " + value); // GET方式 中文处理
// pw.println(name + ": " + new String(value.getBytes("ISO-8859-1"), "UTF-8"));

 //相关路径
 request.getRequestPath(); //返回值:http://localhost:8080/appName/login
 request.getContextPath(); //返回值:/AppName
 request.getServletPath(); //返回值:/login

六、Cookie

//添加Cookie
Cookie ck = new Cookie("username", "golden");
ck.setMaxAge(24 * 60 * 60);//单位秒,如果不设置,默认有效期Session
response.addCookie(ck); //添加中文Cookie http协议 ISO-8859-1
Cookie ck = new Cookie("username", URLEncoder.encode("中文","utf-8"));
response.addCookie(ck); //获取Cookie
Cookie[] cookies = request.getCookies(); //Cookie路径
//目录1:/app/dir1/
//目录2:/app/dir1/dir2/
//目录2下可以读取目录2和目录1的Cookie,目录1下只能读取目录1的Cookie //Cookie路径设置
ck.setPath("/"); //设置根目录

七、Session 

HttpSession sess = request.getSession();
pw.println(sess.isNew());
pw.println(sess.getId()); //设置JSESSIONID有效期
ck = new Cookie("JSESSIONID", sess.getId());
ck.setMaxAge(24 * 60 * 60);
response.addCookie(ck); //Cookie被禁用 可以使用Url重写jsessionid=0285723C18EFFFBCE08036933A9AC59A
//调用encodeUrl或者encodeRedirectUrl后,urlString变为login;jsessionid=0285723C18EFFFBCE08036933A9AC59A
//前提:urlString为有效地址
String urlString="/login";
urlString = response.encodeUrl(urlString)
urlString = response.encodeRedirectUrl(urlString);//空串不会输出

八、JSP

  JSP Page指令

    用来定义JSP文件的全局属性。

    格式:<%@ page language="java" %>

         <%@ page import="java.util.List" %>

              <%@ page isErrorPage="true"  errorPage=""err.jsp%> //很少用

  JSP Include指令 静态包含

  JSP 脚本命令

    声明标签:<%! java方法或者字段 %>

    表达式标签:<%= (1+2) %>

    代码块标签:<%  代码块 %>

  JSP 注释 <%--   注释内容   --%>

  JSP内置对象

    四大作用域: ServletContext application、 HttpSession session、 HttpRequest request、  Object page

    ServletConfig config、HttpServletResponse response、 exception、JspWriter out、pageContext

  PageContext    

<%
pageContext.setAttribute("user", "golden");
pageContext.setAttribute("user", "golden PAGE_SCOPE",PageContext.PAGE_SCOPE);
pageContext.setAttribute("user", "golden REQUEST_SCOPE",PageContext.REQUEST_SCOPE);
pageContext.setAttribute("user", "golden SESSION_SCOPE",PageContext.SESSION_SCOPE);
pageContext.setAttribute("user", "golden APPLICATION_SCOPE",PageContext.APPLICATION_SCOPE);
%> <%= pageContext.findAttribute("user") %>
<%= pageContext.getAttribute("user") %>

  JSP forward标签

    <jsp:forward page="topage.jsp">

      <jsp:param name="username", value="zhangsan"></jsp:param>  // 通过参数对象${param.username}获取 EL表达式

    </jsp:forward>

  JSP Include 动态包含

    <jsp:include page="topage.jsp"></jsp:include>  //也可以增加jsp:param

  EL表达式运算符

    加:$(1+1)

    减:$(2-1)

    乘:$(3*2)

    除:$(4/2)   $(4 div 2)

    余:$(5%2)  $(5 mod 2)

    还有下标访问、关系运算符、逻辑运算符等,与Java基本一样。

  EL 

<%= pageContext.findAttribute("username") %> 与 ${username} 一致,都是从四大作用域获取数据。
四大作用域:requestScope、pageScope、applictionScope、sessionScope。指定域获取数据,例如:${requestScope.username}

${headerValues} //请求头对象集合

  JSTL javaserver pages standard tag lib 标准通用函数库

    使用步骤:

    1、导包

    2、使用taglib指令声明引用 <% taglib prefix="c" uri="http://java.sum.com/jstl/……" %>

    3、标签

      set标签 用了将变量存储在jsp范围或者javabean的属性。

      格式1:<c:set value="zhangsan" var="username" [scope="page|request"]/>

      格式2:<c:set target="${objName}" property="" value="" [scope="page|request"]/>

           out标签

      <c:out value=""  escapeXml="false" default=""/>     escapeXml为false时,翻译成Html输出,否则原样输出。

           if标签

      <c:if test="">hehe</c:if>

      <c:choose>

        <c:when  test="">1</c:when>

        <c:when  test="">2</c:when>

        <c:otherwise>99</c:otherwise>

      </c:choose>

      foreach标签

      <c:foreach items="${mylist}"  var="item" begin="" end="" step="">

        ${item.propertyname}

      </c:foreach>

九、应用举例

  1、重定向

response.setStatus(302);
response.setHeader("location","toPage.html');

  2、数据压缩

String data="aaa";
for (int i=0; i<10000; i++){
  data+="aaa";
}
System.out.println("原始数据大小:"+data.getBytes().length);

ByteArrayOutputStream bout=new ByteArrayOutputStream();
GZIPOutputStream goutenew GZIPOutputStream(bout);
gout.write(data.getBytes());
gout.close();
byte[] byteArray=bout.toByteArray();
response.setHeader("Content-Encoding","gzip");
response.setHeader("Content-length", byteArray.length+"");
response.getOutputStream().write(byteArray);

  3、浏览器定时刷新

response.setHeader("refresh","5;toPage.html");

  4、浏览器下载

response.setHeader("content-disposition""attachment;filename=downloadname.jpg");
String path = this.getServletContext().getRealPath("/1.jpg");
FileInputStream in=new FileInputStream(path); byte buffer[] =new byte[1024];
int len=0;
OutputStream out = response.getoutputstream();
while ((len = in.read(buffer))>0){
out.write(buffer,o,len);
}
out.close();
in.close();

Servlet与JSP学习笔记的更多相关文章

  1. Servlet和JSP读书笔记(二)

    一. GenericServlet 1. 前面写的 Servlet和JSP学习笔记(一) 中的实例都是通过实现Servlet接口编写的,这样存在的问题就是:你必须实现Servlet中的所有方法,而不管 ...

  2. JSP学习笔记

    JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...

  3. java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象

     JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...

  4. JSP 学习笔记1

    JSP 学习笔记   JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例--JSP页面有系统编译成Servlet,Servlet再负责响应用户请求. 1.JSP注释 < ...

  5. jsp学习笔记:mvc开发模式

    jsp学习笔记:mvc开发模式2017-10-12 22:17:33 model(javabe)与view层交互 view(视图层,html.jsp) controller(控制层,处理用户提交的信息 ...

  6. Servlet 3.1学习笔记

    Servlet 3.1学习笔记 参考文档 Servlet 3.1标准 什么是 Servlet ? Servlet 是基于 Java 平台的 Web 组件,由一个容器管理,能够生成动态内容. 什么是 S ...

  7. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  8. 测试Servlet生命周期学习笔记

    测试环境:windows xp旗舰版 软件环境:myclipse8.5+tomcat7.0 ****************************************************** ...

  9. JSP学习笔记2

    <JAVA遇见HTML——JSP篇>学习笔记(下) 1.Javabean Javabeans就是符合某种规范的java类,使用Javabeans的好处是[解决代码的重复编写],减少代码冗余 ...

  10. Servlet乘法表学习笔记

    一.控制台实现乘法表 package com.shanrengo; import java.io.IOException; import java.io.PrintWriter; import jav ...

随机推荐

  1. powergui模块基本设置

    Powergui模块可以显示系统稳定状态的电流和电压及电路(电感电流和电容电压)所有的状态变量值. 尤其是电力电子仿真中需要加入powergui模块,否则会报错. simulink仿真用到simpow ...

  2. wsl 的 tail -f 不好使

    windows 上的sub linux ubuntu 的tail -f 不好使 在/etc/profile 中加入alias alias tailf='tail -f ---disable-inoti ...

  3. 使用moment获取本周、前n周、后n周开始结束日期以及动态计算周数

    原文地址 https://blog.csdn.net/qq_43432158/article/details/124200343 项目中有一个需求:需要根据学期时间动态的计算出该学期有多少周 通过上网 ...

  4. IDEA debug时拷贝数据 Evaluate Expression窗口

    今日份鸡汤:别人再好,也是别人.自己再不堪,也是自己,独一无二的自己.只要努力去做最好的自己,一生足矣.为自己的人生负责,为自己的梦想买单. 用IDEA调试时候经常需要拷贝变量值出来排查,特别是数据结 ...

  5. uniapp 图片文件流

    uni.request({ url: '*****', //仅为示例,并非真实接口地址. method: 'GET', responseType: 'arraybuffer', data: {}, h ...

  6. vim超级替换

    vim实现变量替换, 检测代码中#0-F0-FH替换为0x0-F0-F,例如#09FH替换为0x09F :%s/#\(\w\)\(\w\)\(\w\)H/0x\1\2\3/g 注: 标准格式 :s/p ...

  7. MySQL日常工具的安装

    安装PT工具 #安装依赖 yum -y install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-Digest-M ...

  8. 【C学习笔记】【分享】day2-2 不允许创建临时变量,交换两个数的内容(附加题)

    加法实现: #include <stdio.h> int main() { int a = 30; int b = 20; a = a + b; b = a - b; a = a - b; ...

  9. Python切换中英文输入法

    要实现中英文切换,首先Windows系统必须要有中文语言和英文语言,才能实现输入法(语言)切换. import win32api import win32gui from win32con impor ...

  10. mac新仙剑奇侠传 2018

    新仙剑奇侠传 201803重制 下载,挂载后,拖动app到applications应用程序 文件夹即可. https://590m.com/f/28636472-500476381-5c8846 (访 ...