1.介绍jsp:
虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSP Parser)转换成Servlet代码,然后Servlet代码被Java编译器编译成 .class 字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(Script Language)版。
由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA – Write Once, Run Anywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。因此,JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
2.JSP和ASP.NET相比较:
a.相对C#,JSP的脚本语言JAVA也是面向对象的、分布式的、解释的语言。
b.与C#相似JAVA同样去掉了难以理解的指针等概念,取而代之的是类和对象。
C. JSP有一项全新的技术――Servlet(服务器端程序)很好的节约了服务器资源。
d.JAVABeans是针对ASP.NET的Server Control的技术。只要会JAVA, JavaBeans就 很容易写出。
e.再有就是JAVA的JDBC数据库连接技术。
f.JSP对XML同样有十分广泛的支持。
G. Java与平台无关,asp.net依赖微软的操作系统
H jsp主要应用于中大型网站建设,安全且高效;
3.servlet实例的三个版本不足之处:
a) 大量重复代码,比如,数据库的连接与关闭代码,数据库的url及用户名密码暴露在servlet中,违背项目的安全性;代码不按功能进行划分,命名不合理;
b) 针对一个表的操作需要若干个servlet类来为之服务,如果数据库表多,会使web.xml的内容过长,管理混乱;
c) 页面与逻辑处理没有很好的解耦;
4.MVC概念:
Model:业务逻辑,则各种业务处理类实现;
View:客户端显示,通常由jsp来负责(例子是由html充当)
Controller:控制器,通常由servlet充当;
5.MVC的处理流程:
首选,是控制器接收到客户的请求,并由决定调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器调用相应的视图格式化模型层返回的数据,并通过视图展示给用户;
附:初学者常会突略的问题:
1. 字符串判断语句:
在java中String变量不是一个简单的变量而是一个类实例,不同的方法会得到不同的结果:
a.
String str1="我是傻瓜";
String str2="我是傻瓜"; (or String str2="我是"+"傻瓜"; )
if (str1==str2)
out.print("yes");
else
out.print("no");
结果是"yes"。
大概是编译优化,str1,str2指向同一个类实例;
b.
String str1,str2,str3;
str1="我是傻瓜";
str2="我是";
str3=str2+"傻瓜";
if (str1==str3)
out.print("yes");
else
out.print("no");
结果是"no"。
String str1=new String("我是傻瓜");
String str2=new String("我是傻瓜");
if (str1==str2)
out.print("yes");
else
out.print("no");
结果是"no"。
String str1=new String("我是傻瓜");
String str2=new String("我是傻瓜");
if (str1. equals (str2))
out.print("yes");
else
out.print("no");
结果是"yes"。比较字符串是否一致,要用:str1.equals(str2)或str1.compareTo(str2);
2. web.xml中有两种配置error-page
Eg.
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
上面配置了当系统发生 500 错误(即服务器内部错误)时,跳转到错误处理页面 error.jsp 。
Eg.
<error-page>
<exception-type>java.lang.NullException</exception-type>
<location>/error.jsp</location>
</error-page>
上面配置了当系统发生 java.lang.NullException (即空指针异常)时,跳转到错误处理页面 error.jsp;
3. 更改类的时候要记得重新启动服务器:
比如,我们写了一个类login.class(编译后的文件),部署后才发现有bug,之后我们修复重新生成login.class,然后我们将其替换掉原来发布在服务器的class文件,不要以为这样就行,要记得重启服务器。因为,可能这个class已经加载到服务器内存,每次调用该类的时候,如果容器在内存中找到,就不会去编译刚复制进来的类了。(自己的理解)
4. Web.xml的配置问题:
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
这个节点主要是配置站点的首页显示的,当我们创建一个网站时它就默认将其设成index.jsp。当然,我们要根据我们的需要来修改这个值,比如,我们相将其设成index.do(这里是关于servlet的映射地址),很多人会将其设成/index.do,这是不对的,我们不能像设置servlet的映射地址一样加个“/”。
<servlet-mapping>
<servlet-name>ControlServlet</servlet-name>
<url-pattern>/control.do</url-pattern>
</servlet-mapping>
这个跟上面就不一样,这里url-parttern里的节点值记得在前面加个“/”
5. 中文乱码问题:
a. response.setContentType("text/html;charset=GBK");
b. request.setCharacterEncoding("GBK");
c. response.setCharacterEncoding("GBK");
a 是设置servlet的输出文本类型,上面例子,是指html文本,编码为中文的GBK。
b 是设置request的流编码,servlet每当收到请求时,request对象封装了各种传过来的页面对象,如果不设其编码,当我们取值的时候,如果参数包含中文就可能出现乱码;
c 是设置response的流编码,servlet处理完请求一般会向客户端返回响应,这时response对象就封装各种字符串对象,如果这时不设中文编码gbk的话,当客户端解释的时候也有可能能出现中文乱码;
6. 最常见的异常:NullPointException:
这个问题,是所有面象对象程序设计都应该注意的问题,当然在java中也是特别常见的,我们在写调用对象的方法或者属性的时候,要考虑这个对象会不会是空的,比如:
String action = request.getParameter("action");
if(action == null || action == ""){
//dosomething
}
如果我们直接,if(action == "")就有可能报空指针异常了。
7. 执行servlet时,发生下载提示:
(1).可能性一:text/html;charset=GBK中间分号写成逗号.
(2).可能性二:XML中配置信息出错.
(3).可能性三:如定义全局变量时,例:CONTENT_TYPED在以后所用中放在双引号之中.
(4).可能性四:当上面的text/html,charset中写错字符的时候,也会提示下载.
8. 执行servlet时,发生404错误:
(1).多为xml中配置出错.
(2).可能在servlet通信方法中url出错.
(3).表单提交时:action路径.
(4).比较弱智的错误就是标记写错,请仔细检查.
9. 关于所附的几个实例的使用方法:
先将demos解压,放在硬盘的任何位置(前提是你能比较容易找到他们-_-)
打开我们的Escplise,然后在“package explorer”框里右击,选择“import”:如图,
10. 参考例子,见附件:http://download.youkuaiyun.com/detail/keyingbo2008/4313979