欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSP使用Servlet作为控制器实现MVC模式实例详解

程序员文章站 2022-10-31 13:06:50
本文实例讲述了jsp使用servlet作为控制器实现mvc模式的方法。分享给大家供大家参考。具体如下: 一、目标: ① 初步理解mvc模式; ② 掌握servlet的...

本文实例讲述了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程序设计有所帮助。