Jsp详解

Jsp详解

1.简介

2.Jsp的运行原理

3.Jsp的语法

1.Jsp模板元素

2.Jsp中的脚本表达式

3.Jsp中的脚本片段

4.Jsp的声明

5.Jsp注释

6.Jsp指令

1.首先我们来看一下page指令的用法

2.下面在来看一下include指令

3.最后来看一下taglib指令

7.Jsp中内置的9个隐式对象

8.JSP标签库

1.jspinclude标签

2.jspforward标签

3.jspparam或者jspparams标签

4.jspuseBean标签jspsetProperty标签jspgetProperty标签

9.Jsp中怎么排查错误

简介:

JSP全称是JavaServer Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。

JSP这门技术的最大的特点在于,写jsp就像在写html,但:

它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。

相比servlet而言,servlet很难对数据进行排版,而jsp除了可以用java代码产生动态数据的同时,也很容易对数据进行排版。

不管是JSP还是Servlet,虽然都可以用于开发动态web资源。但由于这2门技术各自的特点,在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。

其原因为,程序的数据通常要美化后再输出:

让jsp既用java代码产生动态数据,又做美化会导致页面难以维护。

让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。

因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做。

Jsp的运行原理:

目标:

Web服务器是如何调用并执行一个jsp页面的?

Jsp页面中的html排版标签是如何被发送到客户端的?

Jsp页面中的java代码服务器是如何执行的?

Web服务器在调用jsp时,会给jsp提供一些什么java对象?

思考:JSP为什么可以像servlet一样,也可以叫做动态web资源的开发技术?

其实Jsp就是一个Servlet,所以我们要先介绍Servlet的相关技术,当我们第一次访问Jsp 的时候,Jsp引擎都会将这个Jsp翻译成一个Servlet,这个文件存放在Tomcat中的work目录中,这里,我们新建一个MyJsp.jsp页面,然后访问以下,我们看一下翻译后的源码:

1.<%@ page language="java"import="java.util.*"pageEncoding="utf-8"%>

2.

3.

4.01 Transitional//EN">

4.

5.

6.

7.My JSP 'MyJsp.jsp' starting page

8.

9.

10.

11.

12. This is my JSP page.

13.

14.

1.package org.apache.jsp;

2.

3.import javax.servlet.*;

4.import javax.servlet.http.*;

5.import javax.servlet.jsp.*;

6.import java.util.*;

7.

8.public final class MyJsp_jsp extends org.apache.jasper.runtime.HttpJspBase

9.implements org.apache.jasper.runtime.JspSourceDependent {

10.

11.private static final JspFactory _jspxFactory = JspFactory.getDefaultFactor

y();

12.

13.private static java.util.List _jspx_dependants;

14.

15.private javax.el.ExpressionFactory _el_expressionfactory;

16.private org.apache.AnnotationProcessor _jsp_annotationprocessor;

17.

18.public Object getDependants() {

19.return _jspx_dependants;

20. }

21.

22.public void _jspInit() {

23. _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServlet

Config().getServletContext()).getExpressionFactory();

24. _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletCo

nfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class .getName());

25. }

26.

27.public void _jspDestroy() {

28. }

29.

30.public void _jspService(HttpServletRequest request, HttpServletResponse re

sponse)

31.throws java.io.IOException, ServletException {

32.

33. PageContext pageContext = null;

34. HttpSession session = null;

35. ServletContext application = null;

36. ServletConfig config = null;

37. JspWriter out = null;

38. Object page = this;

39. JspWriter _jspx_out = null;

40. PageContext _jspx_page_context = null;

41.

42.

43.try {

44. response.setContentType("text/html;charset=utf-8");

45. pageContext = _jspxFactory.getPageContext(this, request, response,

46.null, true, 8192, true);

47. _jspx_page_context = pageContext;

48. application = pageContext.getServletContext();

49. config = pageContext.getServletConfig();

50. session = pageContext.getSession();

51. out = pageContext.getOut();

52. _jspx_out = out;

53.

54. out.write("\r\n");

55. out.write("\r\n");

56. out.write("

/EN\">\r\n");

57. out.write("\r\n");

58. out.write(" \r\n");

59. out.write(" \r\n");

60. out.write(" My JSP 'MyJsp.jsp' starting page\r\n");

61. out.write(" \r\n");

62. out.write(" \r\n");

63. out.write(" \r\n");

64. out.write(" \r\n");

65. out.write(" This is my JSP page.
\r\n");

66. out.write(" \r\n");

67. out.write("\r\n");

68. } catch (Throwable t) {

69.if (!(t instanceof SkipPageException)){

70. out = _jspx_out;

71.if (out != null && out.getBufferSize() != 0)

72.try { out.clearBuffer(); } catch (java.io.IOException e) {}

73.if (_jspx_page_context != null) _jspx_page_context.handlePageExcepti

on(t);

74. }

75. } finally {

76. _jspxFactory.releasePageContext(_jspx_page_context);

77. }

78. }

79.}

我们看到,这个类继承了org.apache.jasper.runtime.HttpJspBase,要想看到这个类的源码,我

1./*

2. * Licensed to the Apache Software Foundation (ASF) under one or more

3. * contributor license agreements. See the NOTICE file distributed with

4. * this work for additional information regarding copyright ownership.

5. * The ASF licenses this file to You under the Apache License, Version 2.0

6. * (the "License"); you may not use this file except in compliance with

7. * the License. You may obtain a copy of the License at

8. *

9. * https://www.360docs.net/doc/6418980760.html,/licenses/LICENSE-2.0

10. *

11. * Unless required by applicable law or agreed to in writing, software

12. * distributed under the License is distributed on an "AS IS" BASIS,

13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

14. * See the License for the specific language governing permissions and

15. * limitations under the License.

16. */

17.

18.package org.apache.jasper.runtime;

19.

20.import java.io.IOException;

21.

22.import javax.servlet.ServletConfig;

23.import javax.servlet.ServletException;

24.import javax.servlet.http.HttpServlet;

25.import javax.servlet.http.HttpServletRequest;

26.import javax.servlet.http.HttpServletResponse;

27.import javax.servlet.jsp.HttpJspPage;

28.import javax.servlet.jsp.JspFactory;

