如何用初级的JavaWeb知识写一个较简单的网站(二)

news/2024/5/13 11:28:20/文章来源:https://blog.csdn.net/Jarvenman/article/details/72956527

好了,废话不多说,我们接着上次的项目继续开发

我们现在先暂时开发用户登录注册界面,上次我们已经完成了项目的初期准备,完成了建表、User实体类和UserDao的书写,下面我们开始套页

这里的前台页面是由一名前端程序员写好的,上次就是因为我copy页面的时候没有处理好,所以导致项目出了问题。这里我对页面做了一点点处理,我先来给大家看一下前台写好的页面吧

这里写图片描述

这是用户可见页面,其实并没有几个,里面的具体内容我们过会套页的时候再慢慢看,然后里面有一个back文件夹,里面装着所有的后台管理页面

这里写图片描述

/back文件夹中的文件很乱,多是一些配置文件、插件之类的,再里面的production文件夹中才包含着所有的后台管理页面(这也是我上次弄崩的原因之一,想想就心痛,这次我机智地处理了一下,应该不会崩了吧)

然后,我把根文件夹中的所有文件copy到项目中的WebRoot文件夹下面,然后一个个处理

给大家看下copy之后的项目,有几个文件报错了,我也不是很清楚,特别是前台js文件更不清楚了,凑合凑合吧,只要不影响程序运行就忍了吧,强迫症也忍一忍

这里写图片描述

试一下看能不能跑,来试一试

这里写图片描述

好,既然项目已经开始跑起来了,那我们开始糟蹋糟蹋它

我们现在在写的是用户模块嘛,那我们就先来写一下用户的注册页面

我这里用户的注册是set.html,改成我们自己的命名习惯,在MyEclipes里面,点击一下这个文件,右键,Refactor,Rename,比如我的命名习惯,register.jsp

然后将我们当时新建项目时自动生成的那个index.jsp最上面的几行代码copy到我们的register.jsp里面,就可以安心在里面做改动啦
按照这个方法,把首页也改一下,毕竟首页是我们项目的基础

其实我们要改的地方也不是很多,首先把首页的注册按钮的超链接改一下

这里写图片描述
改成
这里写图片描述

然后,将register.jsp中表单提交的位置改一下

这里写图片描述

在这个后面加上一个action=“xxxx”,就是你要提交给哪个servlet类的路径

下面我们开始写提交的后台servlet

啊,刚才刷新了一下页面发现忘了一个问题,我们MyEclipes自动生成的页面编码都是ISO8859-1,这个编码格式是不支持中文的,为了让它支持中文,我们把所有页面的编码格式都改成utf-8

选中ISO8859-1,然后按ctrl+f,在replace with的文本框里填上utf-8,然后点下面的replace all,然后close,保存就好了

这里写图片描述

当然还有可能你把前台页面copy进来之后,发现文件里的中文都给乱码了,这个问题可以自己去百度一下,不是很麻烦

好了,处理完这些琐碎的问题,我们来开始写我们处理用户注册的servlet类

在src文件夹中new一个Class,还是注意包,同时,由于我们写的是一个servlet,所以要继承HttpServlet

这里写图片描述

进来之后,重写doGet()和doPost()方法
alt+shift+s,Override/Implment Methods里面就有这两个方法,点击OK重写
这里写图片描述

我们把参数名改一改,这个名和我们在jsp中的名字不太一样,改一下会更习惯
根据我的理解,如果表单是通过get方法提交上来的,那么将会交由doGet()方法处理,如果是post方式提交,会交由doPost()方法处理

我们在doPost()方法里写一下我们后台处理注册的代码

response.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("utf-8");String username = request.getParameter("username");String password = request.getParameter("password");String password2 = request.getParameter("password2");int sex = Integer.parseInt(request.getParameter("sex"));String phoneNum = request.getParameter("phoneNum");String email = request.getParameter("email");if(password != null && password.equals(password2)) {User user = new User();user.setUsername(username);user.setPassword(password);user.setSex(sex);user.setPhoneNum(phoneNum);user.setEmail(email);UserDao.insert(user);request.setAttribute("regist", "OK");request.getRequestDispatcher("login.jsp").forward(request, response);} else if(password != null && !password.equals(password2)){PrintWriter out = response.getWriter();out.print("您两次输入密码不一样<br>");out.print("<a href = 'register.jsp'>重新填写</a>");} else {PrintWriter out = response.getWriter();out.print("输入错误<br>");out.print("<a href = 'register.jsp'>重新填写</a>");}

