一、JSP和Servlet的简单介绍:

  Java开发Web应用程序时用到的技术主要有两种,即Servlet和JSP,Servlet是在服务器端执行的Java程序,一个被称为Servlet容器的程序(其实就是服务器) 负责执行Java程序,而JSP(Java Server Page)则是一个页面, 由JSP容器负责执行。

Servlet以Java程序为主, 输出HTML代码时需要使用out.println函数,也就是说Java中内嵌HTML; 而JSP则以HTML页面为主,需要写Java代码时则在页面中直接插入Java代码, 即HTML中内嵌Java。

MVC模型

MVC模型就是将数据、逻辑处理、用户界面分离的一种方法。

1)、M(Model, 模型):用于数据处理、逻辑处理

2)、V(View,视图):用于显示用户界面

3)、C(Controller,控制器):根据客户端的请求控制逻辑走向和画面

而在Java中,MVC这三个部分则分别对应于 JavaBeans、JSP和Servlet

1)、M = JavaBeans:用于传递数据,拥有与数据相关的逻辑处理

2)、V = JSP:从Model接收数据并生成HTML

3)、C = Servlet:接收HTTP请求并控制Model和View

web的运行机制:

数据首先在jsp上被展示出来,用户看到页面后触发一些事件,并可能传递数据,这些数据和请求被控制器接收到,然后开始处理(往往会需要有一些数据库的操作(查询,修改数据库数据)),当这些处理结束后,我们就需要将数据反馈到JSP上显示给用户看,完成一次完整的交互过程。

下面描述这个例子, 用的Tomcat7.0, mysql用的是5.17版本,下面是工程结构:

Util---DBUtil.java用来连接JDBC数据库

user---User用来定义用户数据类型

servlet---用来处理用户业务求情和逻辑控制

dao---UserDao用来处理与数据库相关的操作,例如添加用户、查找用户等

大家看一下运行效果:

下面描述详细code:

User.Java

 package user;

 public class User {
private Integer id;
private String name;
private String password;
private int role;
/**
* @return the id
*/
public Integer getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(Integer id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return the role
*/
public int getRole() {
return role;
}
/**
* @param role the role to set
*/
public void setRole(int role) {
this.role = role;
} }

DBUtil.java  连接数据库

 package util;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Driver;
import java.sql.SQLException;
import java.sql.Statement; public class DBUtil { public static final String driver="com.mysql.jdbc.Driver";
public static final String url="jdbc:mysql://localhost:3306/user?characterEncoding=utf8&useSSL=true";
public static final String username="root";
public static final String password="root";
public static Connection con=null; static{
try {
Class.forName(driver);//得到DriverManager,在下面建立连接时使用
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} public static Connection getCon(){ if(con == null){
try {
con = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
}
return con;
} //关闭的方法
public static void close(Statement statement,Connection conn){
if(statement !=null){
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} if(conn !=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} public static void main(String args[]){
new DBUtil().getCon();
}
}

dao---UserDao.java   处理数据库相关操作

 package dao;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import user.User;
import util.DBUtil; public class UserDao { //数据库连接对象
public User login(String username,String password) {
User u=null;
Connection connection =null;
PreparedStatement pstmt=null;
ResultSet resultSet=null; //赋值
try {
connection=DBUtil.getCon();
//静态sql语句
String sql = "select * from user where name=? and password=?";
pstmt = (PreparedStatement) connection.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
resultSet = pstmt.executeQuery();
if(resultSet.next()){
u=new User();
u.setName(resultSet.getString("name"));
u.setPassword(resultSet.getString("password"));
System.out.println("登录成功!");
}else{
System.out.println("用户名或者密码错误!");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
// DBUtil.close(pstmt, connection);
}
return u; } public boolean addUser(User user) {
Connection connection = null;
PreparedStatement psmt = null;
try {
connection = DBUtil.getCon(); String sql ="insert into user(id,name,password,role)values(?,?,?,?);"; psmt = (PreparedStatement) connection.prepareStatement(sql); //运用实体对象进行参数赋值
psmt.setInt(1, user.getId());
psmt.setString(2, user.getName());
psmt.setString(3,user.getPassword());
psmt.setInt(4, user.getRole());
psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return false;
}finally {
//DBUtil.close(psmt, connection);
}
return true;
}
}

Servlet---处理相关用户业务逻辑  LoginServlet和RegisterServlet.java

 package servlet;

 import java.io.IOException;

 import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import dao.UserDao;
import user.User; /**
* Servlet implementation class LoginServlet
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
HttpSession sessionzxl = request.getSession();
String username = request.getParameter("username");
String password = request.getParameter("password");
UserDao userDAO=new UserDao();
User user=userDAO.login(username, password);
if(user!=null){
sessionzxl.setAttribute("user", user);
request.getRequestDispatcher("success.jsp").forward(request, response);;
}else{
request.getRequestDispatcher("error.jsp").forward(request, response);
}
} }
 package servlet;

 import java.io.IOException;

 import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import dao.UserDao;
import user.User; /**
* Servlet implementation class RegisterServlet
*/
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public RegisterServlet() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
int id=Integer.valueOf(request.getParameter("id"));
String name=request.getParameter("name");
String password=request.getParameter("password");
int role=Integer.valueOf(request.getParameter("role"));
User user=new User();
user.setId(id);
user.setName(name);
user.setPassword(password);
user.setRole(role);
UserDao userDAO=new UserDao();
boolean result = userDAO.addUser(user);
if(result){
System.out.println("注册成功!");
HttpSession session = request.getSession();
session.setAttribute("user", user);
String loginSuccess = "LoginSuccess.jsp";
response.sendRedirect(loginSuccess);
}else{
System.out.println("注册失败!");
String loginFail = "LoginFail.jsp";
response.sendRedirect(loginFail);
}
//request.getRequestDispatcher("Login.jsp").forward(request, response);
}
}

下面是jsp脚本控制:

首先看一下登录脚本Login.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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=ISO-8859-1">
<title>登录界面</title>
<style type="text/css">
body{
background-image:url(images/login.jpg);
background-position:center;
background-repeat:no-repeat;
}
</style> </head>
<body>
<div style="text-align:center;margin-top:120px">
<h2>诗远的主页</h2>
<form action="LoginServlet" method="post">
<table style="margin-left:40%">
<marquee width="200"scrolldelay="250">用户登录</marquee>
<tr>
<td>登录名:</td>
<td><input name="username" type="text" size="21"></td>
</tr>
<tr>
<td>密码:</td>
<td><input name="password" type="password" size="21"></td>
</tr>
</table>
<input type="submit" value="登录">
<input type="reset" value="重置">
</form>
<br>
<a href="Register.jsp">注册</a>
</div>
</body>
</html>

注册页面Register.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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=ISO-8859-1">
<title>注册界面</title>
<style type="text/css">
body{
background-image:url(images/register.jpg);
background-position:center;
background-repeat:no-repeat;
}
</style> </head>
<body>
<div style="text-align:center;margin-top:120px">
<h1 >请注册</h1>
<form action="RegisterServlet" method="post">
<table style="margin-left:40%">
<caption>用户注册</caption>
<tr>
<td>ID:</td>
<td><input name="id" type="text" size="20"></td>
</tr>
<tr>
<td>登录名:</td>
<td><input name="name" type="text" size="20"></td>
</tr>
<tr>
<td>密码:</td>
<td><input name="password" type="password" size="20"></td>
</tr>
<tr>
<td>角色:</td>
<td><input name="role" type="text" size="20"></td>
</tr>
</table>
<input type="submit" value="注册">
<input type="reset" value="重置">
</form>
<br>
<a href="Login.jsp">登录</a>
</div>
</body>
</html>

登录成功界面,这个比较简单,是后面自己修改的success.jsp:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import="user.User"%> <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>My JSP 'success.jsp' starting page</title>
</head>
<body>
<%User user = (User)session.getAttribute("user");%>
"Congratulations! Login success!";<br>
username:<%= user.getName()%> <br>
password:<%= user.getPassword() %> <br>
basePath: <%=basePath%><br>
path:<%=path%><br>
</body>
</html>

登录失败后的界面error.jsp:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>My JSP 'fail.jsp' starting page</title>
</head>
<body>
Login Failed! <br>
basePath: <%=basePath%><br>
path:<%=path%><br>
<a href="Login.jsp">请重新登录</a>
</body>
</html>

注册成功后的界面LoginSuccess.jsp:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import="user.User"%> <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>My JSP 'Loginsuccess.jsp' starting page</title>
</head>
<body>
<%User user = (User)session.getAttribute("user");%>
"Congratulations! Register success!";<br>
username:<%= user.getName()%> <br>
password:<%= user.getPassword() %> <br>
basePath: <%=basePath%><br>
path:<%=path%><br>
<a href="Login.jsp">点击登录</a>
</body>
</html>

注册失败后的界面LoginFail.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>My JSP 'LoginFail.jsp' starting page</title>
</head>
<body>
Register Failed! <br>
basePath: <%=basePath%><br>
path:<%=path%><br>
<a href="Register.jsp">重新注册</a>
</body>
</html>

所有的jsp脚本到此结束。

下面看web.xml配置:如果是比较旧的tomcat版本,不支持WebServlet注解方式,就需要在web.xml里面配置servlet-mapping映射。

我用的是Tomcat7.0,Servlet是3.0, 支持servlet注解。所以不需要在web.xml里面配置servlet.你可以在Servlet的java文件里面看到这样自动生成的注解:

@WebServlet("/LoginServlet")

@WebServlet("/RegisterServlet")

但是在web.xml里面需要在webclme-file-list配置登录界面,如下:

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>ServletWebDemo</display-name>
<welcome-file-list>
<welcome-file>Login.jsp</welcome-file>
</welcome-file-list>
</web-app>

最后看一下数据库操作,我装的是Mysql5.7版本,装过最新的Mysql8.15版本,可是装不成功,所以直接装的5.7版本。然后还装了一个SQLyog软件来界面控制SQL。

从DBUtil里面可以看到,连接的数据库是user, 后面在UserDao操作的数据表是user。mysql登录用户名和密码是root和root。下面接了个Mysql的数据结构:

在上面数据表定义中,把id声明为主键,下面是我注册过几次后数据表的结构,

注意一下,在上面工程中要导入两个包,一个是servlet-api.jar, 一个是mysql-connector-java-5.1.47.jar

背景图片放在:images下面。到此整个工程code介绍完了。按照上面code应该是能够运行起来。

主要参考博客有:

https://blog.csdn.net/yjx568135132/article/details/73896240

https://blog.csdn.net/blackplus28/article/details/80603863

Eclipse+Servlet+jsp+MySql的更多相关文章

  1. 简易的CRM系统案例之Servlet+Jsp+MySQL版本

    数据库配置 datebase.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/infos usernam ...

  2. 简易的CRM系统案例之Struts2+JSP+MySQL版本

    对简易的CRM系统案例之Servlet+Jsp+MySQL版本改进 Servlet优化为Struts2 学习 <?xml version="1.0" encoding=&qu ...

  3. JSP+Servlet+JDBC+Mysql实现的天才会议管理系统

    本文存在视频版本,请知悉 项目简介 项目来源于:https://github.com/hegexunmeng/meeting-system 这次分享一个会议管理系统,前端后端几乎没有使用任何框架,适合 ...

  4. JSP+Servlet+JDBC+mysql实现的个人日记本系统

    项目简介 项目来源于:https://gitee.com/wishwzp/Diary 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的个人日记本系统.涉及技术少 ...

  5. JSP+Servlet+JDBC+mysql实现的学生成绩管理系统

    项目简介 项目来源于:https://gitee.com/zzdoreen/SSMS 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的学生成绩管理系统.涉及技术 ...

  6. 在Eclipse中配置Tomcat 创建和运行Servlet/JSP

    在Eclipse中配置Tomcat 创建和运行Servlet/JSP 步骤一:在Eclipse中配置Tomcat(注意下载Eclipse IDE for Java EE Developers) (1) ...

  7. 天坑 之 java web servlet+jsp项目 配置后 404 (MyEclipse转eclipse)

    最近搞一个自己的博客系统玩,用了servlet+jsp,结果发现了两个大问题: 1.无法 Export 出 WAR文件: 2.生成WAR,放置到TOMCAT的 webapps目录后,http://lo ...

  8. MySQL+Service+Servlet+Jsp实现Table表格分页展示数据

    下面以一个示例讲解如何使用MySQL+Service+Servlet+Jsp实现Table表格分页展示数据: eg:请假管理系统 要求如下: 一.打开首页页面, 访问查询请假记录的 servlet , ...

  9. 1,eclipse导入项目jdk版本不一样解决方案 2,java报javax.servlet.jsp cannot be resolved to a type

    一:eclipse导入项目jdk版本不一样解决方案 参考博文: https://www.cnblogs.com/chenmingjun/p/8472885.html 选中项目右键 --> Pro ...

随机推荐

  1. Troubleshooting 10g and 11.1 Clusterware Reboots (文档 ID 265769.1)

    Troubleshooting 10g and 11.1 Clusterware Reboots (文档 ID 265769.1) This document is intended for DBA' ...

  2. asp微信支付代码证书文件post_url.aspx和post_url.aspx.cs源码下载

    很多朋友在网上找的asp支付代码中都没有这两个证书文件,只能是用别人的,但是如果别人把他的网站这个文件删了,你的支付也就不能用了,今天我就把大家需要的这两个asp微信支付代码证书文件post_url. ...

  3. SLES Install

    SUSE Linux Enterprise Server 12-SP3:zypper in -t patch SUSE-SLE-SERVER-12-SP3-2017-2036=1 To bring y ...

  4. unity检测鼠标是点击在UI上还是物体上

    void Update() { if (Input.GetMouseButtonDown(0)||(Input.touchCount >0 && Input.GetTouch(0 ...

  5. Vue 学习(1)

    <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta cha ...

  6. 百度获取图片 json格式解析

    var h,i: integer; ss, url: string; mem: TMemoryStream; str1: tstringlist; memstr: TStringStream; idd ...

  7. pycharm+Django+MySQL项目连接数据库中原有数据库

    1.安装驱动 一般会有MySQLdb.pymysql等,因为python版本等问题,我安装的是pymysql. 还可以在项目里安装,File->settings->project 2.在项 ...

  8. MySQL InnoDB 事务实现过程相关内容的概述

    MySQL事务的实现涉及到redo和undo以及purge,redo是保证事务的原子性和持久性:undo是保证事务的一致性(一致性读和多版本并发控制):purge清理undo表空间背景知识,对于Inn ...

  9. rem_750

    /* fix the code flash the page */ var globalWidth = document.documentElement.clientWidth;//window.in ...

  10. ISO 2501 quality model division 学习笔记

    作为一个测试,学习质量模型,能够帮你 在测试设计的时候,从多个角度来思考测试用例的设计.而不仅仅是从 功能上, 同时 需要结合自己的产品,选择自己的侧重点,譬如我们公司的产品,安全性这一块 就比较小, ...