29.

30.import https://www.360docs.net/doc/6418980760.html,piler.Localizer;

31.

32./**

33. * This is the super class of all JSP-generated servlets.

34. *

35. * @author Anil K. Vijendran

36. */

37.public abstract class HttpJspBase

38.extends HttpServlet

39.implements HttpJspPage

40.

41.

42.{

43.

44.protected HttpJspBase() {

45. }

46.

47.public final void init(ServletConfig config)

48.throws ServletException

49. {

50.super.init(config);

51. jspInit();

52. _jspInit();

53. }

54.

55.public String getServletInfo() {

56.return Localizer.getMessage("https://www.360docs.net/doc/6418980760.html,");

57. }

58.

59.public final void destroy() {

60. jspDestroy();

61. _jspDestroy();

62. }

63.

64./**

65. * Entry point into service.

66. */

67.public final void service(HttpServletRequest request, HttpServletRespons

e response)

68.throws ServletException, IOException

69. {

70. _jspService(request, response);

71. }

72.

73.public void jspInit() {

74. }

75.

76.public void _jspInit() {

77. }

78.

79.public void jspDestroy() {

80. }

81.

82.protected void _jspDestroy() {

83. }

84.

85.public abstract void _jspService(HttpServletRequest request,

86. HttpServletResponse response)

87.throws ServletException, IOException;

88.}

好吧,看到了,继承了HttpServlet类,所以说其实Jsp就是一个Servlet

Jsp的语法:

1.JSP模版元素

2.JSP表达式

3.JSP脚本片段

4.JSP注释

5.JSP指令

6.JSP标签

7.JSP内置对象

8.如何查找JSP页面中的错误

Jsp模板元素

JSP页面中的HTML内容称之为JSP模版元素。

JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观。

Jsp中的脚本表达式

JSP脚本表达式(expression)用于将程序数据输出到客户端

语法:<%= 变量或表达式%>

举例:当前时间:<%= new java.util.Date() %>

JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应位置用out.print(…) 将数据输给客户端。

JSP脚本表达式中的变量或表达式后面不能有分号(;)。

如下图:Jsp翻译之后的Servlet中的脚本表达式翻译的结果:

就是将脚本表达式中的代码原封不动的使用out.print()输出

Jsp中的脚本片段

JSP脚本片断(scriptlet)用于在JSP页面中编写多行Java代码。语法:

<%

多行java代码

%>

注意:JSP脚本片断中只能出现java代码,不能出现其它模板元素,JSP引擎在翻译JSP 页面中,会将JSP脚本片断中的Java代码将被原封不动地放到Servlet的_jspService方法中。JSP脚本片断中的Java代码必须严格遵循Java语法,例如,每执行语句后面必须用分号(;)结束。

在一个JSP页面中可以有多个脚本片断,在两个或多个脚本片断之间可以嵌入文本、HTML 标记和其他JSP元素。

1.<%

2. int x = 10;

3. out.println(x);

4.%>

5.

这是JSP页面文本

6.<%

7. int y = 20;

8. out.println(y);

9.%>

多个脚本片断中的代码可以相互访问,犹如将所有的代码放在一对<%%>之中的情况。如:out.println(x);

单个脚本片断中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完

1.<%

2. for (int i=1; i<5; i++)

3. {

4.%>

5.

https://www.360docs.net/doc/6418980760.html,

6.<%

7. }

8.%>

Jsp的声明

JSP页面中编写的所有代码,默认会翻译到servlet的service方法中,而Jsp声明中的java 代码被翻译到_jspService方法的外面。语法:

<%!

java代码

%>

所以,JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法。多个静态代码块、变量和函数可以定义在一个JSP声明中,也可以分别单独定义在多个JSP 声明中。

JSP隐式对象的作用范围仅限于Servlet的_jspService方法,所以在JSP声明中不能使用这些

1.<%!

2.static

3.{

4. System.out.println("loading Servlet!");

5.}

6.private int globalVar = 0;

7.public void jspInit()

8.{

9. System.out.println("initializing jsp!");

10.}

11.%>

12.<%!

13.public void jspDestroy()

14.{

15. System.out.println("destroying jsp!");

16.}

17.%>

Jsp注释

JSP注释的格式:

<%-- 注释信息--%>

JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容。

Jsp指令

JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。在JSP2.0规范中共定义了三个指令:

page指令

Include指令

taglib指令

JSP指令的基本语法格式:

<%@ 指令属性名="值" %>

首先我们来看一下page指令的用法

page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。

JSP 2.0规范中定义的page指令的完整语法:

<%@ page

[ language="java" ]

[ extends="package.class" ]

[ import="{package.class | package.*}, ..." ]

[ session="true | false" ]

[ buffer="none | 8kb | sizekb" ]

[ autoFlush="true | false" ]

[ isThreadSafe="true | false" ]

[ info="text" ]

[ errorPage="relative_url" ]

[ isErrorPage="true | false" ]

[ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ]

[ pageEncoding="characterSet | ISO-8859-1" ]

[ isELIgnored="true | false" ]

%>

1.看一下通过page指令设置页面的编码:

举例:<%@ page contentType="text/html;charset=gb2312"%>

这个指令的作用就相当于response.setContentType("text/html;charset=gb2312");

但是这个指令和

<%@ page pageEncoding="gb2312"%>

的区别是:

pageEncoding是jsp文件本身的编码

contentType的charset是指服务器发送给客户端时的内容编码

JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页,用的是contentType。

第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。

第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。

JAVAC用UTF-8的encoding读取java源码,编译成UTF-8 encoding的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。

第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效

contentType的設定.

pageEncoding 和contentType的预设都是ISO8859-1. 而随便设定了其中一个, 另一个就跟着一样了(TOMCAT4.1.27是如此). 但这不是绝对的, 这要看各自JSPC的处理方式. 而pageEncoding不等于contentType, 更有利亚洲区的文字CJKV系JSP网页的开发和展示, (例pageEncoding=GB2312 不等于contentType=utf-8)。

jsp文件不像.java,.java在被编译器读入的时候默认采用的是操作系统所设定的locale所对应的编码,比如中国大陆就是GBK,台湾就是BIG5或者MS950。而一般我们不管是在记事本还是在ue中写代码,如果没有经过特别转码的话,写出来的都是本地编码格式的内容。所以编译器采用的方法刚好可以让虚拟机得到正确的资料。

