eclipse用MVC模式编写简单的JSP登录界面(一)

2023-05-16

刚开始接触JSP,打算写写博客记录记录,大佬可以不用看了…


1、JSP

在编写登录界面之前需要安装服务器(这里使用的是Tomcat)并且安装IDE以及进行相关的部署。这里就不进行赘述了。


(1)JSP的基本语法

①JSP注释语法:

<%-- 注释内容 -->

②Java注释语法:

//注释内容
/* 多行注释*/

(2)JSP声明

在JSP程序段中,变量必须要先定义,后使用。

<%!
   String str = "XXX";
%>

(3)JSP动作

JSP动作是指使用XML语法格式的标记来控制服务器的行为。

<jsp:动作名 属性1 = "属性值1".../>
或者
<jsp:动作名 属性1 = "属性值1"...>相关内容</jsp:动作名>

JSP动作包括:

(1) jsp:include ----------   当页面被请求的时候引入一个文件

(2)jsp:forward ----------   将请求转到另外一个页面

(3)jsp:useBean ---------   获得JavaBean的一个实例

(4)jsp:setProperty -----   设置JavaBean的属性

(5)jsp:getProperty -----   获得JavaBean

(6)jsp:plugin -----------   根据浏览器类型,为Java插件生成OBJECT或EMBED两种标记。

(4)JSP内置对象

jsp的九大内置对象,pageContext,request,response,session,application,config,out,page,exception;前五个熟练掌握
jsp四种数据保存范围
page:只在一个页面中保存数据
request:只在一个请求中保存数据
session:在一次会话范围内保存数据,仅供单个用户使用 
application:在整个服务器上保存数据,所有用户共享

response对象:
response内置对象用于响应客户请求,向客户端输出信息
功能1自动刷新应用
功能2页面重定向应用,客户端跳转
功能3操作cookie应用

功能4cookie信息是存在客户端的,session信息是存在服务器的。


2、代码展示

1、创建相关的数据库以及表数据,我使用的是Orcale,图形化界面用的是PLSQL(其实表登录只需要MEMBER表即可,其余表是其他用途)。


2、第二开始开发,采用mvc的设计模式,分开进行设计;

首先package com.shopping.model;对User类进行封装数据。为了后面方便使用;注意是在不同的包中的。

package com.shopping.model;

public class User {
	
	private String memberNo;
	private String memberPassword;
	private String nameId;
	private String memberName;
	private String sex;
	private String birthday;
	private String pwd;
	private String phone;
	private String type;
	private String address;
	private String regDate;
	private String email;
	private String id;
	private String grade;
	
	public User() {
		super();
	}
	public User(String username, String password) {
		super();
		nameId = username;
		memberPassword = password;
	}
	public String getMemberPassword() {
		return memberPassword;
	}
	public void setMemberPassword(String memberPassword) {
		this.memberPassword = memberPassword;
	}
	public String getNameId() {
		return nameId;
	}
	public void setNameId(String nameId) {
		this.nameId = nameId;
	}
}

其次对连接数据库进行封装,方便后面调用连接数据库,这里封装好数据库并进行测试是否连接成功,并且需要导入odbc.jar文件;注意是在不同的包中的。

package com.shopping.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DbUtil {
	
	private String url="jdbc:oracle:thin:@IP地址:IP端口号:数据库名";
	private String user = "账号";
	private String password = "密码";
	private String driver = "oracle.jdbc.OracleDriver";
	
	public Connection getCon() throws Exception{
		Class.forName(driver);
		Connection con = DriverManager.getConnection(url, user, password);
		return con;
	}
	
	public static void getClose(Connection con)throws SQLException{
		if(con!=null) {
			con.close();
		}
	}
	
	public static void main(String[] args) {
		DbUtil db = new DbUtil();
		try {
			db.getCon();
			System.out.println("测试连接数据库,连接成功");
		}catch (Exception e) {
			e.printStackTrace();
			System.out.println("测试连接数据库,连接失败");
		}
	}
}

对数据封装好,对连接数据库封装好,接下来封装对数据库的操作;注意是在不同的包中的。

package com.shopping.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.shopping.model.User;

public class UserDao {
	
	public User login(Connection con,User user)throws SQLException{
		User resultUser = null;
		String sql = "select * from Member where nameId=? and memberPassword=?";
		PreparedStatement ps = con.prepareStatement(sql);
		ps.setString(1, user.getNameId());
		ps.setString(2, user.getMemberPassword());
		ResultSet rs = ps.executeQuery();
		if(rs.next()) {
			resultUser = new User();
			resultUser.setNameId(rs.getString("nameId"));
			resultUser.setMemberPassword(rs.getString("memberPassword"));
		}
		return resultUser;
	}
}

