上一篇博文写到模式一:JSP+JavaBean

链接地址:http://wxmimperio.coding.io/?p=155

JSP中两种模式的总结

链接地址:http://wxmimperio.coding.io/?p=207


这篇对模式二:JSP+Servlet+JavaBean,做一个小的总结。

模式二中结合了JSP和Servlet,充分利用了两个技术的原有特点。是最典型的MVC设计模式,将输入、处理、输出分成视图、模型和控制器,各自执行各自的任务。请求会由前面的Servlet接受并处理后,重新定向到JSP页面。在Servlet作为控制器时,每个Servlet通常只实现很少的一部分功能,多个Servlet控制器就可以结合起来完成复杂的逻辑任务。这样的好处是Servlet的重用性很好利用,一个副作用就是可能会导致请求相应加长。在此模式里,JavaBean作为模型的角色,它充当JSP和Servlet通信的中间工具。Setvlet处理完成设置Bean的属性,JSP读取此Bean的属性,然后进行显示。

在项目开发过程中,前端页面设计者可以方便地开发JSP页面,而Servlet则更适合后台开发,因为Servlet技术需要更多的Java编程。


实例说明:

这里写一个留言并查看的小例子帮助理解这种模式,会用到JDBC编程、SQL、Servlet的相关知识,这里不做相关介绍。

(开发环境是Idea+Tomcat+Mysql,提前做好相应jar包的引入)

数据库脚本:

  • create database messages;
  • use messages;
  • #留言信息
  • create table message(
  • title varchar(20) not null,                #标题
  • username varchar(20) not null,      #名字
  • content varchar(20) not null,          #内容
  • mail varchar(20)                             #邮箱
  • );

1.添加留言的Servlet(AddMessageServlet.java)

  • package jsp_javabean_servlet;
  • import javax.servlet.*;
  • import javax.servlet.http.*;
  • import java.io.*;
  • import java.sql.*;
  • public class AddMessageServlet extends HttpServlet{
  • private Connection con;
  • /**
  • * 创建数据库连接
  • */
  • public AddMessageServlet() {
  • try {
  • Class.forName("com.mysql.jdbc.Driver");
  • String url = "jdbc:mysql://localhost:3306/messages?user=root&password=root";
  • con = DriverManager.getConnection(url);
  • } catch (ClassNotFoundException e) {
  • e.printStackTrace();
  • } catch (SQLException e) {
  • e.printStackTrace();
  • }
  • }
  • /**
  • * 接受get请求,执行数据库操作,把视图发送到下一个页面
  • */
  • public void doGet(HttpServletRequest request,HttpServletResponse response)
  • throws IOException,ServletException {
  • //接收请求的参数
  • request.setCharacterEncoding("gbk");
  • String name = request.getParameter("name");
  • String mail = request.getParameter("email");
  • String title = request.getParameter("title");
  • String content = request.getParameter("content");
  • //插入留言
  • try {
  • String  sql = "insert into message(title,username,content,mail) values(?,?,?,?)";
  • PreparedStatement stm = con.prepareStatement(sql);
  • stm.setString(1,title);
  • stm.setString(2,name);
  • stm.setString(3,content);
  • stm.setString(4,mail);
  • try {
  • stm.executeUpdate();
  • } catch (Exception e){}
  • con.close();
  • //把视图发送给目标
  • RequestDispatcher requestDispatcher =
  • request.getRequestDispatcher("/viewMessages_servlet");
  • requestDispatcher.forward(request,response);
  • }catch (Exception e) {
  • e.printStackTrace();
  • }
  • }
  • /**
  • * doPost请求
  • */
  • public void doPost(HttpServletRequest request,HttpServletResponse response)
  • throws IOException,ServletException {
  • doGet(request,response);
  • }
  • }