但是jsp文件不是这样,它没有这个默认转码过程,但是指定了pageEncoding就可以实现正确转码了。

因为我们使用了MyEclipse开发工具,只要我们设置其中一个编码就会将该文件的编码以及页面访问编码都设置好了,例如:

我们使用指令:

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

我们看一下翻译之后的servlet代码:

我们在来看一下这个文件的编码:

可以看到都是gb2312的编码,

同样我们在使用指令:

<%@ page pageEncoding="utf-8"%>

效果和上面一样的,会同时将文件的编码和页面浏览的编码都设置成了utf-8编码,这些动作都是得益于MyEclipse的智能,如果你使用txt文本开发的话,就不会有这样的结果了。

那么当我们同时使用这两个命令的话是什么样的结果呢:

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

<%@ page pageEncoding="utf-8"%>

这时候我就会发现,文件的编码是utf-8,而页面浏览的编码是gb2312,所以说上面的一条指令是专门设置页面浏览的编码的,下面的指令是专门设置文件的保存编码的。出现以上的结果都是因为使用了MyEclipse开发工具。

2.通过page指令导入java包:

JSP 引擎自动导入下面的包:

https://www.360docs.net/doc/6418980760.html,ng.*

javax.servlet.*

javax.servlet.jsp.*

javax.servlet.http.*

可以在一条page指令的import属性中引入多个类或包,其中的每个包或类之间使用逗号分隔:

<%@ page import="java.util.Date,java.sql.*,java.io.*"%>

上面的语句也可以改写为使用多条page指令的import属性来分别引入各个包或类:

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

<%@ page import="java.sql.*"%>

<%@ page import="java.io.*"%>

3.下面在来看一下buffer属性:

<%@ page buffer="4kb" %>

使用这个属性是指定out对象的缓存大小,关于out对象,我们后面会说到,比如我们这里设置了out的缓冲区是4kb,我们可以看一下翻译后的代码:

如果我们想关闭缓冲区的话,只需要设置值为none就可以了

4.下面在来看一下isThreadSafe属性:

这个属性见名知意,是设置是否线程安全的,我们在之前讨论Servlet的时候,说到了Servlet 是个单例对象,是线程不安全的,我们那时候可以通过实现一个接口来实现线程安全,这里只需要设置这个属性值就可以控制Jsp翻译之后的Servlet时候线程安全:

<%@ page isThreadSafe="true|false" %> 默认值为true

isThreadSafe=false模式表示它是以Singleton模式运行。

该模式implements了接口SingleThreadMode,

该模式同一时刻只有一个实例,不会出现信息同步与否的概念。

若多个用户同时访问一个这种模式的页面,

那么先访问者完全执行完该页面后,后访问者才开始执行。

isThreadSafe=true模式表示它以多线程方式运行。

该模式的信息同步,需访问同步方法(用synchronized标记的)来实现。

我们将值设置成false之后发现翻译Jsp之后的Servlet:

实现了SingleThreadModel接口。

5.下面在来看一下session属性:

<%@ page session="false|true"%>默认值是true

是指不能在本页使用session.也就是在本页面禁用了session

就是在将Jsp翻译成Servlet的时候不会传递Session对象了,比如我们将他设置成false,查看翻译后的Servlet源码:

我们发现并没有HttpSession对象,所以我们也不能在Jsp页面中使用session对象了

6.下面来看一下errorPage属性

这个属性是设置服务器端出错之后的错误页面的,比如我们在编写服务器代码的时候,突然抛出异常,那么会返回一个500,这样给用户的感觉就很恶心,所以我们要做的人性化一点,就是通过这个属性值,设置一个错误页面,当服务器发生错误的时候都会跳转到这个页面中,比如:

<%@ page errorPage="/error.jsp"%>

1.<%

2. int x = 1/0;

3.%>

这样就会抛出异常,我们访问这个Jsp看一下效果:

转到了错误页面,同时我们观察地址栏可以发现这里面使用的是转发技术,所以我们在书写url地址的时候,那个开始的斜杠代表是当前应用,因为这个地址是给服务器用的(这个原则我们在之前说过了)

这里在拓展一下,如果我们想给应用配置一个全局的错误页面我们该怎么配置呢?

1.

2.

3.Exception

4./error.jsp

5.

6.

7.

8.404

9./error.jsp

10.

11.

12.

13.500

14./error.jsp

15.

我们看到这里可以配置抛出的异常类型所对应的错误页面,也可以配置状态码对应的错误页面,而且这里配置的结果的优先级没有errorPage属性配置错误页面的优先级高。

7.同时还有一个属性就是isErrorPages:

<@ page isErrorPages="false|true"%>默认值是true

是否开启错误页面,就是控制上面的errorPage属性的作用开关的

8.属性isELIgnored

<@ page isELIgnored="false|true"%>默认值是false

是否在该页面中忽视EL表达式的功能,这个我们一般都不去做设置,因为我们在页面中肯定会使用到EL表达式的

注意:如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。

例如:

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

2.<%@ page import="java.util.Date"%>

1.<%@ page contentType="text/html;charset=gb2312"import="java.util.Date"%>

下面在来看一下include指令

include指令很简单,就是实现页面包含的,我们之前在介绍request的时候,说到使用代码进行页面包含,那时候我们说到了,这个代码来实现页面包含是动态包含,而使用include 指令来实现页面包含是静态包含,关于静态包含和动态包含,我们在下面介绍jsp:include标签的时候在详细说明

最后来看一下taglib指令

这个指令作用也是很简单的,就是引入标签,这个之后再我们后面接收JSTL的内容的时候在作介绍

Jsp中内置的9个隐式对象

每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet 的调用方式进行调用。

由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP 引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。

在JSP编程中Application的使用方法详解

