JSP和Servlet知识点总结_servlet+jsp和b/s对比-程序员宅基地

技术标签: JAVAWEB  JSP  Servlet  

第一章: 动态网页开发基础

三大领域: B/S(网站)C/S(QQ) 嵌入式开发(苹果,安卓手机)

动态网页/静态网页:

所需技术:html,css,数据库,javascript,xml,一门高级语言(java,C#,PHP)

主流的动态网页技术:jsp/asp.net/php

Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个Web服务器是Apache Nginx IIS(Microsoft的Internet信息服务器(Internet Information Services,IIS)
 

常见的web服务器:                 

                     1. weblogic   oracle 公司

                     2. websphere  IBM公司  

                     3. Jboss 免费的开源的

                     4. tomcat 小型的

一、JSP 定义: 1)Java Server Page, Java EE 组件,本质上是 Servlet。

                    2)运行在 Web Container.接收 Http Request,生成 Http Response(默认协议是 Http 请求和响应)

                    3)JSP 使得我们能够分离页面的静态 HTML 和动态部分——我们需要的技术。

                    4)使页面可以混和html代码、Java代码以及JSP标签;允许访问组件

2、JSP出现:servlet做界面比较麻烦

3、JSP是编译运行,PHP为解释运行 (注)解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器,但这种方式比较灵活,可以动态地调整、修改应用程序。编译类:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(*.OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。

4、Tomcat的获取与安装

1. Tomcat安装完毕后要设置TOMCAT_HOME环境变量设置方法与java环境变量步骤类似,设置值为Tomcat的安装目录

2. Tomcat启动与停止

通过服务器实现启动或停止

通过控制面板>管理工具>服务>鼠标右击Apache Tomcat选择启动停止

通过Tomcat菜单中的Monitor Tomcat工具启动或停止Tomcat服务

通过所有程序>Apache Tomcat XX>Monitor Tomcat>General选择启动或停止
 

5、Tomcat目录结构

/bin              存放各种平台下用于启动和停止Tomcat的脚本文件

/conf            存放Tomcat服务器的各种配置文件,其中最重要的是server.xml

/lib              存放Tomcat服务器所需的各种JAR文件

/logs            存放Tomcat的日志文件

/temp           Tomcat运行时用于存放临时文件

/webapps        Web应用的发布目录

/work           Tomcat把由JSP生成的Servlet放于此目录下

6、server.xml 配置

端口号的配置:

    Tomcat目录下>conf>server.xml  打开后找到<Connector>节点然后修改port属性

    http://localhost:8080/

Web应用的目录结构,web应用是位于tomcat/webapps目录下的一个子目录

      /    web的根目录存放各类jsp,html

      /WEB-INF     存放应用程序所使用的各种资源包括web.xml

      /WEB-INF/classes  存放class文件

      /WEB-INF/lib      存放JAR文件

配置web应用起始页:

     修改web.xml文件中的以下两个标签,注意标签名

      <welcome-file-list>

     <welcome-file>index.jsp</welcome-file>

      </welcome-file-list>

第二章-JSP的组成

JSP的执行过程: 翻译阶段

      编译阶段

   执行阶段

 JSP页面组成:静态内容 ,指令,表达式 ,小脚本 ,声明 ,注释

JSP中的注释:HTML注释,JSP注释标记,

JSP指令元素page

              Language属性

              Import属性

              contentType属性

             举例: <%@ page language="java" import="java.util.*,java.text.*"  contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

jsp表达式:其语法为<%=  java表达式%>,容器会先计算表达式的值或者变量的值,然后将结果输出的页面

jsp声明 可以定义变量和方法,其中变量的值会一直保持,页面刷新不会重置该变量的值

定义在小脚本里面的变量,每次刷新页面会重置该变量的值

jsp页面中的代码执行加载顺序

java是在生成页面时在服务器端运行的代码,jsp在服务器的servlet里运行,而javascript和html都是页面生成完在浏览器端运行的代码。所以加载执行顺序是是java>jsp>js。

第三章-jsp数据交互

JSP内置对象:request,response,out,application,session

1. Request对象专门用于处理客户端请求

Request方法:String  getParamenter(根据页面表单组件名称获取页面提交数据)

             String[] getParamenterValues(获取一个页面表单组件对应多个值时的用户请求数据)

             Void setCharacterEncoding(解决中文乱码)

             Request.getRequsestDispacher(path)(返回一个javax.servlet.RequestDispacher对象,该对象用forward方法用于转发请求)

2.  JSP内置对象response

1. response对象与request对象相对应,它用于响应客户端输出信息

2. response对象几个常用方法

  addCookie(Cookie cookie) 在客户端添加Cookie

  setContentType(String type) 设置HTTP响应的contentType类型

  setCharacterEncoding(String chareet)设置响应所采用的字符编码类型

 重点:( sendRedirect(String path) 将请求重新定位到一个不同的URL上)

(注)1. 什么是转发:

     使用request的getRequestDispatcher()方法即可实现

     转发就是将客户端发送请求到服务器,Web服务器内部的方法在容器内完成处理和请求和转发,然后将目标资源发送给浏览器,不管服务器内部如何处理,浏览器都只提出了一个请求,因而客户端的URL地址不会发生改变,因此可以共享request范围内的数据   转发的作用:在多个页面交互的过程中实现请求术数据的共享。

    2. 重定向的执行结果就是客户端重新向服务器请求一个地址链接,由于是发送新的请求因而上次请求中的数据将丢失这种行为就是重定向  response.sendRedirect("welcome.jsp")]