2.留言浏览的Servlet(ViewMessageServlet.java)

  • package jsp_javabean_servlet;
  • import javax.servlet.*;
  • import javax.servlet.http.*;
  • import java.io.*;
  • import java.sql.*;
  • import java.util.*;
  • public class ViewMessageServlet extends HttpServlet{
  • private Connection con;
  • /**
  • * 接受get请求,执行数据库操作,结果保存到request中
  • * 把视图发送到下一个页面
  • */
  • public void doGet(HttpServletRequest request,HttpServletResponse response)
  • throws IOException,ServletException{
  • Collection ret = new ArrayList();
  • try {
  • Statement stm = con.createStatement();
  • ResultSet result = stm.executeQuery("select count(*) from message");
  • //统计留言数量
  • int message_count = 0;
  • if(result.next()) {
  • message_count = result.getInt(1);
  • result.close();
  • }
  • //从数据库中读取留言信息
  • if(message_count  > 0) {
  • result = stm.executeQuery("select * from message");
  • while (result.next()) {
  • String title = result.getString("title");
  • String name = result.getString("username");
  • String mail = result.getString("mail");
  • String content = result.getString("content");
  • MessageVO message = new MessageVO();
  • message.setName(name);
  • message.setTitle(title);
  • message.setEmail(mail);
  • message.setContent(content);
  • ret.add(message);
  • }
  • result.close();
  • stm.close();
  • }
  • //将执行结果发送到目标
  • request.setAttribute("messages",ret);
  • RequestDispatcher requestDispatcher =
  • request.getRequestDispatcher("viewMessage.jsp");
  • requestDispatcher.forward(request,response);
  • } catch (Exception e) {
  • e.printStackTrace();
  • }
  • }
  • /**
  • * doPost请求
  • */
  • public void doPost(HttpServletRequest request,HttpServletResponse response)
  • throws IOException,ServletException{
  • doGet(request,response);
  • }
  • /**
  • * 数据库连接
  • */
  • public ViewMessageServlet() {
  • try {
  • Class.forName("com.mysql.jdbc.Driver");
  • String url = "jdbc:mysql://localhost:3306/messages?user=root&password=root";
  • con = DriverManager.getConnection(url);
  • } catch (ClassNotFoundException e) {
  • e.printStackTrace();
  • } catch (SQLException e) {
  • e.printStackTrace();
  • }
  • }
  • }

3.用来set和get数据的JavaBean(MessageVO.java)

  • package jsp_javabean_servlet;
  • /**
  • * 这个JavaBean,表示留言的数据
  • */
  • public class MessageVO implements java.io.Serializable {
  • //定义留言的相关参数
  • private String name,email,title,content;
  • private java.sql.Date date;
  • //get和set方法
  • public void setName(String name) {
  • this.name = name;
  • }
  • public String getName() {
  • return this.name;
  • }
  • public void setEmail(String email) {
  • this.email = email;
  • }
  • public String getEmail() {
  • return  this.email;
  • }
  • public void setTitle(String title) {
  • this.title = title;
  • }
  • public String getTitle() {
  • return  this.title;
  • }
  • public void setContent(String content) {
  • this.content = content;
  • }
  • public String getContent() {
  • return this.content;
  • }
  • }

4.web.xml的配置文件

  • <display-name>jsp_javabean_servlet</display-name>
  • <description>jsp_javabean_servlet</description>
  • <servlet>
  • <servlet-name>ViewMessageServlet</servlet-name>
  • <servlet-class>jsp_javabean_servlet.ViewMessageServlet</servlet-class>
  • </servlet>
  • <servlet>
  • <servlet-name>AddMessageServlet</servlet-name>
  • <servlet-class>jsp_javabean_servlet.AddMessageServlet</servlet-class>
  • </servlet>
  • <servlet-mapping>
  • <servlet-name>ViewMessageServlet</servlet-name>
  • <url-pattern>/viewMessages_servlet</url-pattern>
  • </servlet-mapping>
  • <servlet-mapping>
  • <servlet-name>AddMessageServlet</servlet-name>
  • <url-pattern>/addMessages_servlet</url-pattern>
  • </servlet-mapping>

