本文实例讲述了JSP使用Servlet作为控制器实现MVC模式的方法。分享给大家供大家参考。具体如下:
一、目标:
① 初步理解MVC模式;
② 掌握Servlet的编写;
③ 使用MVC模式完成登录功能。
二、主要内容:
① 分析JSP+JavaBean模式存在的问题,并介绍JSP+JavaBean+Servlet模式,以及和MVC模式的关系;
② 通过简单实例介绍Servlet的编写、配置和运行;
③ 采用Servlet完成登录功能的控制。
1、 JSP+JavaBean这种模式存在的问题?
JSP的强大之处在与人交互,也就是完成输入输出的功能。但是在JSP+JavaBean这种模式中,JSP不仅仅完成输入输出的功能,还完成系统的控制功能(接收用户请求,调用JavaBean,然后根据调用的结果,选择界面对用户进行响应)。所以在JSP发展的第三个阶段中,把控制功能从JSP中分离出来,使用Servlet来实现,形成JSP+JavaBean+Servlet这种模式,JSP仅仅完成输入和输出,JavaBean完成处理,而Servlet完成控制。
2、 JSP+JavaBean+Servlet
JSP负责输入输出,JavaBean负责实现业务逻辑(功能),Servlet完成控制。这种模式通常也被认为是MVC模式的一种实现。MVC模式把系统的业务逻辑、控制和输入输出进行分离,在开发应用的时候,可以单独考虑某一部分,简化开发。
V,表示视图,与人交户的部分,M,表示模型,完成功能,C,表示控制器。JSP通常充当视图,JavaBean是模型,Servlet作为控制器。
3、 什么是Servlet
Servlet也是一种Web组件,从完成的功能上来说,与JSP是相同的。Servlet是纯Java文件,是特殊的Java类。
Servlet与JavaBean有什么区别呢?都是Java类,但是Serlvet可以接收用户的请求,客户端可以直接访问。但是JavaBean不能被客户端直接访问,必须由JSP或者其他的Java文件(包括Servlet)来调用。
4、 实例:HelloServlet
下面是一个Servlet,完成的功能是输出一句话"Servlet测试!"。
1)文件编写
package servlet; // Servlet开发所需要的包 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throw IOException,ServletException { response.setContentType("text/html;charset=gb2312"); PrintWriter out = response.getWriter(); out.print("Servlet测试!"); } }
2)编译
需要把C:/Program Files/Apache Software Foundation/Tomcat 6.0/lib/servlet-api.jar配置到classpath中,然后编译。
3)配置
在配置文件web.xml中写。包括两部分:声明和访问方式设置。
声明:
<servlet> <servlet-name>hello</servlet-name> <servlet-class>servlet.HelloServlet</servlet-class> </serlvet>
访问方式设置:
<servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
5、 测试
访问:http://127.0.0.1:8080/ch6/hello
6、 如何采用这种模式实现登录功能?
界面界面和响应界面都不需要修改,JavaBean完成处理,也不需要改变,只是使用Servlet来替换原来的login-process.jsp,完成控制功能。
1)参考代码如下:
package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javabean.*; public class LoginProcess extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { // 第一步:获取用户的输入信息 String username = request.getParameter("username"); String userpass = request.getParameter("userpass"); // 第二步:调用JavaBean User user = new User(); user.setUsername(username); user.setUserpass(userpass); boolean b = user.check(); // 第三步:选择一个界面对用户进行响应 String forward; if(b) forward = "success.jsp"; else forward = "failure.jsp"; RequestDispatcher rd = request.getRequestDispatcher(forward); rd.forward(request,response); } }
上面的代码基本上展示了Servlet作为控制器的基本功能。
2)配置
<servlet> <servlet-name>process</servlet-name> <servlet-class>servlet.LoginProcess</servlet-class> </servlet> <servlet-mapping> <servlet-name>process</servlet-name> <url-pattern>/process</url-pattern> </servlet-mapping>
3)修改登录界面的action属性
<%@ page contentType="text/html;charset=gb2312"%> 请登录<br> <form name="form1" method="post" action="process"> 用户ID:<input type="text" name="username"><br> 口令:<input type="password" name="userpass"><br> <input type="submit" value="登录"><input type="reset" value="重置"> </form> <%@ include file="contact.jsp"%>
7、 测试运行
访问登录界面,输入信息,然后提交。
这时候会报错,提示请求方式不支持。需要在Servlet中增加如下方法:
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { doGet(request,response); }
因为JSP页面中的请求方式为post,所以Servlet中需要提供doPost方法,方法的定义和doGet相同,这里方法的实现只需要调用doGet方法即可。
8、 Servlet的主要方法
init方法,用于初始化;
服务类方法:doGet方法和doPost方法
destroy方法,释放资源
9、 生命周期
服务器接收到请求之后,会把请求信息封装成HttpServletRequest对象和HttpServletResponse对象。
第一次访问servlet的时候,加载类,创建对象,初始化(init方法),调用服务类方法(如果是get请求,调用doGet方法,如果是post请求,调用doPost方法)。
后续访问,直接调用服务器类方法。
卸载Servlet的时候,或者关闭服务器的时候,调用destroy方法释放资源。
希望本文所述对大家的JSP程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]