重定向和转发的区别

区别一:

  重定向时浏览器上的网址改变

  转发是浏览器上的网址不变

区别二:

  重定向实际上产生了两次请求

转发只有一次请求

重定向:

  发送请求 -->服务器运行-->响应请求,返回给浏览器一个新的地址与响应码-->浏览器根据响应码,判定该响应为重定向,自动发送一个新的请求给服务器,请求地址为之前返回的地址-->服务器运行-->响应请求给浏览器

转发:

  发送请求 -->服务器运行-->进行请求的重新设置,例如通过request.setAttribute(name,value)-->根据转发的地址,获取该地址的网页-->响应请求给浏览器

区别三:

  重定向时的网址可以是任何网址

  转发的网址必须是本站点的网址

详解:

  重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。

转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起

三、JSP访问数据库

1. JDBC链接数据库

(1) 加载JDBC驱动。

(2) 与数据库建立链接。

(3) 发送SQL语句,并得到返回结果。

(4) 处理返回结果。

(5) 数据库访问结束后,进行资源释放。

使用JSP访问数据库,就是将JDBC访问数据库代码嵌入到JSP页面中,实现步骤与java相同。

第四章-状态管理

一. cookie

(一) 在jsp中使用cookie

1. 使用page指令

<%@page  import=”javax.servlet.http.cookie”%>

2. 创建cookie对象

Cookie  newCookie=new Cookie(String key,Object value);

3. 写入cookie

Response.addCookie(newCookie);

4. 读取cookie

Cookie[] cookies=request.getCookies();

(二)  cookie对象的几个方法60*60*24

  void    setMaxAge(int expiry)  设置有效期,单位秒

  void    setValue(String value)

  String  getName()

  String  getValue()

  Int     getMaxAge()  获取有效期,单位秒

二. session

(一)  session对象的几个常用方法

void   setAttribute(String key,Object value);

Object  getAttribute(String key)

void  invalidate()   设置session对象失效

String   getId()  获取session  id

void  setMaxInactiveInterval(int interval)   设置session的非活动时间

int  getMaxInactiveInterval()   获取session的有效非活动时间
 

 

 

 

(二) session和cookie的区别

1. session是在服务器端保存用户信息,cookie是在客户端保存用户信息

2. session中保存的是对象,cookie中保存的是字符串

3. session对象随会话结束而关闭,cookie可以长久保存在客户端

4. cookie通常用于保存不重要的用户信息,重要的信息使用session保存

session和cookie

默认情况下,浏览器同一个进程的不同页面共享临时Cookie,这个Cookie保存的SessionID成为服务器端识别Session的依据

Seesion对象有效期:一次会话(浏览器关闭可能导致会话结束)怎么判断会话结束:IE进程结束,重新打开或换个浏览器,否则在桌面上重新打开一个浏览器是指一个seesion对象

类似于生活中 当登录某个网站 关闭了改窗口 重新 打开时 依旧有效  

