java web 基于servlet及MVC的学习小结

本文详细介绍了JSP和Servlet的基本概念及其执行原理,对比了JSP与ASP.NET的区别,并探讨了MVC架构在JSP/Servelt开发中的应用。此外,还列举了一些常见的开发问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.介绍jsp:

虽然在形式上JSPASPPHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASPPHP完全不同。在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.JSPASP.NET相比较:

a.相对C#,JSP的脚本语言JAVA也是面向对象的、分布式的、解释的语言。

b.与C#相似JAVA同样去掉了难以理解的指针等概念,取而代之的是类和对象。

C.  JSP有一项全新的技术――Servlet(服务器端程序)很好的节约了服务器资源。

dJAVABeans是针对ASP.NETServer Control的技术。只要会JAVA JavaBeans         很容易写出。

e.再有就是JAVAJDBC数据库连接技术。

fJSPXML同样有十分广泛的支持。

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.         字符串判断语句:

javaString变量不是一个简单的变量而是一个类实例,不同的方法会得到不同的结果:

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");

是设置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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值