您的位置:首页 > Web前端 > JavaScript

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

2014-04-30 08:39 281 查看
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要求servlet就new一个,所有人访问的是同一个对象,省内存。构造函数,然后init,然后service调用doget等方法,别的访问者也调用doget,最后detory。加载
classloader—实例化 new—初始化init(ServletConfig)—处理请求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的鼻祖;

用于HTTP的Servlet编程都通过继承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写入的东西;cookie有2种,一种是临时性存在于窗口中的,属于窗口或者子窗口,另一种是属于文本的,大家都能访问的;一个servlet/jsp设置的cookies能够被同一个路径下面或者子路径下面的servlet/jsp读到,此处的路径指的是url(url可以通过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

通过HttpServlet的getServletContext方法可以拿到(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等)可以响应给客户端数据,数据其它的操作可以在doGet、doPost方法中操作(比如操作数据库等)。用servlet给客户端写(要把html文件当做字符串写出去,还要注意写一些后台得到的变量)比较麻烦,用jsp之后就省事多了

65. Filter(servlet2.3中的)

66. Listener(servlet2.4中的)

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

68. Jsp:jsp本质上也是servlet,直接在HTML中内嵌jsp代码或者java代码,jsp由jsp
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页面输出。JavaScript和JSP的关系犹如HTML代码和JSP的关系[f38] ,即JavaScript代码是JSP程序输出的一段可以被浏览器解释执行的特殊文本内容。只要先写好一个包含有JavaScript代码的网页文档,然后将这个网页文档的内容改为用JSP程序输出。

102. Jsp中java程序的if语句,不管是直接还是间接的包含html代码(或者include指令或者action,因为include里面基本上都会包含html代码),代码必须用<%
%>分割成多块来写。<% %>里面的代码,jsp转换中直接拿来放在jspService中当做java代码用,而html代码需要加上out.write()输出到客户端。不止是if语句,while、for等也是,换句话说也就是说jsp中java代码块要和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:forward和response.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. 将javabean和jsp连接起来。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以“名-值”对的形式保存数据

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

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(传递)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