这是写在doPost()方法里面的代码。然后在doGet方法里只要一行代码就可以了

doPost(request, response);

好,现在为止,用户注册功能就写完了,下面开始写用户登录

用户登录的页面是login.html,同样把它更改为login.jsp

我们判断登录,肯定是判断数据库里是否有一条数据,username和password均equals填在表单里的内容,所以在UserDao里还需要增添一个方法queryByUsernameAndPassword

/*** 根据用户名和密码查找用户,用于验证登录* @param username* @param password* @return*/public static User queryByUsernameAndPassword(String username, String password) {User user = null;String sql = "SELECT * FROM `t_user` WHERE `username` = " + username + " AND `password` = " + password;Connection conn = DB.getConnection();Statement stmt = DB.createStmt(conn);ResultSet rs = DB.executeQuery(stmt, sql);try {if(rs.next()) {int sex = rs.getInt("sex");String phoneNum = rs.getString("phone_num");String email = rs.getString ("email");user.setUsername(username);user.setPassword(password);user.setSex(sex);user.setPhoneNum(phoneNum);user.setEmail(email);}} catch (SQLException e) {e.printStackTrace();}return user;}

然后,我们正式开始写登录功能

将login表单中form的action属性改一下,然后开始写登录功能的servlet类

/*** */
package com.software.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 com.software.Dao.UserDao;
import com.software.entities.User;/*** 处理登录的servlet* @author lw* @time 2017年6月7日下午8:33:38*/@WebServlet(name="login",value="/login")
public class Login extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");String username = request.getParameter("username");String password = request.getParameter("password");User user = new User();user = UserDao.queryByUsernameAndPassword(username, password);if(user == null) {request.setAttribute("login", "fail");request.getRequestDispatcher("login.jsp").forward(request, response);} else {HttpSession session = request.getSession();session.setAttribute("username", username);request.getRequestDispatcher("index.jsp").forward(request, response);}}}

然后在index.jsp中添加相应的代码即可

我们在这里使用的是JSTL标签,真正开发的时候,为了实现前后台的分离,前台的jsp页面也是机会没有java代码的

    <c:choose><c:when test="${sessionScope.username == null}"><a href="login.jsp">登陆</a><a href="register.jsp">注册</a><a>管理员登陆</a></c:when><c:otherwise>欢迎您, ${sessionScope.username}  <br><a href="">写文章</a></c:otherwise></c:choose>

在一个真正的网站中,一个非常重要的身份就是管理员,所以我们需要设置一个管理员的身份,我们在Login.java中添加代码:

if(username.equals("admin") && password.equals("admin")) {HttpSession session = request.getSession();session.setAttribute("username", "admin");response.sendRedirect("userList");return;}

这里我们写的比较简单,管理员的用户名和密码我们是在后台写死的,这显然是不合理的,大家可以尝试着自行改进

我们这里是重定向到名为userList的servlet类中,我们来看一下userList中的代码

package com.software.servlet;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;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 com.software.Dao.UserDao;
import com.software.entities.User;/*** 用户列表Servlet类 * @author lw* @time 2017年6月8日下午12:23:33*/@WebServlet(name="userlist",value="/userList")
public class UserList extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {List<User> userList = new ArrayList<>();userList = UserDao.listAll();HttpSession session = request.getSession();session.setAttribute("userList", userList);//request.getRequestDispatcher("/back/production/user_manage.jsp").forward(request, response);response.sendRedirect("back/production/user_manage.jsp");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

在这个servlet中,我们先通过UserDao的listAll()方法查询数据库中的所有user数据,然后重定向到我们的后台用户管理页面

其实在这里我曾经尝试过用请求转发,然后将userList放到request内置对象中,可是这样转发过去之后页面的所有样式就全都不见了。百度了一下,应该是把引用的样式路径改为绝对路径就好了,但是由于前台知识太浅,所以改为使用重定向,大家有兴趣可以尝试一下

随后,在用户管理页面中,使用forEach循环来遍历整个userList

