servlet和jsp学习(word文档备注不能正常显示,如有错误,忘不吝指正)

1.        Servlet 服务器端编程语言

2.        Lamp: linux+apache+mysql+php

3.         

4.        所有servlet都必须实现Servlet接口。Servlet不止可以在web服务器端运行,也可以在email,ftp等服务器端运行。我们要写的是http sevlet最合适从servlet子类httpsevlet继承

5.        Get方式:直接在地址栏输入url的时候

Post方式:表单中提交的时候表单设置的是post提交方式的时候

6.        Web.xml  先找到url-pattern,然后name 然后class

  <servlet>[f1] 

    <servlet-name>HW[f2] </servlet-name>                3

    <servlet-class>HelloWorldServlet[f3] </servlet-class>      4

  </servlet>

 

  <servlet-mapping>

    <servlet-name>HW</servlet-name>                2

    <url-pattern>[f4] /abc</url-pattern>                   1

  </servlet-mapping>

7.        Servlet生命周期: j2ee要求servletnew一个,所有人访问的是同一个对象,省内存。构造函数,然后init,然后service调用doget等方法,别的访问者也调用doget,最后detory。加载 classloader—实例化 new—初始化initServletConfig处理请求service doGet doPost--退出服务destoty()

8.        SingleThreadModel,实现此接口的话,每有一个请求过来的时候就会new一个新对象。已过时,不再使用。J2ee新标准规定servlet应该就只有一个,除非是分布式等其他情况。

9.        Init方法只执行一次,第一次初始化的时候。Destory方法在webapp退出的时候才执行(只要servlet不停止,或者webapp不停止,该对象就一直又,不会调用destory)。

10.    Catalina debug命令行调用dubug模式,后接run。

11.    ServletConfig就是web.xml中的配置

12.    Servlet其他的编程接口:

GenericServlet是所有servlet的鼻祖;

用于HTTPServlet编程都通过继承javax.servle.http.HttpServlet实现

请求处理方法:(分别对应http协议的7种请求)

doGet  响应Get请求,常用  get方式提交表单,参数显示在url地址后面

doPost 响应Post请求,常用  post方式提交表单,参数不显式跟在url地址后面;如果同时又重写了doGet方法,可以在doPost方法中调用doGet方法,没有必要再重写一遍

doPut 用于http1.1协议

doDelete 用于http1.1协议

doHead 仅响应Get请求的头部

doOptions 用于http1.1协议

doTrace 用于http1.1协议

实例的个数:在非分布的情况下,通常一个servlet在服务器中有一个实例

13.    静态网页的访问不同于servlet(servlet可以在web.xml中配置)

14.    resp.getWriter()[f5] .write("<ahref='http://www.hao123.com'>go</a>");

15.    ServletRequest中的getParameterNames()方法返回String 对象的 Enumeration[f6] ,每个 String 都包含一个请求参数的名称。

16.    Radio提交的值是value属性值,传的参数名是name属性值

17.    服务器可以向客户端写内容;只能是文本内容;客户端可以阻止服务器写入(浏览器internet选项里面有设置);只能拿自己webapp写入的东西;cookie2,一种是临时性存在于窗口中的,属于窗口或者子窗口另一种是属于文本的,大家都能访问的;一个servlet/jsp设置的cookies能够被同一个路径下面或者子路径下面的servlet/jsp读到此处的路径指的是urlurl可以通过web.xml配置)不是真正的文件存储目录

18.    http协议有“无连接特性”,即一次请求一次响应;

19.    cookie:保存到客户端的一个文本文件,与特定客户相关

20.    cookie:以“名-值”对的形式保存数据

21.    创建cookie:new Cookie(name,value)

22.    可以使用Cookie的setXXX方法来设定一些相应的值

setName(String name)/getName()

setValue(String value)/getValue()

setMaxAge(int age)/getMaxAge()

利用HttpServletResponse的addCookie(Cookie)方法将它设置到客户端

利用HttpServletRequest的getCookies()方法来读取客户端的所有Cookie,返回一个Cookie数组

23.    cookie 是 servlet 发送到 Web 浏览器的少量信息,这些信息由浏览器保存,然后发送回服务器。cookie 的值可以唯一地标识客户端,因此 cookie 常用于会话管理

24.    一个 cookie 拥有一个名称、一个值和一些可选属性,比如注释、路径和域限定符、最大生存时间和版本号。一些 Web 浏览器在处理可选属性方面存在 bug,因此有节制地使用这些属性可提高 servlet 的互操作性

25.    servlet 通过使用 HttpServletResponse#addCookie方法将 cookie 发送到浏览器,该方法将字段添加到 HTTP 响应头,以便一次一个地将 cookie 发送到浏览器。浏览器应该支持每台 Web 服务器有 20 个 cookie,总共有 300 个 cookie,并且可能将每个 cookie 的大小限定为 4 KB