Jsp 调用Javeabean 命令UseBean 中有Scope 设置,一般有Application session page 等设置,Page就是每页重新产生uscbcan中的javabean新对象,一般情况是用这种,如果多个Jsp程序间为共享数据,可以使用session 而application的意思,该javabean将一直存在,与session相对用户来说,application 是相对应用程序的,一般来说,一个用户有一个session.并且随着用户离开而消失;而application则是一直存在,类似一个servlet程序,类似整个系统的"全局变量",而且只有一个实例。 MVC中控制功能 因此application这个特性,很适合用来做MVC中的控制功能,一般传统MVC是用servlet 做控制功能,V基本是Jsp页而,21就是中间件Javabean Z类。 但是随着Jsp功能的完善和推广,逐渐有替代servlet之趋势,我们在实践中更多使用的也是Jsp,有时为了省却麻烦的事情,就使用Jsp代替servlet.尤其是英控制功能。 实际上,这个控制功能是封装在一个Javabcan中,Jsp使用scope=application来调用这个Javabean,这样,具备控制功能的javabean就类似servlet常驻内存,并和后台各种中间件交互操作。 “首页”的展现 在实际应用中,我们经常有多个用户要同时访问一个页而,如首页,这个首页中有很多功能要运行,比如目录分类,首页程序要从数据库中读入树形数据并展开,输岀到首页,这个功能是封装在Javabean中的。 那么首页Jsp调用这个Javabean时,使用scope=application,再通过树形数据的缓冲算法,这样,多个用户同时访问首页时,首页JSp就无需每次启动Javabean然后再反复读取数据库了。无疑大大提髙速度。 所以如果你的首页Jsp访问量很髙,那么就应该在这方而多花点时间优化。 更多信息请查看IT技术专栏

Jsp传递中文参数详解

Jsp传递中文参数详解 目前在jsp页面中传递中文参数,主要有两种方式: URL(GET)方式,例如:http://website/test1.jsp?act=add&type=桔子 ¶m=%20D%20B FORM(POST)方式,例如:

下面针对这两种情况,分别提供中文正确传递的解决方法 方式1:URL方式 例如:http://website/test1.jsp?act=add&type=桔子¶m=%20D%20B 一般来说我们很少直接在URL里面把参数写成中文,如例子中的"type=桔子"这样传递。如果出现这种情况,在我们的接收参数的页面我们只需要做个简单的转换就可以了。 代码test1.jsp:(主要部分) <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <% String type = request.getParameter("type"); String result = new String(type.getBytes("iso-8859-1"), "gb2312"); out.println(result); %> 还有更普遍的做法是对url中的中文字符进行编码,变成类似type=%20D%20B这样的字符。 代码MyJsp1.jsp: <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ page import="https://www.360docs.net/doc/6418980760.html,.*" %> ’>test 代码MyJsp2.jsp: <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ page import="https://www.360docs.net/doc/6418980760.html,.*" %>

Jsp详解

Jsp详解 1.简介 2.Jsp的运行原理 3.Jsp的语法 1.Jsp模板元素 2.Jsp中的脚本表达式 3.Jsp中的脚本片段 4.Jsp的声明 5.Jsp注释 6.Jsp指令 1.首先我们来看一下page指令的用法 2.下面在来看一下include指令 3.最后来看一下taglib指令 7.Jsp中内置的9个隐式对象 8.JSP标签库 1.jspinclude标签 2.jspforward标签 3.jspparam或者jspparams标签 4.jspuseBean标签jspsetProperty标签jspgetProperty标签 9.Jsp中怎么排查错误 简介: JSP全称是JavaServer Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。 JSP这门技术的最大的特点在于,写jsp就像在写html,但: 它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。 相比servlet而言,servlet很难对数据进行排版,而jsp除了可以用java代码产生动态数据的同时,也很容易对数据进行排版。 不管是JSP还是Servlet,虽然都可以用于开发动态web资源。但由于这2门技术各自的特点,在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。 其原因为,程序的数据通常要美化后再输出: 让jsp既用java代码产生动态数据,又做美化会导致页面难以维护。

让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。 因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做。 Jsp的运行原理: 目标: Web服务器是如何调用并执行一个jsp页面的? Jsp页面中的html排版标签是如何被发送到客户端的? Jsp页面中的java代码服务器是如何执行的? Web服务器在调用jsp时,会给jsp提供一些什么java对象? 思考:JSP为什么可以像servlet一样,也可以叫做动态web资源的开发技术? 其实Jsp就是一个Servlet,所以我们要先介绍Servlet的相关技术,当我们第一次访问Jsp 的时候,Jsp引擎都会将这个Jsp翻译成一个Servlet,这个文件存放在Tomcat中的work目录中,这里,我们新建一个MyJsp.jsp页面,然后访问以下,我们看一下翻译后的源码: 1.<%@ page language="java"import="java.util.*"pageEncoding="utf-8"%> 2. 3. 4. 5. 6. 7.My JSP 'MyJsp.jsp' starting page 8. 9. 10. 11. 12. This is my JSP page.
13.

图文详解win8系统下Myeclipse+Tomcat+MySQL+Navicat的jsp网站开发环境配置

图文详解win8系统下Myeclipse+Tomcat+MySQL+Navicat的jsp网站开发环境配置 1、安装Tomcat 首先必须安装Tomcat,不然点Myeclipse新建web project时,你会发现怎么也点不开,你还会以为Myeclipse是不是有什么问题的。因此我建议先装Tomcat再装Myeclipse。 (1)在Tomcat官网下载Tomcat,我下载的是apache-tomcat-6.0.37-windows-x64.zip,建议新手选择zip文件,不要用安装版本,以后等熟练掌握tomcat的基本使用方法后,再慢慢打开里面的资源,查询其源码,便于更深入的了解掌握tomcat的运行原理。 (2)将tomcat直接解压缩到指定文件夹。我放在了D:\Java\tomcat下。 (3)配置JA V A_HOME。(首先要配置jdk运行环境设置,请参考我前面写过的“图文详解Win8系统安装最新JA V A、Android、Eclipse开发环境”,在百度文库里有) 在环境变量中的用户变量中新建JA V A_HOME 请注意,在JA V A_HOME的变量值后面不要加“;”,否则tomcat启动不了,会出现如下错误,那是因为tomcat会把“;”当做一个路径去理解。

配置完毕后,在cmd中转入到tomcat的bin目录下,输入startup,看到下面的东东你就成功了。

