JSP中使用的模式——JSP+Servlet+JavaBean
上一篇博文写到模式一: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应用开发详解(第三版)
JSP中使用的模式——JSP+Servlet+JavaBean的更多相关文章
- JSP中使用的模式——JSP+JavaBean
模式二:JSP+Servlet+JavaBean 链接地址:http://wxmimperio.coding.io/?p=189 JSP中两种模式的总结 链接地址:http://wxmimperio. ...
- JSP中两种模式的总结
运用JSP/Servlet实现的Web动态交互,主要采用: 模式一:JSP+JavaBean 链接:http://wxmimperio.coding.io/?p=155 模式二;JSP+Servlet ...
- jsp中的out对象 和 servlet中的response.getOutputStream()
web容器生成的servlet代码中有out.write(””),这个和JSP中调用的response.getOutputStream()产生冲突. 即Servlet规范说明,不能既调用 respon ...
- jsp中的@include与jsp:include区别详解
1 前言 搞java开发的人也许都知道在jsp中引入项目中其他文件有如下两种方式 <%@include file="xxx.jsp"%> <jsp:include ...
- jsp中java代码、jsp代码、js代码执行的顺序
原理: jsp中的Java代码 -- 服务器端代码 js代码 -- 客户端代码 java是在服务器端运行的代码,jsp在服务器的servlet里运行,而JavaScript和html都是在浏览器端运行 ...
- 【JSP中引入文件】JSP中获取根路径+引用js文件
在jsp界面中经常需要引入js.css等文件,通常都需要先获取项目根路径,然后再引入文件. 例如: 项目路径如下,需要在index.jsp中引入FusionCharts相关的js.css等: inde ...
- JSP开发模式2_JSP/Servlet/JavaBean(简单注册功能)
import java.util.regex.Matcher;import java.util.regex.Pattern; public class RegisterBean { privat ...
- JSP三大指令 /9大内置对象 /Javabean / EL
一个jsp页面中,可以有0~N个指令的定义! 1. page --> 最复杂:<%@page language="java" info="xxx". ...
- jsp2.0+中的标签文件,JSP Fragment技术
刚进新公司不久,今天在看到项目中用到了.tag文件.刚开始我还以为这个是第三方类似freemarker的模板技术.问了下项目组的其他人员,原来这是jsp2.0以来就有的JSP Fragment技术.以 ...
随机推荐
- 【转】java 解析 plist文件
为了方便的将spritesheet的图导入我自己的动画编辑器!我做了plist文件解析DOM解析比较麻烦 因为element getChildNodes 会获取到text对象.而这个对象可能是一个空白 ...
- TR069协议向导——一个帮助你了解TR069协议的简明教程(一)
您也能够到下面地址下载: http://download.csdn.net/source/993034 1.为什么须要TR069 随着VoIP.IPTV等越来越多IP终端设备的普及(尤其在家庭中 ...
- iOS组件化思路-大神博客研读和思考
一.大神博客研读 随着应用需求逐步迭代,应用的代码体积将会越来越大,为了更好的管理应用工程,我们开始借助CocoaPods版本管理工具对原有应用工程进行拆分.但是仅仅完成代码拆分还不足以解决业务之间的 ...
- gson使用详解
昨天读一篇文章,看到gson这个词,一开始还以为作者写错了,问了度娘之后才发现是我才疏学浅,于是大概了解了一下gson用法,总体来说还是很简单的. Gson.jar下载 JavaBean转json / ...
- [转]cookie、session、sessionid 与jsessionid
cookie.session.sessionid 与jsessionid,要想明白他们之间的关系,下面来看个有趣的场景来帮你理解. 我们都知道银行,银行的收柜台每天要接待客户存款/取款业务,可以有几种 ...
- sharepoint 模糊搜索
看资料知道sharepoint中模糊搜索可以用FullTextSqlQuery,因此我们就可以业务需求进行模糊搜索的自定义开发,可惜前一段时间自己写了一个模糊搜索,发现了一个问题,暂不知道如何过滤管理 ...
- Android图片异步加载之Android-Universal-Image-Loader
将近一个月没有更新博客了,由于这段时间以来准备毕业论文等各种事务缠身,一直没有时间和精力沉下来继续学习和整理一些东西.最近刚刚恢复到正轨,正好这两天看了下Android上关于图片异步加载的开源项目,就 ...
- C按格式输出数字
看到有人问如何输出如下格式的字符: //1 6 10 13 15 //2 7 11 14 //3 8 12 //4 9 //5 于是写了一个,以后方便查看. main() { /* rows i j ...
- windows 8 解决端口(COM和LPT)问题:Prolific USB-to-Serial Comm Port(COM4)驱动异常的问题
本来都正常的,一段时间后就不能用了,网上搜索了一圈,现记录下来,供大家参考 操作系统是win8 64位的 参考网址(http://blog.sina.com.cn/s/blog_92942dba010 ...
- AngularJS Filter用法详解【转+实际测试】 格式化货币
AngularJS内建了一些常用的Filter,我们一一来看一下. currencyFilter(currency): 用途:格式化货币 方法原型: function(amount, currency ...