Seesion是保存在服务器中但是通过Cookie来实现

1. 重定向是客户端跳转,共有二次请求   转发是服务器端跳转 只有最开始打开页面的一次请求

  对Cookie的赋值只有等下一次浏览请求时才能生效

1.page代表JSP这个实例本身(用的少)

2.PageContext(域对象,存放数据只能在当前页面有效)

3.session(域对象,存放数据在一次会话有效)

4.applaction(域对象 存放数据在整个Web应用运行周期有效)

5.cookie是由服务器端生成,发送给客户端浏览器的,浏览器会将其保存在某个目录下的文本文件中。

通过cookie,可以实现浏览器与服务器之间的数据传递。

就WEB开发来说,一个会话就是用户通过浏览器与服务器之间的一次通话,它包含浏览器与服务器之间的多次请求、响应过程。

session与cookie均能实现信息的保存,但是二者的区别如下。

session是在服务器端保存用户信息,cookie是在客户端保存用户信息。

session中保存的是对象,cookie保存的是字符串。

session对象随会话结束而关闭,cookie可以长期保存在客户端。

cookie通常用于保存不重要的用户信息。我们可以降低代码的冗余问题,并且修改起来也更加方便

三.include指令:<%@  include file=”应用文件路径”%>

 

JSP的四种范围,分别为page、request、session、application

application:
全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。

session:
会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。

request:
请求作用域,就是客户端的一次请求。

page:
一个JSP页面。

以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward以及filte

 

四.application

   (一)常用方法:

  void  serAttribute(String key,Object value)

  Object  getAttribute(String key)  

  String  getRealPath(String path)  返回相对路径的真实路径

 

五.对象的范围

(一)page范围:单一jsp页面的范围

    pageContext.setAttribute(“属性名”,属性值)

(二) request范围:

request.setAttribute(“属性名”,属性值)

(三) session范围,可以跨越多个请求

session.setAttribute(“属性名”,属性值)

(四) application范围,全局有效

application.setAttribute(“属性名”,属性值)

 

六.jsp的常用内置对象:out,request,response,session,application

1)JavaBean是Java中可以跨平台的重用组件。

(2)JavaBean在应用中主要负责封装数据和封装业务处理。

(3)JavaBean的定义要遵循一定的规则,体现在以下几个方面:

    1.公有类,并提供无参的公有构造方法.

    2.属性私有。

    3.具有公有的访问属性珠getter和setter方法。


第六章 jsp开发业务应用

分页

分页就是显示数据,能够按照指定格式显示,布局清晰,不受信息数量限制。

目前的分页方式有多种,一种是将所有查询结果保存在session对象或集合中,翻页的时候从session或集合取出一页所需的数据显示。这种方法有两个主要的缺点:一是用户看到的可能是过期数据;二是如果量非常大,查询一次结果集会耗费很长时间,并且存储的数据也会占用大量内存,效率明显下降。

用SmartUpload组件实现文件上传

SmartUpload组件式一个实现文件上传的免费组件,虽然已不再提供更新,但由于使用简单方便依然被非常广泛地使用。

SmartUpload组件的应用:

<% page import=”com.jspsmart.upload.*” %>

<%

SmartUpload su =new SmartUpload();

//初始化SmartUpload对象

Su.initialize(pageContext);

Try{

Su.upload();

} catch(Exception e){

e.printSackTrace();

out.println(“你选择的文件上传失败!”);



}

//得到单个上传文件的信息

Com.jspsmart.upload.File file=su.getFiles().getFile(0);

//设置文件在服务器的保存位置

String filepath=”upload\\”;

Filepath+=file.getFileName();

//文件另存为

File.saveAs(filepath,smartUpload.SAVE_VIRTUAL);

%>


 

第八章-JSTL和EL

EL表达式

作用:快速定位到作用域中的变量及其属性。

特点:1.自动转换类型。

        2.使用简单

语法: ${EL表达式}

操作符:

.操作符:   可以获取对象的某个属性值(例:${employee.computer})

[]操作符:  既可以获取对象的某个属性值,也可以获取数组型对象的某个下标的值(例:${employee[“computer”]}, ${list[0]})

EL隐式对象