(4)测试tomcat。打开浏览器,在地址栏输入:http://localhost:8080,如下图就ok了 2、安装与配置myeclipse (1)Myeclipse的安装在这就不多讲了,因为myeclipse是需要付费,所以我找的是8.5低版本可以破解的,用于开发基本够了。如果你一定要用最新版本,请去myeclipse购买或者申请试用序列号。个人体会,如果你认真学习,试用序列号就可以满足学习的需要,说不定还能开发出一个比较挣钱的东东,那时候就有足够的钱去付费了。 Myeclipse的注册方法是,打开myeclipse后在菜单栏选择:myeclipse> Supscription Information 注册。 注意破解版的myeclipse的注册必须在断网的前提下进行,如果联网打开的,请先关闭,断网后再打开注册。如果还是不行,请先删除myeclipse,再安装。安装时将软件默认安装的c:\...\AppData\Local\Genuitec\Common换个位置即可。为了提高安全的可靠性,建议用360将系统注册表和垃圾全部清理一次。

TLD文件配置详解jsp自定义标签

TLD文件配置详解(jsp自定义标签) TLD文件配置详解 write org.apache.struts.taglib.bean.WriteTag empty bundle false true 其中: write:这个Tag的名字 org.apache.struts.taglib.bean.WriteTag:这个Tag 是由那个类实现的(这个class可以在struts.jar包中找到) empty:这个Tag可以直接结尾,不需要填写内容 这里bodycontent有三个可选值 jsp 标签体由其他jsp元素组成 如果其有jsp元素,那么标签会先解释,然后将元素的实际值传入。比如标签体里含有<%=attributeName%>这样子的jsp元素,此时标

签会按attributeName的实际值是什么就传入什么。这个是最常用的一个。 empty 标签体必须为空 在引用这个Tag的时候,可以,而不必 tagdependent 由标签解释,不带jsp转换 这里标识的是这个Tag的一个参数 bundle这个参数的名字 false这个参数是否是必填相 如果为true则必须写这个参数,否则会报错 true是说这个标签的值可以写入 rtexprvalue:"RUN-TIME EXPRESSION VALUE",是否可以动态赋值,在jsp中如value="<%=attributeName%>"

jsp、Servlet常见问题详解

为什么GenericServlet在init(ServletConfig config)基础上增加了一个init()方法? init()方法被GenericServlet.init(ServletConfig config)方法调用。 init()方法方便了开发人员定制Servlet的初始化,而无须去维护ServletConfig对象的存储工作。 重写GenericServlet.init(ServletConfig config)必须要显示的调用super.init(config)方法。 ServletContext.getContect(https://www.360docs.net/doc/6418980760.html,ng.String uripath)的作用是什么? 返回同一Server中指定的path对应的ServletContext对象,通过该对象可以实现与Server中的其他Context 打交道。 uripath必须是以"/"开始(该路径的含义是相对于整个Servlet文档的根路径,而不是当前ServletContext 的根路径)。 Servlet生命周期是什么? 一般的Servlet(GenericServlet,即与协议无关的Servlet)的生命周期:init() --> GenericServlet.service(ServletRequest req, ServletResponse res) --> destroy. HttpServlet的生命周期: init() --> GenericServlet.service(ServletRequest req, ServletResponse res)---> service(HttpServletRequest req, HttpServletResponse resp) --> doXXXX()-->destroy. 有没有必要重写GenericServlet.service()方法? 对于HttpServlet来说没有必要。只需要重写它的doXXXX()方法就可以了。HttpServlet中service()方法会自动的根据用户请求类型把请求转发给相应的doXXXX()方法(例如doGet()方法)。 ServletRequest.getReader()和ServletRequest.getInputStream()如何使用? 注意两个方法不能同时使用。 ServletRequest.getRealPath(String path)方法已经不推荐使用。 请使用ServletContext.getRealPath(String path)方法。 ServletResponse缺省的字符集(charset)是什么? ServletResponse缺省的字符集(charset)是ISO-8859-1,可以通过setContentType(https://www.360docs.net/doc/6418980760.html,ng.String)方法改变新的字符集。 例如:setContentType("text/Html; charset=Shift_JIS").

JSP应用语法详解大全

JSP应用语法详解大全 1)HTML注释: 可以用注释内容,也可以用表达式. 2)隐藏注释: 注释会被JSP编译时被忽略.编译器不会对之间的语句编译,它不会显示在客户的浏览器和源代码中. 3)声明: 声明你将要在JSP程序中用到的变量和方法.可以一次性声明多个变量和方法,要以";" 结尾,声明在Java中要合法. 4)表达式: JA V A中的表达式,会被显示在JSP页面中,注意不要有";". 5)JA V A代码: 包含有效JA V A代码. 6)Include指令: 可以包含HTML,JSP,文本文件,JA V A代码,要注意在这个包含文件中不能使用有时会导致错误. 属性: file指相对路径,如:"error.jsp""templates/onlinestore.html""/beans/calendar.jsp" 如果这个路径以"/"开头,那么这个路径主要是参照JSP应用的上下关系路径,如果路径是以文件名或目录名开头,那么这个路径就是正在使用的JSP文件的当前路径. 7)Page指令: 属性: -language="java" 声明脚本语言的种类,暂时只能用"java" -extends="package.class" 继承一个类 -import="{package.class | package.* }, ..." 导入一个包,下面的包是默认自动导入的. https://www.360docs.net/doc/6418980760.html,ng.*,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.* -session="true | false" 是否允许session会话,默认true. -buffer="none | 8kb | sizekb" 设置缓冲区大小默认值是8kb,none是关闭缓冲区,sizekb是自己设置大小. -autoFlush="true | false" 是否刷新缓冲区,true(缺省值)输出正常,false这个buffer溢出,就会导致一个错误,buffer设置为none,就要把这个设置为false.

java学士后详细课程