封装好上面的接下来就进行主要代码的开发,使用Servlet对数据进行处理和操作;注意在不同的包中。

package com.shopping.web;

import java.io.IOException;
import java.sql.Connection;

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 com.shopping.dao.UserDao;
import com.shopping.model.User;
import com.shopping.util.DbUtil;

public class LoginServlet extends HttpServlet{

    DbUtil db=new DbUtil();
    UserDao userDao=new UserDao();
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        Connection con=null;
        try {
            User user=new User(username,password);
            con=db.getCon();
            User currentUser=userDao.login(con, user);
            if(currentUser==null){
                //System.out.println("no");
                request.setAttribute("error", "用户名或者密码错误");
                request.setAttribute("username", username);
                request.setAttribute("password", password);
                request.getRequestDispatcher("login.jsp").forward(request, response);
            }else{
                //System.out.println("yes");
                HttpSession session=request.getSession();
                session.setAttribute("currentUser",currentUser);
                response.sendRedirect("main.jsp");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
    
}
设置好Servlet的类文件后需要配置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" id="WebApp_ID" version="3.1">
  <display-name>The Shopping</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  		<servlet-name>LoginServlet</servlet-name>
  		<servlet-class>com.shopping.web.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  		<servlet-name>LoginServlet</servlet-name>
  		<url-pattern>/login</url-pattern>
  </servlet-mapping>
</web-app>

最后进行主页面的开发,创建jsp页面。需要注意的是action的值是xml的<url-pattern>/login</url-pattern>中/login的值,这点需要注意。

<%@ page language="java" contentType="text/html; charset=gb2312"
    pageEncoding="gb2312"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>网络在线商城登陆界面</title>
</head>
<body>
<form action="login" method="post">
    <table>
        <tr>
            <th colspan="2">网络在线商城登陆界面</th>
        </tr>
        <tr>
            <td>账号</td>
            <td><input type="text" id="username" name="username" value="${username}"></td>
        </tr>
        <tr>
            <td>密码:</td>
            <td><input type="text" id="password" name="password" value="${password}"></td>
        </tr>
        <tr>
            <td><input type="submit" value="提交"></td>
            <td><font color="red">${error}</font></td>
        </tr>
    </table>
</form>
</body>
</html>
最后一个为了优化,更好的可视化,一个登录成功的验证页面,如下:
<%@ page language="java" contentType="text/html; charset=gb2312"
    pageEncoding="gb2312"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Insert title here</title>
</head>
<body>
<p>登录成功</p>
当前用户:${currentUser.nameId}<br/>
当前密码:${currentUser.memberPassword}<br/>
</body>
</html>

工程截图:


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

eclipse用MVC模式编写简单的JSP登录界面(一) 的相关文章

随机推荐

  • fgets和gets的区别

    在编程中发现gets 和 fgets 一些区别总结一下 xff1b 1 fgets比 gets 安全 xff0c 使用 gets 编译时会警告 为了安全 xff0c gets 少用 xff0c 因为其没有指定输入字符的大小 xff0c 限制
  • java.lang.IllegalStateException android.media.MediaPlayer._prepare(Native Method)

    目录 错误log xff1a 原因 xff1a 错误log xff1a 1566550586 419 28478 28478 com stone stonemusic W System err java lang IllegalStateE
  • Android自定义view刷新方法

    目录 描述 描述 Android view的刷新有三个方式 xff1a span class token comment 只会触发执行onDraw方法 xff0c 只会改变绘制里面的内容 条目的绘制 span span class toke
  • Ubuntu升级后VMware缺少vmmon、vnnet

    Ubuntu升级系统后启动时 xff0c 缺少vmmon vnnet 解决方式运行以下脚本 xff0c 可以修改 span class token shebang important bin bash span VMWARE VERSION
  • XMMS乱码的解决办法

    一 X org 下 XMMS aMule 等 Gtk1 程序的中文解决 这样做以后如果还不行 那么 二 1 安装 xmms mpg123 ja 代码 sudo apt get install xmms mpg123 ja xmms mpg1
  • ConnectionRefusedError: [Errno 111] 拒绝连接

    pip3 install upgrade pip 结果 Exception Traceback most recent call last File 34 usr share python wheels urllib3 1 19 1 py2
  • 设计模式-多例模式

    参考 xff1a 设计模式之禅 目录 多例模式类图实现1 皇帝2 大臣 运行结果补充 多例模式 这种情况有没有 有 大点声 有没有 有 是 确实有 就出现在明朝 那三国期间的算不算 不算 各自称帝 各有各的地盘 国号不同 大家还记得那首诗
  • python3-socket-Demo

    python3 socket Demo 1 背景2 Demo实现2 1 查看端口2 2 服务端2 3 客户端 1 背景 想了解一下python socket编程 xff0c 学习一下 34 白月黑羽 34 的Demo xff0c 做一下记录
  • 【数据库-MySQL-从入门到精通】【学习笔记】

    数据库 01 1 MySQL安装1 1 官网下载1 2 安装1 2 1 安装失败解决方案 xff1a 2 MySQL初学2 1 数据库基础 命令行形式2 2 MySQL操作数据库和数据表2 3 MySQL数据表基本数据类型 鸣谢 xff1a
  • Android7~8.1源码编译失败(Communication error with Jack server (35), try ‘jack-diagnose‘ or see Jack serve)

    目录 1 背景1 1 报错信息 2 原因2 1 分析 3 解决方案3 1 杀掉服务3 2 修改JDK配置文件 xff0c 移除可能导致端口占用的配置3 3 重启服务 1 背景 Android7 0 8 1编译过程中可能会出现异常报错 xff
  • android mediaplay 出现IllegalStateException的几种可能性及解决办法

    1 错误log java lang IllegalStateException at android media MediaPlayer setDataSource Native Method at android media MediaP
  • 创建.xml的矢量图片;使用Android studio 和 SVG图 生成.xml矢量图标

    Android开发中 xff0c 为什么要使用矢量图标 xff1f 使用矢量图标有什么好处 xff1f 如果使用 png xff1b jpg 这样的图片 xff0c 一般在资源文件中 xff0c 都需要准备不同分辨率的图 这样既让apk臃肿
  • 设计模式-单例模式

    本文章参考慕课DocMike老师的讲解 xff0c 作为个人笔记 xff0c 也希望能帮到需要的人 1 单例模式 单例模式 xff08 Singleton Pattern xff09 是 Java 中最简单的设计模式之一 这种类型的设计模式
  • Android studio 3 gradle配置问题

    目录 问题描述原因解决方法1 xff09 使用低版本的三方依赖库2 xff09 手动声明 xff0c 排除高版本的依赖参考文章 问题描述 Duplicate class android support design widget Coord
  • 51单片机定时器中断按键消抖(无延时)

    单片机入门学习记录 xff08 二 xff09 在机械按键的触点闭合和断开时 xff0c 都会产生抖动 xff0c 为了保证系统能正确识别按键的开关 xff0c 就必须对按键的抖动进行处理 按键的抖动对于人类来说是感觉不到的 xff0c 但
  • Ubuntu常用命令

    目录 更新仓库命令查看软件依赖包安装软件定时查看某个命令查找文件查找文件中的内容 grep 将命令行中输出内容保存文档scp通过ssh连接复制文件修改环境变量删除指定路径下包含某个关键字的文件与文件夹压缩解压查看运行信息远程桌面连接Wind
  • C#: WMI 获取远程 Windows 主机信息

    起步文档 xff1a WMI 基本介绍 WMI调用基本步骤 一个简单的远程访问例子 xff1a xff08 参考自MSDN How To Connect to a Remote Computer xff09 span class hljs
  • 端到端是什么意思?

    不久前 xff0c 燕姐 表扬了我 原话是 xff1a 像你这样端到端负责的人现在越来越少了 哈哈 xff0c 听到这话 xff0c 还是有点高兴的 xff0c 今天我来闲扯一下端到端 客户需要一个求立方差的系统 假设是fun系统 xff1
  • 电磁波和声波对比实验

    如图 xff0c 电话拨通 xff0c 能听到两个手机的声音 不断对右边的罩子进行抽气 xff0c 右边手机的声音越来越小 抽成真空的时候 xff0c 右边手机的声音消失 xff0c 但左边手机仍然如初 此时 xff0c 右边手机发送的信号
  • eclipse用MVC模式编写简单的JSP登录界面(一)

    刚开始接触JSP xff0c 打算写写博客记录记录 xff0c 大佬可以不用看了 1 JSP 在编写登录界面之前需要安装服务器 xff08 这里使用的是Tomcat xff09 并且安装IDE以及进行相关的部署 这里就不进行赘述了 xff0