5.留言输入的html(index.html)

  • <html>
  • <head lang="en">
  • <meta charset="gbk">
  • <title></title>
  • </head>
  • <body>
  • <td><table align="center" border="1" cellspacing="0" cellpadding="0">
  • <form action="addMessages_servlet" method="post">
  • <tr>
  • <td>姓名:</td>
  • <td><input type="text" name="name" size="25"></td>
  • </tr>
  • <tr>
  • <td>E-mail:</td>
  • <td><input type="text" name="email" size="25"></td>
  • </tr>
  • <tr>
  • <td>主题:</td>
  • <td><input type="text" name="title" size="25"></td>
  • </tr>
  • <tr>
  • <td >留言:</td>
  • <td><input type="text" name="content" size="25"></td>
  • </tr>
  • <tr><td colspan="3">
  • <table align="center" width="100%" cellspacing="0" cellpadding="0">
  • <tr>
  • <td align="center"><input type="submit" value="提交"></td>
  • <td align="center"><a href="viewMessages_servlet">查看留言</a></td>
  • <td align="center"><input type="reset" value="重新填写"></td>
  • </tr>
  • </table>
  • </td></tr>
  • </form>
  • </table></td>
  • </body>
  • </html>

6.显示留言的JSP(viewMessage.jsp)

  • <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  • <%@ page import="java.sql.*,jsp_javabean_servlet.*,java.util.*" %>
  • <html>
  • <head>
  • <title></title>
  • </head>
  • <body>
  • <p align="center">所有留言</p>
  • <hr>
  • <%
  • int messgae_count = 1;
  • Collection messages = (Collection)request.getAttribute("messages");
  • Iterator it = messages.iterator();
  • while (it.hasNext()) {
  • MessageVO message = (MessageVO)it.next();
  • %>
  • <table width="30%" align="center" border="1" cellpadding="0" cellspacing="0">
  • <tr>
  • <td>主题:</td>
  • <td><%=message.getTitle()%></td>
  • </tr>
  • <tr>
  • <td>留言人:</td>
  • <td><%=message.getName()%></td>
  • </tr>
  • <tr>
  • <td>邮箱:</td>
  • <td><%=message.getEmail()%></td>
  • </tr>
  • <tr>
  • <td>楼层:
  • <%
  • out.println("("+messgae_count+")");
  • %>
  • </td>
  • <td><%=message.getContent()%></td>
  • </tr>
  • </table>
  • <%
  • out.println("<hr>");
  • messgae_count++;
  • }
  • %>
  • <p align="center"><a href="index.html">我要留言</a></p>
  • </body>
  • </html>

运行 

在浏览器里输入index.html的地址,填入留言信息点击提交,会跳转到viewMessage.jsp页面显示信息,其实已经经过两个Servlet的处理。

index.html填写留言页面:

viewMessage.jsp显示留言页面:

参考:JSP应用开发详解(第三版)

转载于:https://www.cnblogs.com/wxmimperio/p/4279136.html