课程阶段科目授课内容 第一单元 Java基础 训练总结和语言表达训练 学习笔记文档的制作、自我介绍总结ppt编写、邮件服务器的配置及 应用原理、数据结构和算法研讨 程序逻辑训练 1、Java发展简史,Java开发环境的搭建,体验Java程序的开发。 2、Java语法格式,变量,运算符,流程控制,函数,常用内置函 数,内置对象(String,Date,Math,RegExp),类型转换详解 3、数组和操作数组的类。针对数组的常用查找、排序算法原理,以 及其Java实现 Mysql 数据库技术 1、熟练掌握数据库的基本原理及数据结构,能够分析各种关系 2、掌握SQL语句编程,建库、建表、建约束、主键、外键约束等脚本 语句。 3、能够进行基本的数据库查询操作,掌握各种关联及分组等联合查询 4、根据业务进行数据分析,实现相关操作处理 面向 对象编程Java面向对象分析和 设计 1、掌握面向对象的特征,能够进行系统分层架构,掌握异常的原理及 利用异常、掌握面向接口编程思想。 2、设计类,设计类的基本原则,类的实例化过程,类的细节:构造函 数、this关键字、方法和方法的参数传递过程、static关键字、final 关键字,Java的垃极回收机制 3、对象的三大特性:封装、继承和多态、抽象类、接口。 4、JDBC技术及集合框架的运用。 5、理解并运用常用的设计模式:Singleton、Template、Strategy模 式,能够熟练的利用Factory+DAO模式。 6、能够深入理解ORMapping框架,利用泛型实现优化的DAO设计。 WEB技术基础Html语言及DIV+CSS 技术进行页面设计 1、Html常用标签,Table布局,网页结构讲解,表单的应用,框架 与浮动框架(Iframe)的应用,头标记的作用和使用 2、Css全部分类、属性讲解,Css选择器,常用Div样式,Css盒子 模型,Div+Css网页布局,浏览器兼容性讲解 课程阶段科目授课内容项目实战 Web中级训练JavaScript技术及页 面特效制作 1、变量,运算符,流程控制,函数,数组, 常用内置函数,内置对象(String,Date, Math,RegExp),类型转换详解 2、常用javascript函数详解,包括数组函数, 日期函数,数学函数,字符串函数,其它 函数 3、BOM(浏览器对象模型)理解并运用BOM实 实战1:用 Javascript实现网 页特效操作,动态菜 单等 实战3:所有 Javascript常用函

jsp正则表达式使用详解

正则表达式使用详解 简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。其作用如下: 测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。 替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。 根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。 基本语法 在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。 正则表达式的形式一般如下: /love/其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。 较为常用的元字符包括:“+”,“*”,以及“?”。 “+”元字符规定其前导字符必须在目标对象中连续出现一次或多次。 “*”元字符规定其前导字符必须在目标对象中出现零次或连续多次。 “?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。 下面,就让我们来看一下正则表达式元字符的具体应用。 /fo+/因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的“fool”, “fo”, 或者“football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。 /eg*/因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的“easy”, “ego”, 或者“egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。 /Wil?/因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的“Win”, 或者“Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。 有时候不知道要匹配多少字符。为了能适应这种不确定性,正则表达式支持限定符的概念。

JSP四大作用域详解

JSP四大作用域详解 JSP中有四个作用域:页面作用域(page scope),请求作用域(request scope),会话作用域(session scope)和应用程序作用域(application scope)。这四个作用域可以帮助我们在JSP页面中传递和共享数据,尤其是在多个页面之间。 1. 页面作用域(page scope): 页面作用域是指在当前页面中有效的作用域。在当前页面和其他包含页面之间,页面作用域的数据是共享的。可以通过 `<%=pageContext.getAttribute("name")%>`这种方式来获取页面作用域的属性值。页面作用域的属性在该页面被销毁之后将不再有效。 2. 请求作用域(request scope): 请求作用域是指在一次HTTP请求和对应的响应期间有效的作用域。当一个请求被发起时,请求作用域的属性可以通过 `<%=request.getAttribute("name")%>`这种方式获取,然后在请求结束时被销毁。在同一个请求中的不同JSP页面之间可以共享请求作用域的数据。 3. 会话作用域(session scope): 会话作用域是指在一个用户的整个会话期间有效的作用域。当用户通过登录或者其他方式开始使用一个Web应用程序时,会话开始,并且会话作用域的属性也开始生效。可以通过 `<%=session.getAttribute("name")%>`这种方式获取会话作用域的属性值。会话作用域的属性在用户注销或者会话超时之后被销毁。

4. 应用程序作用域(application scope): 应用程序作用域是指整个Web应用程序中有效的作用域,它对所有用户都是可见的。在整个应用程序中,应用程序作用域的属性是共享的。可以通过`<%=application.getAttribute("name")%>`这种方式获取应用程序作用域的属性值。应用程序作用域的属性在应用程序关闭或者服务器重启之后被销毁。 这四大作用域的选择和使用要根据具体的需求和场景来决定。一般来说,页面作用域适合在一个页面内共享数据,请求作用域适合在同一个请求的多个页面之间共享数据,会话作用域适合在一个用户的整个会话期间共享数据,应用程序作用域适合在整个Web应用程序中共享数据。 需要注意的是,尽量不要过度使用会话和应用程序作用域,因为它们在内存中占用的资源是比较大的。另外,需要合理地使用作用域,不要在作用域中存放大量的数据,以避免对服务器性能的影响。 总结来说,JSP中的四大作用域可以帮助我们在页面之间传递和共享数据,使得应用程序的逻辑更加清晰和灵活。大家要根据具体的需求来选择合适的作用域,并且注意合理使用和释放作用域中的数据,以提高应用程序的性能。

JSP连接SQLite数据库详解

下载SQLite数据库的JDBC 这里给出一个中文站点的URL: https://www.360docs.net/doc/6418980760.html,/Upfiles/source/sqlitejdbc-v033-nested.tgz 将下载到的包解压后得到jar包sqlitejdbc-v033-nested.jar 放到%JAVA_HOME%\lib 下, 并且将其添加到classpath系统环境变量中,我的classpath系统环境变量现在为: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\sqlit ejdbc-v033-nested.jar 在你的代码中引用这个驱动: Class.forName("org.sqlite.JDBC"); Connection conn = DriverManager.getConnection("jdbc:sqlite:filename");//filename为你的SQLite数据名称 // ... use the database ... conn.close(); 示例程序如下:

之 Connection conn = DriverManager.getConnection("jdbc:sqlite:zieckey.db"); Statement stat = conn.createStatement(); stat.executeUpdate("create table tbl1(name varchar(20), salary int);");//创建一个表,两列 stat.executeUpdate("insert into tbl1 values('ZhangSan',8000);"); //插入数据 stat.executeUpdate("insert into tbl1 values('LiSi',7800);"); stat.executeUpdate("insert into tbl1 values('WangWu',5800);"); stat.executeUpdate("insert into tbl1 values('ZhaoLiu',9100);"); ResultSet rs = stat.executeQuery("select * from tbl1;");//查询数据 while(rs.next()){//将查询到的数据打印出来 System.out.print("name = "+ rs.getString("name")+" ");//列属性一 System.out.println("salary = "+ rs.getString("salary"));//列属性二

jsp中各种编码格式设置详解

jsp中各种编码格式设置详解 关键字: pageencoding request 原文: 在JSP/Servlet 中主要有以下几个地方可以设置编码,pageEncoding="UTF-8"、contentType="text/html;charset=UTF -8"、 request.setCharacterEncoding("UTF-8")和 response.setCharacterEncoding ("UTF-8"),其中前两个只能用于JSP中,而后两个可以用于JSP和Servlet中。 1、pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码。 众所周知,JSP在服务器上是要先被编译成Servlet的。pageEncoding="UTF-8"的作用就是告诉JSP编译器在将JSP文件编译成Servlet时使用的编码。通常,在JSP内部定义的字符串(直接在JSP中定义,而不是从浏览器提交的数据)出现乱码时,很多都是由于该参数设置错误引起的。例如,你的JSP文件是以GBK 为编码保存的,而在JSP中却指定pageEncoding="UTF-8",就会引起JSP内部 定义的字符串为乱码。 另外,该参数还有一个功能,就是在JSP中不指定contentType参数,也不使用response.setCharacterEncoding方法时,指定对服务器响应进行重新编码的编码。 2、contentType="text/html;charset=UTF-8"的作用是指定对服务器响应进行重新编码的编码。

在不使用response.setCharacterEncoding方法时,用该参数指定对服务器响应进行重新编码的编码。服务器在将数据发送到浏览器前,对数据进行重新编码时,使用的就是该编码。 3、request.setCharacterEncoding("UTF-8")的作用是设置对客户端请求进行重新编码的编码。 该方法用来指定对浏览器发送来的数据进行重新编码(或者称为解码)时,使用的编码。 4、response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。 服务器在将数据发送到浏览器前,对数据进行重新编码时,使用的就是该编码。 其次,要说一说浏览器是怎么样对接收和发送的数据进行编码的 response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。同时,浏览器也是根据这个参数来对其接收到的数据进行重新编码(或者称为解码)。所以在无论你在JSP中设置 response.setCharacterEncoding ("UTF-8")或者 response.setCharacterEncoding("GBK"),浏览器均能正确显示中文(前提是你发送到浏览器的数据编码是正确的,比如正确设置了pageEncoding参数等)。读者可以做个实验,在JSP中设置 response.setCharacterEncoding("UTF-8"),在IE 中显示该页面时,在IE的菜单中选择"查看(V)"à"编码 (D)"中可以查看到是" Unicode(UTF-8)",而在在JSP中设置response.setCharacterEncoding ("GBK"),在IE中显示该页面时,在IE的菜单中选择"查看(V)"à"编码(D)"中可以查看到是"简体中文(GB2312)"。

在JSP编程中Application的使用方法详解

Jsp调用Javeabean命令UseBean中有Scope设置,一般有Application session page等设置,Page就是每页重新产生usebean中的javabean新对象,一般情况是用这种,如果多个Jsp程序间为共享数据,可以使用session 而application的意思,该javabean将一直存在,与session相对用户来说,application 是相对应用程序的,一般来说,一个用户有一个session,并且随着用户离开而消失;而application则是一直存在,类似一个servlet程序,类似整个系统的"全局变量",而且只有一个实例。 MVC中控制功能 因此application这个特性,很适合用来做MVC中的控制功能,一般传统MVC是用servlet 做控制功能,V基本是Jsp页面,M就是中间件Javabean之类。 但是随着Jsp功能的完善和推广,逐渐有替代servlet之趋势,我们在实践中更多使用的也是Jsp,有时为了省却麻烦的事情,就使用Jsp代替servlet.尤其是其控制功能。 实际上,这个控制功能是封装在一个Javabean中,Jsp使用scope=application来调用这个Javabean,这样,具备控制功能的javabean就类似servlet常驻内存,并和后台各种中间件交互操作。 “首页”的展现 在实际应用中,我们经常有多个用户要同时访问一个页面,如首页,这个首页中有很多功能要运行,比如目录分类,首页程序要从数据库中读入树形数据并展开,输出到首页,这个功能是封装在Javabean中的。 那么首页Jsp调用这个Javabean时,使用scope=application, 再通过树形数据的缓冲算法,这样,多个用户同时访问首页时,首页JSp就无需每次启动Javabean然后再反复读取数据库了。无疑大大提高速度。 所以如果你的首页Jsp访问量很高,那么就应该在这方面多花点时间优化。 更多信息请查看IT技术专栏

c标签详解

C标签 Java代码 1.关键字:JSTL标签、、< c:remove>、 2. 3.原来一直没有看过,我说过我是新手,但是好多资料上似乎也不重视 JSTL 。我看 项目源代码发现其中使用到了这个标签库,感觉其还真是方便,页面看起来更加清 爽。减少了 JAVA 程序员亲自写的代码量,还真验证了,不懒不做程序员,程序员如果写代码不想着偷懒,那么生活是很无趣的。 4. 5.下面总结总结,学习学习。:) 6. 7.JSP 标准标记库( Standard Tag Library , JSTL) 是一组以标准化格式 实现许多通用的 Web 站点功能的定制标记。 8. 9.JSP 技术的优势之一在于其定制标记库工具。除了核心 JSP 标记,如 jsp:inc lude 之外,定制标记库工具使您能够创建唯一的标记来描述以站点或应用程序为 导向的操作。一旦您创建了定制标记库 ( 简称 taglib) ,当您扩展项目或转向另一个项目时您可以重复使用这些标记。您还可以将 taglib 传递给其它开发人 员,从而他们可以在自己的网站上使用,或者在您 Web 应用程序的其它部分使 用。 10. 11. 12. 13. JSTL 的目标是为了简化 JSP 页面的设计。对于页面设计人员来说,使 用脚本语言(默认值是 JAVA 语言)操作动态数据是比较困难的,而采用标签和表达式语言相对容易一些, JSTL 的使用为页面设计人员和程序开发人员的分工协作提供了便利。 14. 15.一.配置 JSTL 16. 17.包括两个 JAR 文件, jstl.jar 和 standard.jar 。是什么没有必要管,重 在应用(1+1? =2,我们没有必要深究,只需要知道这么用就行。)。 18. 19.原文引入: 20. 21.<%@ taglib prefix="c" uri="https://www.360docs.net/doc/6418980760.html,/jsp/jstl/core " %> 22. 23.<%@ taglib prefix="sql" uri="https://www.360docs.net/doc/6418980760.html,/jsp/jstl/sq l" %>