作用域访问对象:pageScope,requestScope,sessionScope,applicationScope。与page,request,session,application内置函数用法一致,可以访问作用域内设置的函数。(例requestScope.name)

参数访问对象:param,paramValues。可以访问对应标签的name属性值和JSTL中定义的变量。(例:${param.name}  ${paramValues.habits})

JSP隐式对象:pageContext提供对页面信息和JSP内置对象的访问

[注:若查找时不指定作用域范围,则会照pageScope-requestScope―sessionScope―applicationScope顺序查找]
 

JSTL标准标签库

作用:可实现对页面中的逻辑控制

[注:使用前要导入核心标签库:

<%@ taglib uri=”http://java.sun.com/jsp/jstl/core”  prefix=”c” %>   ]

通用标签

1.定义变量或重新赋值

<c:set var=”变量名” value=”值” scope=”范围”/>

     <c:set value=”值” target=”目标对象” property=”对象属性名” />

2. 输出内容

<c:out value=”值” default=”为空时显示的默认值” />

3.移除变量

<c:remove var=”变量名” scope=”范围” />

条件标签

<c:if test=”判断条件” var=”变量名” scope=”范围”>

内容…

</c:if>

举例<c:set var="isLogin" value="${not empty sessionScope.userId}"/>

<c:if test="${not login}">

…登录表单

</form>

</c:if>

迭代标签

<c:forEach var=”当前成员引用名” items=”集合” varStatus=”属性名” 

begin=”开始位置,默认为0”

 end=”结束位置”

step=”递增量,默认为1”>

</c:forEach>

 

varStatus属性值:

current 当前迭代项

index索引

count 迭代计数

first 是否为第一次迭代

last 是否为最后一迭代

begin/end/step 标签的开始/结束/步长值

 

<!-- 循环输出商品信息 -->

<c:forEach var="product" items="${requestScope.products}" varStatus="status">

<!-- 如果是偶数行,为该行换背景颜色 -->

    <tr <c:if test="${status.index % 2 == 1 }">style="background-color:rgb(219,241,212);"</c:if>>

        <td>${product.name }</td>

        <td>${product.area }</td>

        <td>${product.price }</td>

    </tr>

</c:forEach>


 

第十一章-Servlet基础

1.servlet

1.1 servlet  ==>Java类

1.2 该java程序要遵守servlet开发规范(怎么遵守?通过 继承servlet接口)

1.3 servlet 是运行在服务器上的

1.4 servlet是jsp的基础

1.5 tomcat 3个功能: jsp容器  Web服务器   Servlet容器

3.servlet生命周期

 3.1当用户第一次访问 servlet时,tomcat会帮忙把servlet对象创造出来(只有一个servlet对象)

 3.2 然后调用init()方法 (只执行一次)

3.3以多线程的方式来处理客服端的请求  (调用了service()方法)

3.4 service()会自动根据 客服端来调用 doGet()或doPost()

3.5  servlet退出服务 (正常关闭才会调用,比如 关闭tomcat或更改.class文件 ,直接X掉web(浏览器)不会调用service())

二。servlet表单验证

1.创建web应用程序

2.在jsp文件中编写表单

!-- action提交的文件名与web.xml中标签<url-pattern>的名字一致-->

<form action="kevin">

username:

<input type="text" name="username" />

<br />

password:

<input type="password" name="password">

<br />

<input type="submit" value="submit" />

</form>

3.编写 servlet (Java类)LoginServlet(类名)

在类中获取表单的相关参数,并通过输出流输出     

 String username = req.getParameter("username");

        String password = req.getParameter("password");

        req.setCharacterEncoding("UTF-8");  

        resp.setContentType("text/htmll;charset=UTF-8");

        PrintWriter out = resp.getWriter();

        out.println("<html><head><title>Login message</title></head>");

        out.println("<body>");

        out.println("username: "+username);

        out.println(" password: "+password);

        out.println("</body>");

        out.println("</html>

4.在web项目的web.xml中添加信息

<servlet> 
       <servlet-name>L</servlet-name>  
      <servlet-class>LoginServlet</servlet-class>
 </servlet>
<servlet-mapping>
     <servlet-name>L</servlet-name>
     <url-pattern>/kevin </url-pattern>
</servlet-mapping>

5.发布项目 ,启动tomcat

6.在网页中输入地址

http://localhost:8080/jspch1101/index.jsp,输入用户名和密码点提交后会跳转到servlet页面

Servlet是一个符合特定规范的java程序,在服务器端运行,处理客户端请求并作出响应。

 

 

一、在调用Servlet时,首先要在程序中导入Servlet所需的包。  

 1.impoet java.io.*;

   2.import javax.servlet.*;

   3.import javax.servlet.http.*;

二、创建用于Web应用时Servlet继承自HttpServlet类。

三、实现doGet()或者doPost()方法。

四、Servlet的生命周期

   1. 加载和实例化  (Servlet容器根据Servlet类的位置加载Servlet类,成功加载后,由容器创建

      Servlet的实例)

   2. 初始化 (init()方法只能被调用一次)

   3. 服务 (调用Servlet的service()方法处理客户端请求)

   4. 销毁 (销毁实例之前调用destroy()方法)

五、Servlet的编译和部署

编译产生的class文件放入web应用的WEB-INF/classes目录下

文件夹层次与包一致

例如 org.jbit.servlet.HelloServlet的class文件全路径为

WEB-INF/classes/org/jbit/servlet/HelloServlet.class

 

 

对于GenericServlet类中的init()和init(ServletConfig config)

在开发中我们是使用GenericServlet的子类HttpServlet的,而HttpServlet继承了GenericServlet中
的init()和init(ServletConfig config)方法,而在init(ServletConfig config)中会调用init()的,
而且系统会在init(ServletConfig config)方法中执行下面语句:
public void init(ServletConfig config){
this.config = config;//this.config为GenericServlet类的config
init();
}
其实在父类的有参init方法中会隐式的调用无参的init的方法,仅此而已,没什么难的,初始化时永远都调用的是有参的init的方法。

在GenericServlet中,从servlet接口带来的init(ServletConfig config)对它进行重写时,如果忘了调用super.init(config)时,就会出现空指针异常,为了解决这样的

情况,GenericServlet中于是有了一个无参的init()方法,推荐大家重写init方法时,

重写无参的init()方法.

(第一种init()方法是Servlet接口中init()方法的实现。这种方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二种不带参数的init()方法。

 

 

 

通常我们在编写集成自GenericServlet的Servlet类时,只需重写第一种不带参数的init()方法就可以了。如果覆盖了第一种init()方法,那么应该在子类的该方法中,包含一句super.init(config)代码调用。) 

 

web.xml文件中Servlet映射路径<url-pattern>

对于如下的一些映射关系:

• Servlet1 映射到 /abc/*

• Servlet2 映射到 /*

• Servlet3 映射到 /abc

• Servlet4 映射到 *.do


注意: *.do这种形式优先级别最低

<load-on-startup>-1</load-on-startup>、

· load-on-startup标记容器是否在启动的时候实例化并调用其init()方法的优先级。

· 它的值表示servlet应该被载入的顺序

· 当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;

· 如果值小于0或未指定时,则表示只有在第一次请求的容器才在该servlet调用初始化函数

· 正值越小,servlet的优先级越高,应用启动时就越先加载。

· 值相同时,容器就会自己选择顺序来加载。
 

第十二章 - Ajax

一、 什么是Ajax

Ajax是几个单词首字母的缩写:Asynchronous(异步的) JavaScript And Xml。Ajax并不是一种全新的技术,而是整合了几种现在的技术:JavaScript、XML和CSS。主要是JavaScript,我们通过JavaScript的XMLHttpRequest对象完成发送请求到服务器并获得返回结果的任务,然后使用JavaScript更新局部的网页,异步指的是,JavaScript脚本发送请求后并不是一直等着服务器的响应数据。XML一般用于请求数据和响应数据的封装,CSS用于美化页面样式。

二、 XMLHttpRequest

1、 XMLHttpRequest的常用方法

Open(method,URL,async):  建立于服务器的连接,method参数指定请求的HTTP方法;URL参数指定请求的地址;async参数指定是否使用异步请求,其值为true或false。

Send(conetent):  发送请求,content参数指定请求的参数。

SetRequestHeader(header,value):  设置请求的头信息。

2、 XMLHttpRequest的常用属性

Onreadystatechange:  指定XMLHttpRequest对象的回调函数。

ReadyState:  XMLHttpRequest的状态信息

  0 表示已经创建一个对象,但还没初始化

  1 表示对象开始发送信息

  2 表示对象的请求发送完成

  3 对象开始读取响应

  4 对象读取响应结束
 

   Status HTTP的状态码,仅当ReadyState的值为3或4时,status属性才能使用

         200 服务器响应正常

         400 无法找到请求的资源

         403 没有访问权限

         404 访问的资源不存在

         500 服务器内部错误
 

 ResponseText:  获得响应的文本信息

 ResponseXML:  获得响应的XML文档对象

三、 使用Ajax技术实现异步的步骤

1、 创建XMLHttpRequest对象。

2、 通过XMLHttpReuqest对象设置请求信息。

3、 向服务器发送请求。

4、 创建回调函数,当XMLHttpRequest对象状态改变时,根据响应状态动态更新页面。

四、 Ajax的工作过程

1、 通过XMLHttpRquest对象向服务器发送信息。

2、 使用XMLHttpRequets对象解析服务器响应数据

3、 通过JavaScript脚本动态更新页面

举例

function doAjax() {

createXMLHttpRequest();

var name = document.getElementById("uname").value;

var pwd = document.getElementById("upwd").value;

if(XMLHttp!=null){

var url ="LoginServlet?uname="+name+"&upwd="+pwd; 

XMLHttp.open("POST",url,true);

XMLHttp.setRequestHeader("Content-Type",

"application/x-www-form-urlencoded;");

XMLHttp.onreadystatechange=processRequest;

XMLHttp.send(null);

}else{

alert("不能创建XMLHttpRequest对象实例")

}

}



function processRequest() {

var messdiv = document.getElementById(“mess”);

if (xmlhttp.readyState == 4)

if (xmlhttp.status == 200) {

//responseText表示请求完成后,返回的字符串信息 if (xmlhttp.responseText == "false")

messdiv.innerHTML = "用户名可以使用";else

messdiv.innerHTML = "用户名已被使用"; } else {

alert("请求处理返回的数据有错误");

}

}

}

重点:Servlet
一、Servlet三个要素

1.必须继承自HttpServlet
2.必须实现doGet()或者doPost()
3.必须在web.xml中配置Servlet

例:
 

<servlet>
<servlet-name></servlet-name>
<servlet-class></servlet-class>
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servelt-mapping>

函数:

HttpServeltRrequest:请求对象
getParameter():获得表单元素的值
getAttribute():获得request范围中的属性值
setAttribute():设置reqeust范围中的属性值
setCharacterEncoding():设置字符编码
HttpSerletResponse:相应对象
sendRedirect():外部跳转
getWriter():获得输出流对象
setContentType("text/html; charset=utf-8"):设置相应内容格式和编码

二、四种回话跟踪方式

1.Session
HttpSession session = request.getSession();
session.setAttribute("name", "zhangsan");
session.setAttribute("pwd", "aaa");
String name = (String) session.getAttribute("name");
 
2.cookie:
//创建Cookie
Cookie cookie = new Cookie("name", "zhangsan");
//设置Cookie的超时时间
cookie.setMaxAge(24 * 60 * 60 *60);
//把Cookie发送到客户端
response.addCookie(cookie);
 
//得到客户端发送的Cookie
Cookie [] cookies = request.getCookies();
for(int i=0; i<cookies.length; i++) {
  Cookie temp = cookies[i];
  String key = temp.getName();
  String value = temp.getValue();
}
 
3.隐藏表单域
<input type="hidden" name="name" value="zhangsan" />
request.getParameter("name");
 
4.Url重写
问号传参
LoginServlet?username=zhangsan&pwd=123
String name = request.getParameter("username");
String pwd =request.getPareameter("pwd");


 

内部跳转和外部跳转

内部跳转:
LoginServlet
request.getRequestDispatcher("index.jsp").forward(request, resposne);
外部跳转:
response.sendRedirect("index.jsp");
内部跳转是一次请求和一次响应
外部跳转是两次请求和两次响应
ServletContext:Servlet上下文对象
它是一个公共区域,可以被所有的客户端共享
setAttribute():向公共区域里放入数据
getAttribute():从公共区域里取数据
 
三个标准范围:request, session, ServletContext
  共同点:都有setAttribute(), getAttribute()
  区别:范围不同,request < session < servletContext
服务器上的五大对象
  request, response, servlet, session, servletContext

过滤器

生命周期:
1.实例华:
2.初始化:init()
3.过滤:doFilter()
4.销毁:destroy()
5.不可用

 

配置

<filter>
<filter-name></filter-name>
<filter-class></filter-class>
</filter>
<filter-mapping>
<filter-name></filter-name>
<url-pattern></url-pattern>
</filter-mapping>

 

几个重要的接口

1.Filter:init(), doFilter(), destroy()
2.FilterChain: doFilter(request, response)
3.FilterConfig:getFilterName(), getInitParameter(),

过滤器链

--->1--->2--->3--->Servlet 请求

<----1<---2<---3<--- 响应

MvC设计模式

1.ModelI:jsp+JavaBean
2.ModelII:jsp+Servlet+JavaBean
  jsp---view
  servlet---control
  javabean---model
 
MVC:
M--Model:模型:访问后台数据库
V--view:视图:展示
C--control:控制器:控制程序流程
 
ModelII和MVC的关系:
MVC是一种设计模式,ModelII它是MVC的一种具体的实现

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/WilliamChancwl/article/details/84866783

智能推荐

艾美捷Epigentek DNA样品的超声能量处理方案-程序员宅基地

文章浏览阅读15次。空化气泡的大小和相应的空化能量可以通过调整完全标度的振幅水平来操纵和数字控制。通过强调超声技术中的更高通量处理和防止样品污染,Epigentek EpiSonic超声仪可以轻松集成到现有的实验室工作流程中,并且特别适合与表观遗传学和下一代应用的兼容性。Epigentek的EpiSonic已成为一种有效的剪切设备,用于在染色质免疫沉淀技术中制备染色质样品,以及用于下一代测序平台的DNA文库制备。该装置的经济性及其多重样品的能力使其成为每个实验室拥有的经济高效的工具,而不仅仅是核心设施。

11、合宙Air模块Luat开发:通过http协议获取天气信息_合宙获取天气-程序员宅基地

文章浏览阅读4.2k次,点赞3次,收藏14次。目录点击这里查看所有博文  本系列博客,理论上适用于合宙的Air202、Air268、Air720x、Air720S以及最近发布的Air720U(我还没拿到样机,应该也能支持)。  先不管支不支持,如果你用的是合宙的模块,那都不妨一试,也许会有意外收获。  我使用的是Air720SL模块,如果在其他模块上不能用,那就是底层core固件暂时还没有支持,这里的代码是没有问题的。例程仅供参考!..._合宙获取天气

EasyMesh和802.11s对比-程序员宅基地

文章浏览阅读7.7k次,点赞2次,收藏41次。1 关于meshMesh的意思是网状物,以前读书的时候,在自动化领域有传感器自组网,zigbee、蓝牙等无线方式实现各个网络节点消息通信,通过各种算法,保证整个网络中所有节点信息能经过多跳最终传递到目的地,用于数据采集。十多年过去了,在无线路由器领域又把这个mesh概念翻炒了一下,各大品牌都推出了mesh路由器,大多数是3个为一组,实现在面积较大的住宅里,增强wifi覆盖范围,智能在多热点之间切换,提升上网体验。因为节点基本上在3个以内,所以mesh的算法不必太复杂,组网形式比较简单。各厂家都自定义了组_802.11s

线程的几种状态_线程状态-程序员宅基地

文章浏览阅读5.2k次,点赞8次,收藏21次。线程的几种状态_线程状态

stack的常见用法详解_stack函数用法-程序员宅基地

文章浏览阅读4.2w次,点赞124次,收藏688次。stack翻译为栈,是STL中实现的一个后进先出的容器。要使用 stack,应先添加头文件include<stack>,并在头文件下面加上“ using namespacestd;"1. stack的定义其定义的写法和其他STL容器相同, typename可以任意基本数据类型或容器:stack<typename> name;2. stack容器内元素的访问..._stack函数用法

2018.11.16javascript课上随笔(DOM)-程序员宅基地

文章浏览阅读71次。<li> <a href = "“#”>-</a></li><li>子节点:文本节点(回车),元素节点,文本节点。不同节点树:  节点(各种类型节点)childNodes:返回子节点的所有子节点的集合,包含任何类型、元素节点(元素类型节点):child。node.getAttribute(at...

随便推点

layui.extend的一点知识 第三方模块base 路径_layui extend-程序员宅基地

文章浏览阅读3.4k次。//config的设置是全局的layui.config({ base: '/res/js/' //假设这是你存放拓展模块的根目录}).extend({ //设定模块别名 mymod: 'mymod' //如果 mymod.js 是在根目录,也可以不用设定别名 ,mod1: 'admin/mod1' //相对于上述 base 目录的子目录}); //你也可以忽略 base 设定的根目录,直接在 extend 指定路径(主要:该功能为 layui 2.2.0 新增)layui.exten_layui extend

5G云计算:5G网络的分层思想_5g分层结构-程序员宅基地

文章浏览阅读3.2k次,点赞6次,收藏13次。分层思想分层思想分层思想-1分层思想-2分层思想-2OSI七层参考模型物理层和数据链路层物理层数据链路层网络层传输层会话层表示层应用层OSI七层模型的分层结构TCP/IP协议族的组成数据封装过程数据解封装过程PDU设备与层的对应关系各层通信分层思想分层思想-1在现实生活种,我们在喝牛奶时,未必了解他的生产过程,我们所接触的或许只是从超时购买牛奶。分层思想-2平时我们在网络时也未必知道数据的传输过程我们的所考虑的就是可以传就可以,不用管他时怎么传输的分层思想-2将复杂的流程分解为几个功能_5g分层结构

基于二值化图像转GCode的单向扫描实现-程序员宅基地

文章浏览阅读191次。在激光雕刻中,单向扫描(Unidirectional Scanning)是一种雕刻技术,其中激光头只在一个方向上移动,而不是来回移动。这种移动方式主要应用于通过激光逐行扫描图像表面的过程。具体而言,单向扫描的过程通常包括以下步骤:横向移动(X轴): 激光头沿X轴方向移动到图像的一侧。纵向移动(Y轴): 激光头沿Y轴方向开始逐行移动,刻蚀图像表面。这一过程是单向的,即在每一行上激光头只在一个方向上移动。返回横向移动: 一旦一行完成,激光头返回到图像的一侧,准备进行下一行的刻蚀。

算法随笔:强连通分量-程序员宅基地

文章浏览阅读577次。强连通:在有向图G中,如果两个点u和v是互相可达的,即从u出发可以到达v,从v出发也可以到达u,则成u和v是强连通的。强连通分量:如果一个有向图G不是强连通图,那么可以把它分成躲个子图,其中每个子图的内部是强连通的,而且这些子图已经扩展到最大,不能与子图外的任一点强连通,成这样的一个“极大连通”子图是G的一个强连通分量(SCC)。强连通分量的一些性质:(1)一个点必须有出度和入度,才会与其他点强连通。(2)把一个SCC从图中挖掉,不影响其他点的强连通性。_强连通分量

Django(2)|templates模板+静态资源目录static_django templates-程序员宅基地

文章浏览阅读3.9k次,点赞5次,收藏18次。在做web开发,要给用户提供一个页面,页面包括静态页面+数据,两者结合起来就是完整的可视化的页面,django的模板系统支持这种功能,首先需要写一个静态页面,然后通过python的模板语法将数据渲染上去。1.创建一个templates目录2.配置。_django templates

linux下的GPU测试软件,Ubuntu等Linux系统显卡性能测试软件 Unigine 3D-程序员宅基地

文章浏览阅读1.7k次。Ubuntu等Linux系统显卡性能测试软件 Unigine 3DUbuntu Intel显卡驱动安装,请参考:ATI和NVIDIA显卡请在软件和更新中的附加驱动中安装。 这里推荐: 运行后,F9就可评分,已测试显卡有K2000 2GB 900+分,GT330m 1GB 340+ 分,GT620 1GB 340+ 分,四代i5核显340+ 分,还有写博客的小盒子100+ 分。relaybot@re...

推荐文章

热门文章

相关标签