26.    浏览器通过向 HTTP 请求头添加字段将 cookie 返回给 servlet。可使用 HttpServletRequest#getCookies 方法从请求中获取 cookie。一些 cookie 可能有相同的名称,但却有不同的路径属性

27.    Cookie中的名必须遵守 RFC2109。这意味着它只能包含 ASCII 字母数字字符,不能包含逗号、分号或空格,也不能以 $ 字符开头。cookie 的名称在创建之后不得更改。

Cookie中的值可以是服务器选择发送的任何值。可能只有该服务器需要其值。cookie 的值在使用 setValue 方法创建后可以更改。对于 Version 0 cookie,值不应包含空格、方括号、圆括号、等号、逗号、双引号、斜杠、问号、at 符号、冒号和分号。空值在所有浏览器上的行为不一定相同

28.    Cookie不设置最大生命周期的话,窗口开着就活着,窗口关了cookie也就消失了,该cookie只属于自己窗口或者子窗口(用window.open打开的),重新打开的浏览器复制url过去打开是不能看到该cookie的。

29.    resp.setContentType(“text/html;charset=gb2312”);

PrintWriterout = response.getWriter();

out.println(“字符串也可以是html页面代码”);

30.    win7下cookie的保存目录:C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Cookies。

31.    session:记录在服务器端(session id客户端和服务器端都要保存,客户端的保存可以通过cookie或者url重写或者表单隐藏技术来实现);cookie:记录在客户端,用户可以拒绝。

32.    session id的处理方式:通过cookie来实现(临时文件,不用写到文本里面去,只跟窗口有关系,窗口关了就不需要会话id了);通过url重写来实现,就是将一些额外数据追加到表示会话的每个url末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立连接;表单隐藏技术来实现

33.    HttpSession: 提供一种方式,跨多个页面请求或对 Web 站点的多次访问标识用户并存储有关该用户的信。

34.    一个会话通常对应于一个用户,会话能够保留指定的时间段(内存中保存)。会话信息的范围仅限于当前 Web 应用程序 (ServletContext),因此存储在一个上下文[f7] 中的信息在另一个上下文中不是直接可见的。

35.    会话一般基于驻留内存的cookie不是持续性的cookie。

36.    Session与cookie的区别

37.    当用户关闭浏览器时,客户针对当前服务器的session即被关闭或超时或invalidate失效,当客户再次打开浏览器访问的时候,会重新分配会话sessionID若禁止cookie,同一个客户就会对应多个session对象,服务器无法识别访问这些页面是同一个客户

38.    服务器端的cookie产生与发送:

Cookie cookie = new Cookie(String name,String value);

resp.addCookie(cookie);

39.    Session:在某段时间一连串客户端与服务器端的“交易”

40.    可以通过程序来终止一个session,如果客户端在一定时间内没有操作,服务器会自动终止会话。

41.    通过HttpSession来读写Session

42.    如果浏览器支持Cookie,创建Session的时候会把SessionID保存在Cookie

如果不支持Cookie,必须自己编程使用url重写的方式实现Session:

resp.encodeURL()[f8] : 转码;URL后面加入Session服务器端发出的

43.    HttpSession mySession = req.getSession(true);    客户端请求服务器端得到

mySession.isNew()  mySession.getId()   mySession.getCreationTime()  mySession.getLastAccessedTime()

44.    HttpServletRequest: request.getRequestedSessionId()    request.isRequestedSessionIdFromCookie()   request.isRequestedSessionIdFromURL()   request.isRequestedSessionIdValid()(均为客户端保存的信息)

45.    Session多长时间过期,可以在tomcat中conf目录下的所有人都用的web.xml中配置。

<session-config>

        <session-timeout>30[f9] </session-timeout>

</session-config>

这段代码也可以拷贝到自己项目中的web.xml中去,设置此项目的过期时间。

46.    Session:服务器端的一块内存,能往里面放任何东西,要按名-值对放。

47.    HttpSession:  getAttribute(String name); setAttribute(String name, Object value);    getAttributeNames();

48.    Session不像Cookie拥有路径访问的问题

同一个application(即项目)下的Servlet/jsp可以共享同一个session,前提是同一个客户端窗口

49.    Application:

用于保存整个WebApplication 的生命周期内都可以访问的数据

在API中表现为ServletContext,对应于每一个项目Application