JSP中使用的模式——JSP+Servlet+JavaBean相关推荐

  1. 在JSP中调用JAVA类和使用JavaBean有什么区别?

    在JSP中调用JAVA类和使用JavaBean有什么区别? 可以像使用一般的类一样使用JavaBean,Bean只是一种特殊的类.特殊在可以通过<jsp:useBean   />调用Jav ...

  2. (转)在JSP中调用JAVA类和使用JavaBean有什么区别?

    在JSP中调用JAVA类和使用JavaBean有什么区别? 可以像使用一般的类一样使用JavaBean,Bean只是一种特殊的类.特殊在可以通过<jsp:useBean   />调用Jav ...

  3. jsp是怎么连接java_java-如何从jsp中的超链接调用doPost()servlet

    如何从jsp调用servlet?但是在这种情况下,我更喜欢使用doPost()方法而不是doGet(). 这是我的代码: view.jsp DSIP.View ip username password ...

  4. jsp中url找不到Servlet的可能原因

    尝试用jsp+servlet写项目时发现,url里用相对路径取不到servlet. 后发现在web.xml中对servlet配置如下 <servlet><servlet-name&g ...

  5. jsp中php代码格式化,JSP 语法 - [ JSP参考手册 ] - 在线原生手册 - php中文网

    JSP 语法 本小节将会简单地介绍一下JSP开发中的基础语法. 脚本程序 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. 脚本程序的语法格式: 或者,您也可以 ...

  6. jsp中html注释特点,JSP注释分类及声明应用浅谈

    JSP注释常用的有两种:HTML注释和隐藏注释(JSP注释),那么他们又有什么格式上的要求和特点呢?来开始我们的介绍吧: ◆HTML 注释: 说明:能在客户端显示的一个注释,标记内的所有JSP脚本元素 ...

  7. jsp中的javabean

    一.JavaBean简介 JavaBean是一种特殊的Java类,它遵从一定的设计模式,         开发工具和其他组件可以根据这种模式来调用JavaBean.     JSP中使用的JavaBe ...

  8. servlet+javabean+jdbc+mysql基于MVC模式的课件管理系统,有三个表的增删改查和课件搜索、课件上传、课件下载功能, 具体功能请看界面上的导航条

    源码支持在idea.eclipse.myeclipse运行,数据库采用MySQL数据库,项目采用mvc设计模式开发,页面采用jsp+html+css+js完成. servlet+javabean+jd ...

  9. jsp调用其他jsp中的js代码

    前言 在熟悉代码时,随便选了一个按钮,规则导出的功能. 在使用F12进行debug时,发现被调用的js方法和按钮不在一个jsp页面中,感觉很神奇的调用了! 正文: 第一阶段: 通过F12查看调用的路径 ...

  10. JSP中使用EL表达式

    原文地址: JSP中使用EL表达式 JSP 表达式语言--菜鸟教程 EL表达式简介

最新文章

  1. 一个颠覆性答案,登上《科学》封面:是什么弄破了这些泡泡? | 科学GIF
  2. linux sqlplus 密码有$
  3. Office无法打开超链接地址问题
  4. Android——Ubuntu android NDK 配置
  5. ACdream 1148(莫比乌斯反演+分块)
  6. 智能机器人建房子后房价走势_日本房价走势分析:房产投资是否“未来可期”?...
  7. linux apache + mysql +php no-yum
  8. 真希望能夠統一一下接口
  9. 精美js聊天窗口界面代码
  10. matlab在二值图像上画曲线_数字图像处理:Image Printing Program Based on Halftoning
  11. AMapLocationListener 高德地图定位监听
  12. php socket accept,使用PHP Socket开发Yar TCP服务
  13. 防汛可视化:雨季来临,如何做好防汛措施?
  14. 小米4 第三方re奇兔_雷军:小米10 Pro已经结单 至尊版货也不多了
  15. 酚酸靶向助力组合消毒剂在新鲜农产品中的应用研究
  16. 运动场球具的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. 京东撸货轻松月入十万,做到这几点,你也可以!
  18. java 获取两个List 中 不同对象
  19. 高质量捕捉动态场景的Photoneo 3D相机
  20. 原生js 打印 以及 自定义页眉页脚的一些感悟

热门文章

  1. FISCO BCOS 数据结构与编码协议 交易结构 区块结构
  2. Kubernetes如何删除deployment
  3. value数字 vue_Vue数字输入框组件使用方法详解
  4. 基于遗传算法的排课系统
  5. JDBC14 ORM03 JavaBean封装
  6. Spring MVC @ExceptionHandler、@ControllerAdvice、@RestControllerAdvice 统一异常处理
  7. Sun JVM 内存管理、参数与调优、内存分配与回收策略、GC 日志配置使用详解
  8. LayaAir UI 组件 # Image 位图、Label 标签
  9. LayaAir UI 组件 # Clip 切片、ComboBox 下拉框
  10. 使用IDEA 导入桌面的项目(解压之后的项目)