    <c:forEach items="${sessionScope.userList}" var="user"><tr><td>${user.id}</td><td>${user.username}</td><td>${user.password}</td><c:if test="${user.sex == 1}"><td></td></c:if><c:if test="${user.sex == 2}"><td></td></c:if><td>${user.phoneNum}</td><td>${user.email}</td><td class="aparent"><a href="../../userDel?id=${user.id}">删除</a></td></tr></c:forEach>

作为管理员,除了能够浏览所有用户,还能够删除用户,我们来写删除功能

上面可以看到删除按钮的超链接,链接到另一个servlet类中,同时传递了user的id,这里贴出来userDel.java的代码,大家可以参考一下

package com.software.servlet;import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;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 com.software.util.DB;/*** 用户删除操作servelt* @author lw* @time 2017年6月9日下午12:01:52*/@WebServlet(name="userDelete",value="/userDel")
public class UserDel extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String strId = request.getParameter("id");int id = Integer.parseInt(strId);Connection conn = DB.getConnection();Statement stmt = DB.createStmt(conn);String sql = "DELETE FROM `t_user` WHERE `id` = " + id;try {stmt.executeUpdate(sql);} catch (SQLException e) {e.printStackTrace();}response.sendRedirect("userList");}}

截止到目前为止,用户管理模块大致就写完了,下篇文章我们继续来写文章管理模块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_899159.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

影响网站打开速度的9大因素

再好的网站&#xff0c;如果打开速度慢&#xff0c;10个人会有9个人选择离开&#xff0c;我归纳了大约9大影响网站打开速度的因素&#xff0c;但网站页面显示的速度取决于众多的因素&#xff0c;包括服务器性能、网络传输质量、网站的带宽、DNS解析、网页内容包括涉及到的JS代码…

提高网站打开速度的7大秘籍

很多站长使用虚拟主机来做网站&#xff0c;网页内容一旦很多&#xff0c;网站打开速度就会特别慢&#xff0c;如果说服务器、带宽、CDN这类硬指标我们没有经济实力去做&#xff0c;不妨通过网页代码优化的方式来提高速度&#xff0c;卢松松总结了一些可行性的方法。 1: 缩小Jav…

12个在线网站测速工具——web性能

网站的访问速度对于一个网站非常重要&#xff0c;没有一个人会喜欢速度慢的网站。下面是12款在线测试网站的访问速度和性能的工具&#xff0c;在优化网站的时候很有用。 Pingdom 测试网站每个元素的加载速度&#xff0c;比如html、图片、JS文件等等。 GTmetrix GTmetrix集合…

谷歌搜索将衡量网站速度

据国外媒体报道&#xff0c;Google搜索结果排名将考量网页加载速度因素&#xff0c;网页加载速度慢的网站的Google搜索结果排名很可能会下滑。 Google的两位首席搜索工程师阿米特‧辛格哈尔&#xff08;Amit Singhal&#xff09;和马特•卡茨&#xff08;Matt Cutts&#xff09…

怎样让网站的文章(内页)快速收录和发外链的方法

做网站的站长们都知道&#xff0c;网站的文章的收录数量往往决定着网站的权重和网站的排名&#xff0c;所以一些站长对于网站的索引量看的极其重要。而最让人头疼的是&#xff0c;有时候当你费尽心思的写出一篇高质量的原创文章发表到网站以后&#xff0c;却迟迟不被收录&#…

windows server服务器上部署java+tomcat网站域名配置

windows server服务器上部署javatomcat网站域名配置 如果只是部署java项目的话&#xff0c;可以把IIS删除&#xff0c;然后在服务器上安装jdk tomcat 配置好环境变量&#xff0c;就和你在自己计算机上开发一样&#xff0c;把你的项目war包拷到tomcat下的webapps里&#xff08;…

python使用selenium爬取网站流程 适用于抓取使用了js等异步加载技术的网站

Python使用urllib.open再配合BeautifulSoup解析是最快的网页抓取方式&#xff0c;但部分网站做了反爬&#xff0c;用这种抓取方法会出错&#xff0c;就是浏览器里看网页内容是有的&#xff0c;但Python里抓出来的是空架子无数据。这种时候可以F12观察网站是否有直接的数据接口返…

应用程序和网站中创建几乎任何类型的工业条码控件BarcodeX.NET