通过HttpServletgetServletContext方法可以拿到(ServletContextapplication = this[f10] .getServletContext()

通过ServletContext的get/setAttribute方法取得/设置相关属性

50.    Cookie:只有在客户端才能访问   session:每个人只能访问自己对应的session   application:让所有的客户端都可以访问(可以用做网页计算访问量

51.    MIME:MultipurposeInternet Mail Extensions多用途互联网邮件扩展,是一个标准。

52.    Application中的Attribute: 也是键-值对(cookie session application[f11] attribute都是键值对

ServletContext application = this.getServletContext();

// 从当前application中读取属性accessCount的值

Integer accessCount = (Integer)application.getAttribute("accessCount");

if(accessCount == null) {

accessCount = new Integer(0);

} else {

  accessCount = new Integer(accessCount.intValue() + 1);

 }

// 向当前application中插入键(key,属性)值(value)对

application.setAttribute("accessCount", accessCount);

53.    Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面

54.    PrintWrite 中的println 和write方法区别:

print方法可以将各种类型的数据转换成字符串的形式输出。重载的write方法只能输出字符、字符数组、字符串等与字符相关的数据

源代码

public void print(Object obj) {  

   write(String.valueOf(obj));  

}    

public void print(Object obj) { 

   write(String.valueOf(obj)); 

print方法就是调用write方法实现的,也就是将object转换成String了而已。

55.    Servlet放在包里面的话,配置的时候在web.xml中servlet-class标签中加上包名就好了。

56.    Servlet传参数,或者向context传参数

57.    Servlet中的请求转发

RequestDispatcher接口对象允许将请求转发到其他服务器资源

通过RequestDispatcher的forward(HttpServletRequest,HttpServletResponse)方法可以将请求转发

通过ServletContext的getRequestDispatcher(Stringurl)方法来获得RequestDispatcher对象,并且指定转发的目标url资源

可以通过HttpServletRequest的setAttribute(String name,String value)来设置需要传递的参数,然后在代理servlet中就可以使用HttpServerRequest的getAttribute(Stringname)来获得对应的值

58.    Javabean:狭义的解释,具有一个图形界面的显示;广义的解释,就是一个java类。

59.    在servlet或者javaweb中的javabean:是一个类;必须要有一个不带参数的构造器(jsp元素创建Bean时会调用空构造器);属性名称第一个字母必须小写且私有;一般具有 getters andsetters(方法名中的变量名首字母大写,例如getNum;不应具有GUI表现;一般是用来实现某一业务逻辑或者取得特定结果。

60.    servlet中使用javabean本质就是在servlet使用了一个其他类而已。可参考servlet链接数据库,调用数据库DB类。

61.    在Servlet中直接连接数据库,并查询显示信息,也是写在doget、dopost等方法里面的。数据库驱动要放在WEB-INF目录下的lib目录下[f12] 。

62.    response.setContentType(“text/html;charset=gb2312[f13] ”);

63.    专门跟数据库打交道的类

public class DB {

    // 获取连接

    public static Connection getConnection() {

        Connection conn = null;

        try {

            Class.forName("com.mysql.jdbc.Driver");

            conn = DriverManager.getConnection("jdbc:mysql://localhost/bbs?user=root&password=mysql");

        } catch (ClassNotFoundException e) {

            System.out.println("驱动程序未找到,请加入mysql.jdbc的驱动包。。。");

            e.printStackTrace();

        } catch (SQLException e) {

            System.out.println("执行数据库连接过程中出现了错误。。。");

            e.printStackTrace();

        }

        return conn;

    }

   

    // 获取表达式语句

    public static Statement getStatement(Connection conn) {

        Statement stmt = null;

        try {

            if (conn != null) {

                stmt = conn.createStatement();

            }

        } catch (SQLException e) {

            System.out.println("执行获取表达式语句过程中出现了错误。。。");

            e.printStackTrace();

        }       

        return stmt;

    }

   

    // 获取查询的结果集

    public static ResultSet getResultSet(Statement stmt, String sql) {

        ResultSet rs = null;

        try {

            if (stmt != null) {

                rs = stmt.executeQuery(sql);

            }

        } catch (SQLException e) {

            System.out.println("执行查询过程中出现了错误。。。");

            e.printStackTrace();

        }

        return rs;

    }

   

    // 关闭连接

    public static void close(Connection conn) {

        try {

            if (conn != null) {

                conn.close();

                conn = null;

            }

        } catch (SQLException e) {

            System.out.println("执行关闭数据库连接过程中出现了错误。。。");

            e.printStackTrace();

        }       

    }

   

    // 关闭表达式语句

    public static void close(Statement stmt) {

        try {

            if (stmt != null) {

                stmt.close();

                stmt = null;

            }

        } catch (SQLException e) {

            System.out.println("执行关闭表达式语句过程中出现了错误。。。");

            e.printStackTrace();

        }       

    }

   

    // 关闭结果集

    public static void close(ResultSet rs) {

        try {

            if (rs != null) {

                rs.close();

                rs = null;

            }

        } catch (SQLException e) {

            System.out.println("执行关闭结果集过程中出现了错误。。。");

            e.printStackTrace();

        }       

    }

}

 

64.    Request对象的方法(getparameter等)可以读取页面提交的东西,response对象的方法(println等)可以响应给客户端数据,数据其它的操作可以在doGetdoPost方法中操作(比如操作数据库等)。用servlet给客户端写(要把html文件当做字符串写出去,还要注意写一些后台得到的变量)比较麻烦,用jsp之后就省事多了

65.    Filter(servlet2.3中的)

66.    Listener(servlet2.4中的)

67.    要在servlet中写html语句,需要out.println()一句话一句话的打印出去,如果再包含CSSjavascript,写起来就太麻烦了,格式也看不出(编辑器中的html代码基本上都是以字符串显示),jsp可以帮助我们解决这些问题。

68.    Jspjsp本质上也是servlet,直接在HTML中内嵌jsp代码或者java代码,jspjsp Engine先将它转换成Servlet代码,接着将它编译成类文件载入执行(第一次请求jsp的时候,才需要将其转换和编译)。

69.    Servlet需要写class,对它进行编译,放到特定位置,然后进行配置才能访问;jsp就像html一样使用即可,html能够放在什么位置,jsp就能够放在什么位置,不需要配置(配置就是web.xml的配置)就可以直接访问

70.    Html页面可以放在webapplication的根目录下面,或者放在根目录下面的子目录里面。

71.    Jsp里面的java代码放在<% %>里面

72.    Jsp文件运行机制:tomcat中还有一个work目录,里面存放的是jsp转换完成的class和java文件,jsp首先要转换为servlet,然后才能运行。Tomcat-Work-catalina–localhost-项目名-org-apache-jsp目录下可以找到转换完成文件。

里面的java文件继承HttpJspBase,而HttpJspBase实现了servlet接口,所以jsp本身也是一个servlet,该java文件中还有一个jspService方法(类似于servlet中的service方法,servlet中service的处理都交给了doget等方法处理,jspService直接在自己内部处理)

73.    Jsp具有servlet的所以有点,唯一的缺点就是第一次访问的时候,jsp需要转换还需要编译,所以第一次访问有点慢。第二次就不需要转换和编译,直接拿来用就可以了。

74.    Jsp到现在有4套语法:第一套<%java代码%>;第二套改成和标签语言类似,里面全是标签,没有%符号;第三套JSTL(java标准标签库,想把所有东西都改变成标签化的语言);第四套JSF。

Asp和asp.net是两种不同的语法。

75.    下面涉及的jsp语法基本上是传统语法,也就是第一套,第一套和jstl差距不是很明显,jsf有机会在学习

76.    写jsp还可以用到其他的tablib(比如struts,到时候在说)

77.    Declaration  Scriptlet  Expression[f14]   Comment[f15]   Directives[f16]   Action[f17]   内置对象[f18] 

78.    声明并不在JSP页内产生任何输出。它们仅仅用于定义,而不生成输出结果。要生成输出结果,应该用JSP表达式或脚本片断

79.    jsp是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Declaration  Scriptlet Expression)和JSP标记(tag)还有指令(Directives)等其他部件,从而形成JSP文件

80.    Declaration: 声明方法写在此处,写在<%%>里面的都是语句。

基本语法:<%! %>  在此声明的变量、方法都会被保留成唯一的一份,直到jsp程序停止

<%!

int i;

public void setName(){… …}

%>

81.    <%=  %>相当于out.write原封不动的把里面的值输出出来。当做值用不加封号,<%%>里面的语句则要加封号

82.    声明变量的时候也可以这么写<%  int i = 0 %> 加!是成员变量[f19] ,不加!是局部变量[f20] 。访问变量的时候成员变量声明一次,局部变量每次都是重新声明的。方法写在加!号的声明里面,编译之后就不会出现在jspService方法里面,是成员方法。

83.    Scriptlet:<% 程序代码区%> 可以放任何的java程序代码,语法也是java的。

84.    注释:<%--  --%>: 代码块注释, jsp第二种注释,客户端看不见,

<%//  %> :行,//要写在<% %>中,和java里面的注释一样,jsp第三种注释

<%/*  */>:块,/* */要写在<% %>中,和java里面的注释一样,jsp第三种注释

<!--  -->html注释,客户端可以看见。 Jsp中的第一种注释

85.    request对象是jsp可以直接拿来用的对象,类型是HttpRequest类型

86.    jsp页面中html代码标签中可以内嵌<%=  %>,类似变量调用。

87.    <%= %>中等号后面必须是字符串变量或者可以被转换成字符串的表达式,不需要以分号结束,只有一行。

88.    request.getRemoteHost()  拿到客户端地址

89.    session 也是jsp内置对象 实现了HttpSession接口。

90.    Directive(编译指令)相当于在编译期间的命令,格式<%@Directive 属性=“属性值”%>,常见的Directive:page,include,taglib

91.    Page编译指令 指明与JSP Container的沟通方式(编译期间指明这个页面的特点

基本格式:最重要的是import,errorPage,isErrorPage,contentType。

<%@page language=“script language[f21] ”|

                            extends[f22] =“className”|

                            import[f23] =“importList”|

                            buffer[f24] =“none|kb size”|   --none:不缓冲,默认8k

                            session[f25] =“true|false”|   --是否可以使用session,默认true

                            autoFlush[f26] =“true|false”  --缓冲器是否自动清除,默认true

                            isThreadSafe[f27] =“true|false”|  --默认false(永远不要设成true)

                            info[f28] =“infoText”|    --任何字符

                            errorPage[f29] =“errorPageUrl”|

                            isErrorPage[f30] =“true|false”|

                            contentType[f31] =“contentTyepInfo”|
                   pageEncoding=“gb2312”

%>

中文问题:

<%@ pagecontentType="text/html;charset=gb2312" %>

92.    <%@page import="java.util.*java.text.*" %> 等于%@pageimport="java.util.* " %<%@pageimport="java.text.*" %>

93.    <%@page contentType="text/html;charset=gb2312"%>

94.    <%= newDate().toLocaleString() %>

95.    <%@pageerrorPage="ErrPage.jsp" %>

96.    <%@pageisErrorPage="true" %>

<!--本页面是个错误信息显示页-->

97.    错误信息:<%= exception.getMessage()%> exception应该也是一个内置对象,出错对象

98.    Include编译指令:只有一个属性file,属性值是文件的相对路径名。编译指令

<%@include file[f32] = “fileURL[f33] ”%>这个效率高,先包含进来,编译完了再运行,但是不能传参

JSP Engine会在JSP程序的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工作

<jsp:includepage=”URLSpec” flush=”true”/[f34] >(属于action指令)运行到这句话的时候才把内容包含进来。编译,运行,包含。这个指令可以传参数

99.    Action动作元素:运行期间的命令 有起始标签和结束标签,没有%

常见的4中:

         jsp:useBean

                   jsp:setProperty

                   jsp:getProperty

         jsp:include

         jsp:forward

                   jsp:param

         jsp:plugin 用来给网页中嵌入一段applet小程序

100.  jsp:include: 用于动态包含jsp程序或html文件等,运行时包含;除非这个指令会被执行到,否则它是不会被tomcat等jsp Engine编译。

格式:

<jsp:include page[f35] =“URLSpec” flush[f36] =“true”/>

<jsp:include page=“URLSpec” flush=“true”>

<jsp:param[f37]  name=“ParamName” value=“paramValue”/>

</jsp:include>

101.  JavaScript是由浏览器解释执行的程序代码,它是网页内容的一部分,主要用于在网页上产生动态的显示效果和实现与用户的交互功能。JSP程序则是由WEB服务器解释执行的程序代码,它用于产生供浏览器显示的网页内容。由于JavaScript代码属于网页的内容部分,所以,JavaScript代码也可以通过JSP页面输出。JavaScriptJSP的关系犹如HTML代码和JSP的关系[f38] ,即JavaScript代码是JSP程序输出的一段可以被浏览器解释执行的特殊文本内容。只要先写好一个包含有JavaScript代码的网页文档,然后将这个网页文档的内容改为用JSP程序输出。

102.  Jspjava程序的if语句,不管是直接还是间接的包含html代码(或者include指令或者action,因为include里面基本上都会包含html代码),代码必须用<%  %>分割成多块来写。<%  %>里面的代码,jsp转换中直接拿来放在jspService中当做java代码用,而html代码需要加上out.write()输出到客户端。不止是if语句,while、for等也是,换句话说也就是说jspjava代码块要和html(直接或者间接)代码要分开写,<%%>里面不能写html代码。Java代码块中的注释不能用<!-- -->,java代码块中不能嵌套别的jspDirectives或者Action等[f39] 

103. 关于嵌套:java中不能嵌套java,此处java指的是Declaration  Scriptlet Expression

104.  Jsp:forward 可以用于登录账号检测,比如根据账号跳转到学生主页或者教师主页

用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理(URL)。当前访问页面不再展示,直接跳转到page指定的页面

格式:

<jsp:forward page=“urlSpec” />

<jsp:forward page=“urlSpec”>

                   <jsp:paramname=“paramName” value=“paramValue”/>

         </jsp:forward>

<jsp:param>用于指定参数和其对应的值

Forward的页面和forward到的页面用的是同一个request

与此相对应的是

response.sendRedirect   <%response.sendRedirect("forforward1.jsp");%>

105.  这句话的意思是说,在value属性中引用"时应该转义,escaped是逃脱逃逸的意思,我们国内的书籍都把这个翻译成了转义,正确的解决办法是写成<jsp:paramname="lineSize" value="<%=request.getAttribute(\"lineSize\")%>"/> 

106.  JSP解析器在将jsp进行翻译转换为Java的时候,会将<% %>中的内容视作字符串并直接嵌入生成的java代码中

107.  jsp:forwardresponse.sendRedirect区别:

jsp:forward访问的时候浏览器地址栏不跳转到新页面地址,而response.sendRedirect跳转。也是因为jsp:forward跳转前后使用的是同一个request,中间页面传递了该请求(1231[f40] ),而response.sendRedirect跳转前后使用的不是同一个request,中间页面返回一个信息让客户端重新请求另外的页面(12131)

108.  jsp:useBean基本用法

<jsp:useBeanid=”beanName” scope=”page[f41] |request[f42] |session[f43] |application[f44] ” class[f45] =”package  BeanClass”type[f46] =”typeName” />   产生一个scope范围的对象

<jsp:useBean…>

                   <jsp:setPropertye…>

                   <jsp:getPropertty…>

</jsp:useBean>

109.  裸体类:没package打包的代码生成的类

110.  Jsp中要求javabean不能是裸体类,javabean所在的包目录存放在在tomcat中classes目录下。然后就可以在jsp中直接使用。

111. javabeanjsp连接起来。jsp:useBean[f47]   jsp:setProperty  jsp:getProperty

<%@pageimport="bean.*" %>  首先引入bean

<%--    注释

<%

    // 下面这个语句等同于<jsp:useBeanid="cb" class="bean.CounterBean"></jsp:useBean>

    CounterBean cb = new CounterBean();

%>

--%>

<jsp:useBean id="cb[f48] " class="bean.CounterBean[f49] ">

</jsp:useBean>

<fontcolor="red" size="5">

    <%--将bean中存储的值拿出来--%>

    <%= cb.getCount()%>

</font>

<!--往bean中存值-->

<jsp:setProperty name[f50] ="cb" property[f51] ="count" value[f52] ="25" />

    <%--cb.setCount(25)--%>

   

<!—从bean中取值-->

<jsp:getProperty name="cb" property[f53] ="count" />

<%--cb.getCount()--%>

112.  Servlet就new 一个,javabean可以new多个

113.  M-model-模型:JavaBean(里面可以操作数据库);V-view-表现:JSP页面;C-control-控制和处理:Servlet(连接javabean和jsp)

114.  <%--先将传过来的request中的字符编码格式设置成gbk,再取内容--%>

<% request.setCharacterEncoding("gbk");%>

115.  <%--转码(终结解决方案):将hello对象中name属性的值用ISO8859_1编码格式以字节数组拿出,再转化成gbk格式---%>

<%--= new String(hello.getName().getBytes("ISO8859_1")[f54] ,"gbk")--%>

116.  浏览器地址栏传参数,路径后面?参数1&参数2&参数3

117.  <jsp:useBean id="hello"class="bean.HelloBean" scope="request" >

<%--通过*来设置所有属性和输入参数之间的关联,struts中大量运用--%>

<jsp:setPropertyname="hello" property="*" />[f55] 

</jsp:useBean>

118.  Jsp内置对象[f56] (9个):out,  request, response, pageContext,  session,  application,  config, exception,  page

119.  out: out内置对象是一个缓冲的输出流,用来给客户端返回信息。它是javax.servlet.jsp.JspWriter的一个实例

println():向客户端输出各种类型数据

write():

newLine():输出一个换行符

close():关闭输出流

flush():输出缓冲区里的数据

clearBuffer():清除缓冲区里的数据,同时把数据输出到客户端

clear():清除缓冲区里的数据,但不把数据输出到客户端

getBufferSize():返回缓冲区的大小

120.  request: request内置对象表示的是调用JSP页面的请求。通常,request对象是javax.servlet.http.HttpServletRequest接口的一个实例

可以用此对象取得请求的Header、信息(如浏览器版本、语言和编码等)、请求的方式(get/post)、请求的参数名称、参数值、客户端的主机名称等

getMethod():返回客户端向服务器端传送数据的方法

getParameter(StringparamName):返回客户端向服务器端传送的参数值,该参数由paramName指定

getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举类型数据(Enumeration

getParameterValues(String  name):获得指定参数的所有值,由name指定

getRequestURI():获得发出请求字符串的客户端地址

getRemoteAddr():获取客户端的IP地址

getRemoteHost():获取客户端机器名称

getServerName():获取服务器的名字

getServletName():客户端所请求的脚本文件路径

getServerPort():获取服务器端的端口

121.  response:

表示的是返回给客户端的响应

是javax.servlethttp.HttpServletResponse接口的一个实例

经常用于设置HTTP标题,添加cookie、设置响应内容的类型和状态、发送HTTP重定向和编码URL

addCookie(Cookiecookie):添加一个Cookie对象,用于在客户端保存特定的信息

addHeader(Stringname,String value):添加HTTP头信息,该Header信息将发送到客户端

containsHeader(Stringname):判断指定名字的HTTP文件头是否存在

sendError(int):向客户端发送错误的信息

sendRedirect(Stringurl):重定向JSP文件

<jsp:forward>的区别

sendRedirect通过客户端发起二次申请,不同的request对象

Jsp:forward是同一个request,在服务器内部转发

setContentType(StringcontentType):设置MIME类型与编码方式

122.  cookie:

Http协议的无连接性要求出现一种保存C/S间状态的机制

Cookie:保存到客户端的一个文本文件,与特定客户相关

Cookie以“名-值”对的形式保存数据

通过getNamegetValue的方式得到相应的名字和值

123.  session&application:

<%@page session=true%>(默认)--表示session功能已经在jsp页面中启动

session常用方法:

voidsetAttribute(String name,Object value)

ObjectgetAttribute(String name)

booleanisNew()

application对应的类是ServletContext

124.  pageContext:page运行的环境,和servletContext有点像,一个application中,一个page要运行,首先被编译,编译完了才会放到某一个地儿去运行,那个地儿叫pageContext。

125.  config:servlet中有一个config,jsp不需要config,一般指的是web.xml对于这个jsp或者对于jsp编译成功后的那个servlet的配置。

126.  page:代表当前页面,一般很少用,因为当前页面的所有内容我们能直接访问,比如当前页面的成员变量,局部变量,我们就能直接访问。

127.  Servlet和JSP的通信:  互相跳转

JSP调用Servlet可用<jsp:forward>
请求信息自动传递到Servlet

或者通过sendRedirect

 

Servlet调用JSP使用

getServletConfig().getServletContext()[f57] .getRequestDispatcher("/servlet_jsp/ServletUseJsp.jsp").forward[f58] (req, resp);

RequestDispatcher接口的forward(req, res)方法

请求信息需要显式传递(在req、res参数中)

或者通过sendRedirect

 

forward可以用”/”路径, 是指web app的根路径, servlet forward jsp的时候一定要用“/”开头

jsp sendRedirect到servlet应该用相对路径,因为这里”/”指网站的根路径

servlet sendRedirect jsp也是

request.getContextPath起作用了

128.  Jsp中不写try catch,它自己可以handle,有时候遇到错误可能不能关闭某些连接等。如果出错还是加上trycatch finally 好点。要么就用page指令中的errorPage、isErrorPage属性。

129.   


 [f1]表示在容器里面有一个servlet

 [f2]可以随便取名字,和下面mapping中的名字要一致

 [f3]实际class目录下面的类文件名字,要和原来的一致

 [f4]指的是在url中敲什么内容才可以调用该servlet,“/”开头相对于web application的路径,即项目名后面的部分,可以随便指定注意form表单提交时的action有所不同,路径要根据form表单的action改变

 [f5]返回可将字符文本发送到客户端的 PrintWriter 对象

 [f6]不推荐使用,iterate可以代替它,但是iterate出现之前servlet已经使用,属于历史遗留问题

 [f7]每个 Java 虚拟机的每个“Web 应用程序”都有一个上下文

 [f8]禁掉cookie之后,要使sessionID有用,就必须把访问的url在编程中利用此函数转码

 [f9]30分钟

 [f10]Servlet都继承于HttpServlet

 [f11]Application对应于ServletContext

 [f12]因为到时候servlet是运行在tomcat中的,不是本地项目中,之前放在myeclipse中的编译的时候可以找到,部署好了就找不到驱动jar包了

 [f13]可以将后面的部分另写一行如下:response.setCharracterEncoding(“gb2132”);

 [f14]前面这三种都可以把java代码加入到jsp  脚本元素

 [f15]注释有3种,一个直接在jsp中注释,2个在java代码部分注释  注释

 [f16]指令有3中:page,include,taglib    编译指令 编译的时候调用

 [f17]Action以jsp:开始   动作元素  执行的时候调用

 [f18]内置对象

 [f19]不在jspService中

 [f20]声明的变量在jspService方法中

 [f21]只能取java,要不就不写,默认就是java

 [f22]说的是这个jsp页面是从谁继承来的,实际上在编译好的class文件都已经指定,叫做JspBase。不需要指定,一般很少指定

 [f23]引入进来那些包、哪些类,相当于java中的import

 [f24]缓冲的概念,这个页面先写到内存里,然后一次性的写到客户端

 [f25]指的是在页面里面能不能用session对象,一般不用指明该属性

 [f26]指的是页面输出完了,是不是自动的flush到客户端

 [f27]相当于实现了SignalThreadMode接口,此接口以及废弃不用

 [f28]Jsp一些相关的描述信息

 [f29]出了错以后显示哪个页面

 [f30]当前的页面是不是错误页面

 [f31]一般写:text/html;charset=gb2312

Gb2312也可以写作pageEncoding属性

 [f32]把html或者jsp页面包含进来,包含即首先把另外一个文件的内容原封不动的放在当前位置,然后向下执行

 [f33]这里不能传参数,可以在浏览器url地址栏传参数

编译指令里面不能传参数,包含的时候还没运行,拿不到参数,所以该指令一般用于包含哪些个非动态代码,不接受参数的代码

 [f34]或者</jsp:include>

 [f35]注意和directives中include中属性file区别

 [f36]默认为true,sun建议不要取false,永远为true即可

 [f37]包含代码的时候可以传参数,区别于<%@include %>指令

 [f38]Html怎么写,javascript就怎么写

 [f39]总之,在转换到servlet过程中,jsp中Declaration  Scriptlet Expression,编译器可以直接识别并转换,嵌套(java代码嵌套:Declaration  Scriptlet Expression)的话就不能正确识别,但是jsp标签里面是可以嵌套java代码的,例如:<jsp:paramname="oldName" value='<%=request.getParameter("name")%>' />value属性值可以用双引号或者单引号。注意是单引号很有可能是因为里面name已经加了双引号导,解决方法要么外面是单引号,要么里面的双引号要转义

Jsp的表达式可以用在html的各处(jsp本来就含有java代码,jsp表达式就是java代码)

 [f40]1代表客户端,2代表中间页面,3代表最后显示的页面。顺序代表消息传递过程

 [f41]默认为page,局部变量,在_jspService中。页面范围内有效,出了页面,没人认识,返回页面,每次访问或者刷新这个页面重新生成一个

 [f42]仅限于使用javabean的请求,forward 同一个请求

 [f43]整个会话阶段均有效,会话包括在此网址上随便点击该网站链接,直到跳出该网站

 [f44]相当于servletContext,只要服务器不停止就一直存在

 [f45]New的是那个class的对象,一般名字写全,包括包名

 [f46]把new出来的对象当成什么来用,可以是父类名字,父类引用指向子类对象,不指定情况下和class一样

 [f47]先要new出来一个对象

 [f48]Bean new出来的对象名

 [f49]Bean的类名,带包目录

 [f50]对象名

 [f51]属性名

 [f52]传的参数,貌似可以换成param

value="<%= request.getParameter("itemID")%>"等价于param=“itemID

<%= request.getParameter("itemID")%>  jsp会自动将其所得的字符串转换为要求格式,int、double等

 [f53]Javabean中没有该属性的话,直接调用对应get方法。

 [f54]string对象分解成ISO8859-1字节数组,因为传输的时候是按ISO8859-1(类似ascii)传播的

new String(byte[] ,”编码格式”),将前面的字节数组转换成后面的编码格式,重新构建成一个新的字符串

 [f55]因为scope是request,它可以通过request其他地拿内容,前一个页面提交到这个页面的时候可以用,这么用代表的是前页面里面form的值挨着排的调用setXXX方法。From里面的条目要和bean中的属性一一对应,容易出错,但struts中应用的多

 [f56]内置对象,即_jspService方法中的对象,方法参数中2个,加一个throw出来的异常,加6个声明的对象。不用声明系统编译时自动声明和初始化 servlet中的这些对象需要手动声明和初始化

public void _jspService(finaljavax.servlet.http.HttpServletRequest request, finaljavax.servlet.http.HttpServletResponse response)

throws java.io.IOException,javax.servlet.ServletException {

final javax.servlet.jsp.PageContext pageContext;

javax.servlet.http.HttpSession session = null;

final javax.servlet.ServletContext application;

final javax.servlet.ServletConfig config;

javax.servlet.jsp.JspWriter out = null;

final java.lang.Object page = this;

……

}

 [f57]相当于application,看做一个大容器,有各种各样的路径可以走,一定有一个大管家管着往哪去,即请求分发器getRequestDispatcher

 [f58]也可以调用include方法(包含),forward(传递)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值