jsp和servlet文献参考

[1]孙卫琴,李洪成.《Tomcat 与JSP Web 开发技术详解》.电子工业出版社,2003年6月:1-205 [2]BruceEckel.《JSP编程思想》. 机械工业出版社,2003年10月:1-378 [3]FLANAGAN.《JSP技术手册》. 中国电力出版社,2002年6月:1-465 [4]孙一林,彭波.《JSP数据库编程实例》. 清华大学出版社,2002年8月:30-210 [5]LEE ANNE PHILLIPS.《巧学活用HTML4》.电子工业出版社,2004年8月:1-319 [6]飞思科技产品研发中心.《JSP应用开发详解》.电子工业出版社,2003年9 月:32-300。 [7]耿祥义,张跃平.《JSP实用教程》. 清华大学出版社,2003年5月1日:1-354 [8]孙涌.《现代软件工程》.北京希望电子出版社,2003年8月:1-246 [9]萨师煊,王珊.《数据库系统概论》.高等教育出版社,2002年2月:3-460 [10]Brown等.《JSP编程指南(第二版)》. 电子工业出版社,2003年3月:1-268 [11]清宏计算机工作室.《JSP编程技巧》. 机械工业出版社, 2004年5月:1-410 [12]朱红,司光亚.《JSP Web编程指南》.电子工业出版社, 2001年9月:34-307 [13]赛奎春.《JSP工程应用与项目实践》. 机械工业出版社, 2002年8月:23- [1] [美]Walter Savitch. Absolute Java[M].北京:电子工业出版社,2005. [2] 计磊,李里,周伟.J2EE整合应用案例[M].北京:人民邮电出版社,2007. [3] 王虎,张俊.管理信息系统[M].武汉:武汉理工大学出版社,2004.7. [4] 启明工作室编著.MIS系统开发与应用[M].北京:人民邮电出版社,2005.1. [5] 王珊,陈红.数据库系统原理教程[M].北京:清华大学出版社,2004.6. [6] 方睿,刁仁宏,吴四九编著.网络数据库原理及应用[M].四川:四川大学出版社,2005.8. [7] 耿祥义,张跃平编著.JAVA2实用教程(第二版)[M].北京:清华大学出版社,2004.11. 1] 俞传正.基于博客的个人知识管理平台研究[D].天津:天津师范大学,2006. [2] 陈明.Blog、Wiki在协作学习中的应用研究[D].武汉:华中师范大学, 2006. [3] 郭华伟.基于内容聚合BLOG学习平台的辅助教学研究与实践[D].北京: 首都师范大学,2006.

Mvc增删改查详解

Mvc 增删改查详解 4 具体流程说明: 1 :jsp 通过或 传值给servlet. 2 :servlet 通过request.getParameter方(法接值,然后调用javabean中的方法,把接到的值作为参数传入其中。 3:javabean封装了对数据库操作的增删改查等方法,并返回我们所需要的对象,比如查询会返回List 对象。 4:转页,回到jsp 页面,如果需要给jsp 传值,则用request.setAttribute (方法存值,然后在转页到jsp 页面,在jsp 页面中用 request.getAttribute(方法接值来填充页面。 具体增删改查流程: 查询:对数据库进行增删改操作必先经过查询页面列表。要把数据库中查询的列表显示在jsp 页面中需要一个List 对象。List 里面装的是Map 对象或实体bean.所以jsp 要显示列表必然要经过填充List 的过程。然后把List 传给jsp 页面。 填充List 的方法封装在javabean中。Servlet 调用javabean 返回一个List 对象,然后把List 传给jsp,最后jsp 得到List 对象来填充页面。 流程:servlet---javabean(返回List 对象给servlet - servlet(存储List 对象,然后转页到jsp ------ j sp(得到List 对象填充页面。

增加的操作: 首先:增加页面不需要任何的接值,只有传值,用form 来向servlet 传递表单中的值,然后servlet 接值,后调用javabean的方法,传入所需参数,完成增加的操作,最后走查询操作返回查询页。 删除的操作:从列表页传递所需要的主键值到servlet,之后调用javabean里的方法,完成操作,最后走查询操作返回查询页。 修改的操作: 从列表页传递所需要的主键值到servlet,之后调用javabean 里的方法完成查一条的操作,把返回的对象传回 ,然后servlet 接值,后jsp 页面,把页面填充之后提交给servlet 调用javabean 的方法,传入所需参数,完成修改的操作,最后走查询操作返回查询页。 是谁实现了增删改查?? 1 一定要有完整的sql 语句。 2 有一个对象有执行sql 语句的能力,也就是有操作数据库的能力。 这个对象是谁? 答:Statement 对象和PreparedStatement 对象 他们是怎么被建立的? 答:他们是Connection 对象建立的,首先要激活Connection 对象。之后 con.CreateStatement( 造出Statement ,conn.prepareStatement(sq造l 出PreparedStatement 对象,注意里面要传入sql 语句,完整的或带?的。 为什么我们要把sql 语句写成带?的答:因为我们总是频繁的对数据库操作,为节省代码要写一个通用的方法来封装,把重复的代码写在方法里,把会改变的代码做为参数来传给方法体,这就是通用方法的思想,而?的位置无疑就是那会改变的值,也就是动态的值,不固定。

相关主题
相关文档
最新文档