目录
一、设计思路
- 需求分析:根据整体的需求,设计数据库,然后建立数据表;首先建立一个数据库,根据需求见了了User表和Blog表。
- 实现数据库代码,并进行封装;首先创建实现了数据库的初始化,然后建立了两个实体类,然后分别对User表进行了插入和查找功能和Blog表的插入、查找和删除功能。
- 通过Servlet 设计并实现具体功能,包括注册、登录,浏览,发表,删除。
二、用到的接口
1、Servlet
Servlet是其实是Tomcat提供给用户的一组API,它可以帮助用户去实现Web程序的开发,其中主要的类有HttpServlet、HttpServletRequest、HttpServletResponds,其分别对应Http协议中的服务器部分和请求和响应。Servlet更偏向于业务代码,请求和响应的解析它基本不负责,它只需要接收Tomcat处理好的信息,然后进行整理,构造两个类,提供给用户使用。
2、Thymeleaf
Thymeleaf称为模板引擎,主要用于渲染前端页面。我们在构造一个动态页面的时候有两种方式,一种是前端渲染(也称为前后端分离),还有一种是服务器端渲染,Thymeleaf是一种服务器端渲染方式,我们从前端接收到数据后,通过在后端调用Thymeleaf的方法,实时渲染一个前端页面,最后返回给浏览器。
@WebListener
public class ThymeleafConfig implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
//这个方法会在当前webapp的ServletContext初始化之前立即执行
//初始化Thymeleaf
//创建一个engine,负责把java中的数据替换到模板中
TemplateEngine engine = new TemplateEngine();
//创建一个resolvr对象,负责找到html模板在哪
//供engine对象来使用
ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(servletContextEvent.getServletContext());
//Context中文原意就是“上下文” Servlet中的上下文,就是一个对象,这个对象里面就包含了这个Webapp的一些相关属性。
//每个webapp都有自己的Context对象,同一个webapp里的若干个Servlet对象之间共享一个Context对象
//给resolver设置一些属性,让他能够找到html文件
resolver.setCharacterEncoding("utf-8");
//Prefix表示“前缀”,设定了满足什么条件的文件可以加载
resolver.setPrefix("/WEB-INF/template/");
//设置”后缀“
resolver.setSuffix(".html");
engine.setTemplateResolver(resolver);
//接下来把初始化好的engine对象通过键值对的方式用Context对象保存起来,便于后面使用
ServletContext context = servletContextEvent.getServletContext();
context.setAttribute("engine",engine);
}
}
三、功能实现
1、注册功能
(1)代码实现
注册的实现很简单,我们只需要通过前端的from表单提交用户名和密码,然后判断是否合法,如果合法的话就把数据插入数据库中。(这里只是简单的实现注册功能,没有一些复杂的判断,比如对用户名中特殊字符的要求之类的)
@WebServlet("/register")
public class RegisterServle extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
if (username == null || "".equals(username)
|| password == null || "".equals(password)){
resp.sendError(404,"不能提交空的同户名或密码");
return;
}
UserDao userDao = new UserDao();
User user = userDao.selectByname(username);
if (user != null){
resp.sendError(404,"用户名已经存在");
return;
}
User newuser = new User();
newuser.setUsername(username);
newuser.setPassword(password);
userDao.insert(newuser);
resp.setContentType("text/html ; charset = utf-8 ");
resp.getWriter().write("<h3>注册成功</h3>");
}
}
(2)测试功能
2、登录功能
登录只需要把用户输入的用户名和密码跟数据库中储存的用户信息进行比较,如果不匹配就登录失败,否则就登录成功。
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding<