JavaEE——JSP开发模式(model1)
model1开发模式
- 工作流程:
①浏览器请求,JSP页面接收
②JSP根据请求和JavaBean进行交互
③JavaBean进行业务处理,JDBC操纵数据库
④JSP将请求结果返回浏览器页面
- 利用model1,设计一个简单的登陆页面
新建Java web项目,项目结构如下:
建立基于Mysql的JDBC类
package com.ddpapa.test.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class MysqlDBConn { private Statement stmt; private Connection conn; ResultSet rs; public MysqlDBConn(){ stmt = null; try { /*加载数据库驱动获取数据库连接*/ Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/datatest","root","123456"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } rs = null; } public Connection getConn() { return this.conn; } public ResultSet executeQuery(String sql){ /*取得结果集*/ try { stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); rs = stmt.executeQuery(sql); } catch (Exception e) { // TODO: handle exception System.err.println("Data.executeQuery: " + e.getMessage()); } return rs; } public void closeStmt() { /*关闭Stmt*/ try { stmt.close(); }catch(SQLException e){ System.err.println("Data.executeQuery: " + e.getMessage()); } } public void closeConn() { /*关闭数据库连接*/ try { conn.close(); }catch(SQLException e){ System.err.println("Data.executeQuery: " + e.getMessage()); } } }
MysqlDBConn.java
建立JavaBean
package com.ddpapa.test.model.vo; public class UserTable { private Integer id; private String username; private String password; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
UserTable.java
新建login.jsp
<%@ page language="java" pageEncoding="gb2312" %> <html> <head> <title>登陆界面</title> </head> <body> <form action="validate.jsp" method="get"> <table> <tr> <th colspan="2" align="center">登陆页面</th> </tr> <tr> <td>用户名:</td> <td><input type="text" name="username" size="20"></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="password" size="20"></td> </tr> </table> <input type="submit" value="登陆"> <input type="reset" value="重置"> </form> </body> </html>
login.jsp
新建validate.jsp
<%@page language="java" pageEncoding="gb2312" import="java.sql.*,com.ddpapa.test.model.vo.UserTable"%> <jsp:useBean id="MysqlDB" scope="page" class="com.ddpapa.test.jdbc.MysqlDBConn"></jsp:useBean> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=gb2312"> </head> <body> <% request.setCharacterEncoding("gb2312"); String usr=request.getParameter("username"); String pwd=request.getParameter("password"); boolean validate = false; UserTable user = null; user = (UserTable)session.getAttribute("user"); if(user==null){ String sql = "select * from userTable"; ResultSet rs = MysqlDB.executeQuery(sql); //取得结果集 while(rs.next()){ if((rs.getString("username").trim().compareTo(usr)==0) && (rs.getString("password").compareTo(pwd)==0)){ user = new UserTable(); user.setId(rs.getInt(1)); user.setUsername(rs.getString(2)); user.setPassword(rs.getString(3)); validate = true; } } rs.close(); MysqlDB.closeStmt(); MysqlDB.closeConn(); }else{ validate = true; } if(validate){ %> <jsp:forward page="success.jsp"/> <% }else{ %> <jsp:forward page="error.jsp"/> <% } %> </body> </html>
validate.jsp
新建error.jsp
<%@ page language="java" pageEncoding="gb2312" %> <html> <head> <title>登陆失败</title> </head> <body> 抱歉!登陆失败 </body> </html>
新建success.jsp
<%@ page language="java" pageEncoding="gb2312" import="com.ddpapa.test.model.vo.UserTable"%> <html> <head> <title>登陆成功</title> </head> <body> <% String usr = request.getParameter("username"); %> <%=usr%>,您好!欢迎登陆。 </body> </html>
修改web.xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>jsp_model1</display-name> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> </web-app>
- 错误集锦
500错误——lib目录下缺少数据库连接jar包
500错误——org.apache.jasper.JasperException:An exception occurred processing JSP page [/xxx.jsp] at line [x]
success代码如下时出现错误:
错误原因session对象getAttribute返回值为null(根本原因user不存在),导致空指针错误,改为request对象解决问题
JavaEE——JSP开发模式(model1)的更多相关文章
- jsp基础、el技术、jstl标签、javaEE的开发模式
一.jsp技术基础 1.jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> ...
- 【JAVAWEB学习笔记】18_el&jstl&javaee的开发模式
一.EL技术 1.EL 表达式概述 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL 出现的目的是要替代jsp页面中脚本的编写. 2.EL从域中取出数据 ...
- 动态页面技术----EL技术、JSTL技术,javaEE的开发模式
1 EL技术 1.1 EL 表达式 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写, EL出现的目的是要替代jsp页面中脚本的编写,就是简化java代码. ...
- javaEE的开发模式
1.什么是模式 模式在开发过程中总结出的“套路”,总结出的一套约定俗成的设计模式 2.javaEE经历的模式 model1模式: 技术组成:jsp+javaBean model1的弊端:随着业务复杂性 ...
- JSP内置标签 JSP中JavaBean标签 JSP开发模式 EL和JSTL快速入门
2 JSP内置标签(美化+业务逻辑) 1)为了取代<%%>脚本形式,使用JSP标签/JSP动作,目的:与JSP页面的美化,即JSP面页都是由标签组成,不再有其它的内容 2)JSP内 ...
- JSP运行过程 JSP脚本 静态动态包含 jsp指令 jsp内置对象jsp四大作用域 jsp动作元素 EL表达式 JSTL 设计模式 JSP开发模式 EL内置对象
Day38 JSP JSP的运行过程具体如下: (1)客户端发出请求,请求访问JSP文件. (2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果 ...
- 十五 JSP开发模式&MVC设计模式
JSP开发模式: JavaBean + JSP : 缺点:页面代码过多,不利于维护,JSP页面代码变得臃肿 Servlet + JavaBean + JSP :MVC设计模式 M:model 模 ...
- Tip: JSP开发模式
SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. JSP+JavaBean模式适合开发业务 ...
- 浅析Java开发模式—Model1、Model2和三层
"解耦"的思想一直是我们倡导的,但在实际项目中怎样去做?这是需要我们去好好思考的.下面以Model1.Model2.三层为切入点,对比下去了解解耦的思想. Model1 使用JSP ...
随机推荐
- c语言实现数组的排序
本文章只对选择排序和冒泡排序进行介绍 选择排序实际上是从0到length-1,选择某个元素与其他的元素进行大小比较,如果大于就交换,其他情况不做操作,如图: 冒泡排序实际上是先选择某个元素,然后从 ...
- Go语言标准库之fmt
fmt标准库是我们在学习Go语言过程中接触最早最频繁的一个了,本文介绍了fmtb包的一些常用函数. fmt fmt包实现了类似C语言printf和scanf的格式化I/O.主要分为向外输出内容和获取输 ...
- sqlserver 用户定义表类型
有时需要将内存中的表与数据库中的表比较,比如Datatable中有100行数据,需要判断在数据库中是否存在,这个时候我们就可以使用sqlserver中的[用户 定义表类型] 这里最最最重要的思路是把[ ...
- 行数据库VS列数据库
一.介绍 目前大数据存储有两种方案可供选择:行存储和列存储.业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全.可靠.完整性.从目前发展情况看,关系数据库已经不适应这种巨 ...
- Net基础篇_学习笔记_第十一天_面向对象(析构函数)
析构函数与构造函数 析构函数: ~Student() { Console.WriteLine("我是析构函数"); } 析构函数,当程序结束的时候,析构函数才执行. 帮助我们释放资 ...
- SpringBoot修改默认端口号 及 上下文
- IntelliJ IDEA 安装,配置,汉化
压缩包:加QQ:1594216971 一.先进行安装包下载安装(五步) 1.运行”IntelliJ IDEA 2018.1.exe“ 开始安装,点击next 2.选择idea安装目录(不建议安装在c盘 ...
- LeetCode 把二叉搜索树转换为累加树
第538题 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和. 例如: 输入: 二叉 ...
- Qt疑难问题-模态窗口父类被析构
最近遇到一个朋友,问了我一个刁钻的问题,当你模态弹出一个窗体时,后台把这个窗体的父类给析构了,这个时候会出现什么样的情况? 听到问题后我真是一脸懵逼呀!从来没有这么写过代码. 随后写了一个简单的测试d ...
- Day 18 软件管理3之搭建网络仓库
搭建一个网络仓库 服务端: 10.0.0.200 1.准备软件包( 1.光盘 2.缓存 3.联网下载 4.同步 ) 2.通过p共享软件包存放的目录 3.将光盘中的软件包都拷贝至p的共享目录下 4. ...