BarcodeX.NET条形码控件是一种.NET WinForms组件和ASP.NET服务器控件&#xff0c;它可以在您的应用程序和网站中创建几乎任何类型的工业条形码。 具体功能&#xff1a; 100% C#托管代码适用于.NET框架2.0&#xff0c;3.0和3.5支持的条码包括&#xff1a;DataMatrix, PDF-417, …

轻量级设计,让网站灵敏轻便的6个技巧

在网站或软件的策划和设计过程中&#xff0c;我们经常听到这样的讨论&#xff1a;“这个功能设计得太重了”又或“我们希望能够处理得轻一些”。似乎轻设计是时下炙手可热的话题&#xff0c;也是方兴未艾的Web2.0大浪下设计师们的最爱&#xff08;看看那些在全世界遍地开花的SN…

做网站用UTF-8还是GB2312?

经常我们打开外国网站的时候出现乱码&#xff0c;又或者打开很多非英语的外国网站的时候&#xff0c;显示的都是口口口口口的字符&#xff0c; WordPress程序是用的UTF-8&#xff0c;很多cms用的是GB2312。 ● 为什么有这么多编码&#xff1f; ● UTF-8和GB2312有什么区别&…

如何查询几年的网站历史排名变化

在做网站之前&#xff0c; 我们要有一个明确的市场群体的定位&#xff0c;了解用户群体和竞争者。首先要查询竞争者网站排名的变化情况&#xff0c; 最好是几年的排名变化情况&#xff0c; 时间越长越能看出该类型的网站在市场的占有率和需求的稳定性。 那么如何知道 同类竞争者…

查询 alexa.com 历史排名网站

alexa.com 目前提供全球的网站排名, 流量情况. 可以查看情况. 为了更加直观的展现排名变化曲线, 可以使用 http://ddline.cn/cn/url/bilibili.com https://www.alexa.com/siteinfo/bilibili.com 查看, 可以作为了解网站受欢迎程度的参考.

新建 SharePoint 网站集

进入管理中心&#xff0c;主菜单选择“服务设置”选项卡&#xff0c;此菜单选择SharePoint Online 点击网站集的“新建”按钮&#xff0c;看到新建ShartPoint Online网站集对话框 填写一些信息 然后点击“创建” 创建完成将得到以后界面提示 然后将在网站集列表中看到网站集列…

提升你网站水平的 jQuery 插件推荐

jQuery是一个优秀JavaScript库&#xff0c;它简化了HTML文档遍历&#xff0c;事件处理&#xff0c;动画和Ajax交互。 jQuery的确改变了很多人写JavaScript的方式。如今&#xff0c;有很多现成的jQuery插件可供选择&#xff0c;帮助你在网站中加入惊人的功能和效果。看看这些非常…

利用python爬取网站图片并制作蒙太奇风格图片

目标网站是http://www.netbian.com。 python版本为3.7&#xff0c;使用的库有requests、pyquery、pyquery,如果有缺少可以使用pip install 缺少的库来安装。 import requests from pyquery import PyQuery import time首先打开网站来分析&#xff1a;打开目标网站&#xff0c;…

多搜- 多个网站一起搜(舆情监控版)

多搜-多个网站一起搜(舆情监控版) &#xff08;2011.10 v1.3&#xff09; 多搜&#xff0c;顾名思义就是对多个网站同时进行搜索&#xff0c;这样你就不用在不同网站间转换。多搜目前集成了百度,谷歌,雅虎,必应,搜搜,搜狗,有道,即刻,盘古等九大搜索引擎和百度贴吧,天涯,猫扑…

自建一个网站要多少钱

首先看你要做的网站的功能性&#xff0c;不同的要求价格也不同&#xff0c;那么具体建一个网站多少钱&#xff1f;小编针对这个问题为大家详细分析下&#xff1a;服务器&#xff1a;网络卡不卡就要看服务器的配置高不高了&#xff0c;一般的网站可以用个虚拟主机&#xff0c;最…

【软文发布】电子商城购物系统网站建设

【麦多电子商城系统】指出软文发稿是指通过网络平台向你的目标市场发布有价值的商业资讯&#xff0c;一般来说软文发稿包括&#xff1a;问答类的软文发稿、论坛软文发稿、还有博客软文发稿等。 问答软文发稿既能与潜在消费者产生互动&#xff0c;又能植入商家广告&#xff0c;…