java web 学习网站_我的第一个javaweb学习----模仿社区网站(三)
写注册界面的后台
首先得建立一张数据库表,用于存储用户信息的userinfo表,包括注册时间,昵称,签名等
受理注册信息的servlet
然后在servlet包下建立一个注册的Regservlet的Servlet类,用于接收网页传来的信息,并完成是否有邮箱重复检查,和添加用户信息,这里只给出dopost函数,因为表单提交是不想被看见的,
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
String email=request.getParameter("email");
String username=request.getParameter("nickname");
String password=request.getParameter("password");
UserinfoDao ud=new UserInfoDaoImp();
int counts=ud.checkEmail(email);
if(counts==0) {
UserInfo userinfo=new UserInfo();
userinfo.setEmail(email);
userinfo.setNocname(username);
userinfo.setPassword(MD5.MD5(password));
ud.addUserinfo(userinfo);
System.out.println("注册成功");
response.sendRedirect(request.getContextPath()+"/jsp/regpage.jsp");
}else {
System.out.println("邮箱已被占用,请重新注册!");
request.setAttribute("msg", "邮箱已被占用,请重新注册!");
request.getRequestDispatcher("/jsp/regpage.jsp").forward(request, response);;
}
}
理解重点:请求转发和重定向
简单的理解就是请求的次数不同,
request.getRequestDispatcher(url).forward(request,reponse),始终都只有一次请求,因为每次转发都带着同一条request,同时setAttribute属性的值也是不变的,
response.sendRedirect(url),每次重定向都发出新的请求,request里面的setAttribute的属性值没有了,是null
建立注册功能的Dao层
建一个接口UserInfoDao,写两个抽象方法,检查邮箱和注册的,还有一个是用于注册的抽象方法
public interface UserinfoDao {
int checkEmail(String email);
//检查注册
void addUserinfo(UserInfo userinfo);
UserInfo checkLogin(UserInfo userinfo);
}
建立实现上面接口的类
package com.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.domain.UserInfo;
import com.utilDB.DBUtils;
public class UserInfoDaoImp implements UserinfoDao{
DBUtils db=DBUtils.getIntstance();
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
@Override
//检查email 是否已存在用户
public int checkEmail(String email) {
// TODO Auto-generated method stub
try {
conn = db.getConnection();
ps = conn.prepareStatement("select count(*) counts from userinfo where email=?" );
ps.setString(1, email);
rs =ps.executeQuery();
if(rs.next()) { //习惯性的检查是否有记录 如果没有记录直接get的话会有异常
int i=rs.getInt("counts");
return rs.getInt("counts");
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//好习惯记得每次关闭连接,和关闭顺序
db.close(rs);
db.close(ps);
db.close(conn);
}
return 0;
}
public void addUserinfo(UserInfo userinfo) {
// TODO Auto-generated method stub
try {
try {
conn =db.getConnection();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //记得获取连接,因为每一次都会关闭
conn.setAutoCommit(false); //先关闭自动提交
ps=conn.prepareStatement("insert into userinfo(email,nicname,password) value(?,?,?)");
System.out.println(userinfo.getEmail()+":"+userinfo.getNocname()+":"+userinfo.getPassword());
ps.setString(1, userinfo.getEmail());
ps.setString(2, userinfo.getNocname());
ps.setString(3, userinfo.getPassword());
ps.executeUpdate();
conn.commit(); //记得执行完成后,完成提交
} catch (SQLException e) {
// TODO Auto-generated catch block
try {
conn.rollback(); //期间出现异常就回滚
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}finally {
db.close(ps);
db.close(conn);
}
}
public UserInfo checkLogin(UserInfo userinfo) {
try {
conn = db.getConnection();
ps = conn.prepareStatement("select * from userinfo where email=? and password=?" );
ps.setString(1, userinfo.getEmail());
ps.setString(2, userinfo.getPassword());
rs =ps.executeQuery();
if(rs.next()) { //习惯性的检查是否有记录 如果没有记录直接get的话会有异常
UserInfo user =new UserInfo();
user.setEmail(rs.getString("email"));
user.setNocname(rs.getString("nicname"));
user.setPassword(rs.getString("password"));
user.setHead_url(rs.getString("head_url"));
user.setRegtime(rs.getDate("regtime"));
user.setSingn(rs.getString("sign"));
return user;
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//好习惯记得每次关闭连接,和关闭顺序
db.close(rs);
db.close(ps);
db.close(conn);
}
return null;
}
}
执行的都是对数据库的增删改查,可以体现java的结偶,每一块都独立,
临时存储用户信息的类UserInfo方便我们不用每一次都去查数据库,就是简单的set,get方法
public class UserInfo {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getNocname() {
return nocname;
}
public void setNocname(String nocname) {
this.nocname = nocname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getHead_url() {
return head_url;
}
public void setHead_url(String head_url) {
this.head_url = head_url;
}
public Date getRegtime() {
return regtime;
}
public void setRegtime(Date regtime) {
this.regtime = regtime;
}
public String getSingn() {
return singn;
}
public void setSingn(String singn) {
this.singn = singn;
}
private String email;
private String nocname;
private String password;
private String head_url;
private Date regtime;
private String singn;
}
建立前台的文件包
我们要在WebContent下建立
. css:用于放渲染html的代码
. jsp: 我们写的html文件都要另存为.jsp文件,这样才能有jsp文件转成java文件,然后由java文件编译成.class文件可以运行的文件,也就是为什么每第一次运行servlet都比较慢的原因,因为加载需要这一系列的转换,
. js: 放JavaScript代码的
. 注意:这里把html代码放到jsp文件的时候,要保留原来的头代码,删除html代码中的头,比如
保留
pageEncoding="UTF-8"%>
删除
最后记得修改html代码中的获取文件代码路径,一定要是服务器的文件下,不要是本地eclipse保存代码的文件,而是tomcat文件下的当前项目下,用EL表达式比较方便,例如 ${pageContext.request.contextPath}/
测试
注册一个已经注册的邮箱
会注册失败的提示重新注册
java web 学习网站_我的第一个javaweb学习----模仿社区网站(三)相关推荐
- java web前后台交互_前后端交互(javaweb)
前段后台交互的学习(Java web) 标签 : 前后端交互 Javaweb 下面介绍了一些关于交互的细节: 请求数据 前端提供请求数据. 在开发中,后台在查询数据库时,需要借助查询条件才能查询到前端 ...
- python源代码最多的学习网站_史上最全Python学习资料大合集分享
Python有多火就不用说了,之前也零散地分享过一些Python学习开发资料. 本次将分享Python学习资料合集.合集哦,你品,你细品! 在分享之前,还是要啰嗦一下,不然文章字数太少,不太好看. P ...
- java web项目复制_如何从mac中将javaweb项目复制到windows中
在mac上写了一个 javaweb项目 使用了 springMVC+MySQL+Mybatis 来实现 springMVC中配置了 default /assets/* 来过滤静态文件包括 JS CSS ...
- java web食谱网站_基于jsp的食谱菜谱网站-JavaEE实现食谱菜谱网站 - java项目源码...
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的食谱菜谱网站, 该项目可用各类java课程设计大作业中, 食谱菜谱网站的系统架构分为前后台两部分, 最终实现在线上 ...
- java web电子商务网站_电子商务 javaweb b2b b2c o2o 平台
鸿鹄云商大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台. 分布式.微服务.云架构电子商务平台 java ...
- 用java设计节拍器_用 Swift 开发一个节拍器 App(三)设计篇
显然,这是个简单又常规的工具 App,而且是自己捣腾的,我可以不需要从产品角度考虑,可以完全从设计甚至艺术性的方向探索.粗略地一想,我有这样一些灵感. 1 节拍器是在练琴期间用的,左手琴右手弓,使用其 ...
- java web 颜色灰色_网站动态变灰解决方案(java web项目网站)
每逢5.12和哀悼日,各大门户网站都会把自己网站变灰色,以此来表示对逝者的哀悼. 下面是一个java web项目网站变化的设计方案. 思路是这样的,首先由个页面来操作网站是变灰还是不变灰, 然后把选择 ...
- java web漏洞_如何安全检测Java Web应用网站漏洞
展开全部 如何安全检测Java Web应用网站漏洞.txt32因为爱心,流浪的人们才e68a843231313335323631343130323136353331333337383932能重返家园: ...
- Java web小项目_个人主页(1)—— 云环境搭建与项目部署
摘自:Java web小项目_个人主页(1)-- 云环境搭建与项目部署 作者:丶PURSUING 发布时间: 2021-03-26 23:59:39 网址:https://blog.csdn.net/ ...
- Java web小项目_个人主页(2)—— 边缘加速原理与实现
摘自:Java web小项目_个人主页(2)-- 边缘加速原理与实现 作者:丶PURSUING 发布时间: 2021-03-27 14:44:40 网址:https://blog.csdn.net/w ...
最新文章
- Mysql中大表添加索引的办法
- python语言有什么用-Python到底有什么用?为什么那么多人都在学Python?
- SAP UI5 视图控制器 View Controller 的生命周期方法 - Lifecycle methods
- cpuz北桥频率和内存频率_内存频率怎样计算?一分钟教会你
- theoretical-零基础学Qt4编程之Qt核心机制与原理之信号与槽-
- 计算机网络中mf df_计算机网络(第四章)
- wordpress数据库转移
- MySQL数据库中的删除命令:delete、truncate、drop
- 猎头人生, FOR IT Candidate 转CSDN
- 《Redis设计与实现》阅读:Redis底层研究之简单动态字符串SDS
- 解决win10学习汇编工具的烦恼——汇编masm的下载和使用(包含可用下载连接)
- 【软件工程】软件需求说明书
- 如何搭建自己的CI/CD平台:Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平台(持续集成部署Hexo博客Demo)
- 那年的夏天——致毕业
- 医疗检测产品设计规范有哪些?
- realme有升级到android10的,RealmeX/Q将升级安卓10底层刷机包
- 数据结构 —— 队列、栈、链表的区别
- Liquibase 使用(全)
- RNN、RNNCell
- ASP.NET.3.5揭秘
热门文章
- 系统性能调优的各个方面
- Microsoft.Web.Mvc Assembly 说明
- 20个Flutter实例视频教程-01节底部导航栏和切换效果的制作-1
- LINUX中错误 SELinux is disabled
- POJ 3168 Barn Expansion (几何+排序)
- SNF开发平台WinForm之十二-发送手机短信功能调用-金笛-SNF快速开发平台3.3-Spring.Net.Framework...
- POJ 1635 树的最小表示法
- FreeMarker字符串操作
- Go语言中的面向对象
- 有了net send,谁还用IM?