1、JSP模型1(JSP+JavaBean)

  JSP页面负责处理请求,并将响应发送给客户端。JSP页面文件包括:login.html、loginchk.jsp、welcome.jsp。JavaBean文件包括:UserBean.java、UserCheckBean.java。
1)登录页面login.html:
<html>
<head>
<title>登陆页面</title>
</head>
<body>
<form method="post" action="loginchk.jsp">
用户名:<input type="text" name="name" width="20"><br/>
密&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="password" name="password" width="25"/><br/>
<input type="submit" value="登录"/>
<input type="reset" value="重置"/>
</form>
</body>
</html>

2)验证页面loginchk.jsp:

<%@ page contentType="text/html;charset=GB2312" language="java" %>
<%@ page import="com.yyq.bean.UserCheckBean"%>
<%request.setCharacterEncoding("GB2312");%>
<jsp:useBean id="user" scope="session" class="com.yyq.bean.UserBean"/>
<jsp:setProperty name="user" property="*"/>
<%
UserCheckBean uc = new UserCheckBean(user);
if (uc.validate()){
%>
<jsp:forward page = "welcome.jsp"/>
<%
}
else {
out.println("用户名或密码错误,请<a href=\"login.html\">重新登陆</a>");
}
%>
<html>
<head>
<title>验证</title>
</head>
<body>
</body>
</html>

3)欢迎页面welcome.jsp:

<%@ page contentType="text/html;charset=GB2312" language="java" %>
<jsp:useBean id="user" scope="session" class="com.yyq.bean.UserBean"/>
欢迎您,<jsp:getProperty name="user" property="name"/>

4)UserBean类:

package com.yyq.bean;
/**
* Created by gao on 16-4-18.
*/
public class UserBean {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

5)UserCheckBean类:

package com.yyq.bean;
/**
* Created by gao on 16-4-18.
*/
public class UserCheckBean {
private UserBean user;
public UserCheckBean() {
}
public UserCheckBean(UserBean user) {
this.user = user;
}
public UserBean getUser() {
return user;
}
public void setUser(UserBean user) {
this.user = user;
}
public boolean validate() {
String name = user.getName();
String password = user.getPassword();
//实际应用中,你应该查询数据库,验证用户名和密码。
if ("admin".equals(name) && "1234".equals(password)) {
return true;
} else {
return false;
}
}
}

6)启动Tomcat,输入http://localhost:8080/login.html

输入用户名admin和密码1234,点击登录进入欢迎页面:

如果用户名或者密码输入错误,则显示错误信息:

7)项目结构:

2、JSP模型2(MVC)

  在该模型中,JSP页面用于表示层,Servlet负责处理各类任务。Servlet作为一个控制器,负责处理请求并创建JSP页面所需的任何Bean。该控制器也负责确定将该请求传递到哪个JSP页面。JSP页面检索Servlet创建的对象,并其他动态内容插入在一个模板中。该模型促进了模型视图控制器(MVC)体系结构风格设计模式的使用。MVC其实是模型、视图、控制器的缩写。在使用JSP时,有相应的文件去实现相应的操作。通常JSP只负责视图,也就是只负责显示页面。业务逻辑等由Bean去实现。
  在MVC设计模型中,View用来呈现数据处理结果,可以是JSP、XML、HTML;Model用来存储数据的状态,可利用JavaBean来实现;Controller负责协调应用程序的运行流程,可用Servlet来实现。运用这种模式可以将数据呈现方式与数据处理方式分离,提高了代码的利用率。
1)登录页面login.html:
<html>
<head><title>用户登录</title></head>
<body>
<form method="post" action="controller">
<input type="hidden" name="action" value="login">
用户名:<input type="text" name="name"><br>
密&nbsp;&nbsp;码:<input type="password" name="password"><p>
<input type="submit" value="登录">
<input type="reset" value="重置">
</form>
</body>
</html>

2)信息错误显示页面loginerr.jsp:

<%@ page contentType="text/html;charset=GB2312" %>
用户名或密码错误,请<a href="login.html">重新登录</a>

3)欢迎页面welcome.jsp:

<%@ page contentType="text/html;charset=GB2312" %>
<jsp:useBean id="user" scope="session" class="com.yyq.bean.UserBean"/>
欢迎你,<jsp:getProperty name="user" property="name"/>!

4)用户UserBean类:

package com.yyq.bean;
/**
* Created by gao on 16-4-18.
*/
public class UserBean {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

5)用户检查UserCheckBean类:

package com.yyq.bean;
/**
* Created by gao on 16-4-18.
*/
public class UserCheckBean {
private UserBean user;
public UserCheckBean() {
}
public UserCheckBean(UserBean user) {
this.user = user;
}
public UserBean getUser() {
return user;
}
public void setUser(UserBean user) {
this.user = user;
}
public boolean validate() {
String name = user.getName();
String password = user.getPassword();
//实际应用中,你应该查询数据库,验证用户名和密码。
if ("admin".equals(name) && "1234".equals(password)) {
return true;
} else {
return false;
}
}
}

6)控制类 ControllerServlet类:

package com.yyq.controller;
import com.yyq.bean.UserBean;
import com.yyq.bean.UserCheckBean;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* Created by gao on 16-4-18.
*/
public class ControllerServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("GBK");
resp.setContentType("text/html;charset=GBK");
String action = req.getParameter("action");
if (!isValidated(req) && !("login".equals(action))) {
gotoPage("login.html", req, resp);
return;
}
if ("login".equals(action)) {
UserBean user = new UserBean();
user.setName(req.getParameter("name"));
user.setPassword(req.getParameter("password"));
UserCheckBean uc = new UserCheckBean(user);
if (uc.validate()) {
HttpSession session = req.getSession();
//将user对象保存到Session对象中,在welcome.jsp中
//通过<jsp:userBean>动作元素从Session中得到user对象
session.setAttribute("user", user);
//验证成功,将请求转向welcome.jsp
gotoPage("welcome.jsp", req, resp);
} else {
//验证失败,将请求转向loginerr.jsp
gotoPage("loginerr.jsp", req, resp);
}
}
//对于其它的action请求,可在后面的else if...else语句中继续处理。
/*else if
{
}
else
{
}*/
}
/**
* 判断用户是否已经登录了。
*/
private boolean isValidated(HttpServletRequest request) {
HttpSession session = request.getSession();
if (session.getAttribute("user") != null)
return true;
else
return false;
}
/**
* 将请求导向指定的页面。
*/
private void gotoPage(String targetURL, HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
RequestDispatcher rd;
rd = request.getRequestDispatcher(targetURL);
rd.forward(request, response);
}
}

7)项目结构:

JSP的设计模式的更多相关文章

  1. jsp DAO设计模式

    DAO(Data Access Objects)设计模式是属于J2EE体系架构中的数据层的操作. 一.为什么要用DAO? 比较在JSP页面中使用JDBC来连接数据库,这样导致了JSP页面中包含了大量的 ...

  2. 十五 JSP开发模式&MVC设计模式

    JSP开发模式: JavaBean + JSP  : 缺点:页面代码过多,不利于维护,JSP页面代码变得臃肿 Servlet + JavaBean + JSP :MVC设计模式 M:model   模 ...

  3. JSP面试题都在这里

    下面是我整理下来的JSP知识点: 图上的知识点都可以在我其他的文章内找到相应内容. JSP常见面试题 jsp静态包含和动态包含的区别 jsp静态包含和动态包含的区别 在讲解request对象的时候,我 ...

  4. JSP知识点总结

    一.jsp静态包含和动态包含的区别 在学习request对象的时候,我们曾经使用过request.getRequestDispatcher(String url).include(request,re ...

  5. jsp和servlet的关系

    JSP是Servlet技术的扩展,本质上就是Servlet的简易方式.JSP编译后是“类servlet”. Servlet和JSP最主要的不同点在于:Servlet的应用逻辑是在Java文件中,并且完 ...

  6. Java面试前需要了解的东西

    一.前言 只有光头才能变强 回顾前面: 广州三本找Java实习经历 上一篇写了自己面试的经历和一些在面试的时候遇到的题目(笔试题和面试题). 我在面试前针对Java基础也花了不少的时间,期间也将自己写 ...

  7. MVC概述

    学习MVC模式   一.MVC简介 MVC是Model-View-Controller的简称,即模型-视图-控制器.MVC是一种设计模式,它把应用程序分成三个核心模块:模型.视图.控制器,它们各自处理 ...

  8. day14-jdbc案例(简单的curd&分页)

    回顾: mvc jsp的设计模式1: jsp+javabean jsp的设计模式2: jsp+javabean+servlet jsp:展示数据 javabean:封装数据 封装对数据的访问 serv ...

  9. day13-(事务&mvc&反射补充)

    回顾: jsp: java服务器页面 jsp的脚本 jsp的注释 html注释 java注释 jsp注释 <%-- --%> jsp的指令 page:声明页面一些属性 重要的属性: imp ...

随机推荐

  1. jsp或Action获取请求参数中文乱码

    普通情况下,中文字符会被自动转换成iso-8859-1的编码格式通过网络传输,而这种格式是没办法直接表示出我们认识的中文字符的,所以还要手动将他转换回之前的字符集. 一般在servlet或者actio ...

  2. 使用 NIO.2 遍历目录下所有的Java文件

    package wellGrounded; import java.io.IOException; import java.nio.file.FileVisitResult; import java. ...

  3. 【BZOJ】【1005】【HNOI2008】明明的烦恼

    Prufer序列/排列组合+高精度 窝不会告诉你我是先做了BZOJ1211然后才来做这题的>_>(为什么?因为我以前不会高精度呀……) 在A了BZOJ 1211和1089之后,蒟蒻终于有信 ...

  4. yield curve

    1. A yield curve can be built using deposit rates, swap rates, and future/forward rates 2. A par-cou ...

  5. PHP操作数据库类

    <?php /** * 功能: 数据库操作类 . * 作者: 赵铭哲 * 日期: 2016-05-23 * 时间: 9:43 */ namespace ZH\DataBase; use \Exc ...

  6. window.showModalDialog的传值和返回值

    window.showModalDialog(URL,dialogArgments,features) 打开一个新窗口 URL为要将打开的网页地址. dialogArgments为设定好传递给新视窗网 ...

  7. [百度空间] [转]内存屏障 - MemoryBarrier

    处理器的乱序和并发执行 目前的高级处理器,为了提高内部逻辑元件的利用率以提高运行速度,通常会采用多指令发射.乱序执行等各种措施.现在普遍使用的一些超标量处理器通常能够在一个指令周期内并发执行多条指令. ...

  8. Reactor构架模式

    http://www.cnblogs.com/hzbook/archive/2012/07/19/2599698.html Reactor框架是ACE各个框架中最基础的一个框架,其他框架都或多或少地用 ...

  9. 《深入浅出JavaScript》

    第一章JS入门 第二章数据和判定常用的转义序列\b 回退 \f换页 \n换行 \r回车 \t制表符 \'单引 \"双引 \\反斜乘除求余的优先级相同,从左向右执行string对象indexO ...

  10. ASP.NET制作一个简单的等待窗口

    前一阵做一个项目,在处理报表的时候时间偏长,客户提出要做出一个等待窗口提示用户等待(页面太久没反映,用户还以为死了呢).在分析这一需求之后,觉得如果要实现像winform应用中的processbar太 ...