前言
本网站没有采用主流的Spring、SpringMvc或者SpringBoot等Web框架,而是使用Servlet和Jsp,旨在熟悉和理解JavaWeb的基础原理和用法。通过该项目能辅助学习相关知识。
相关技术简介
Servlet:
Java Servlet(Java服务器小程序)是一个基于Java技术的Web组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容。Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类。Servlet被编译为平台独立的字节码,可以被动态地加载到支持Java技术的Web服务器中运行。目前Servlet规范最新的版本是4.0。
Jetty:
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
JSP:
使用Servlet产生动态网页,需要在代码中打印输出很多HTML的标签。此外,在Servlet中,我们不得不将静态显示的内容和动态产生内容的代码混合在一起。JSP是一种建立在Servlet规范功能之上的动态网页技术。和ASP类似,它们都是在通常的网页文件中嵌入脚本代码,用于产生动态内容,不过JSP文件中嵌入的是Java代码和JSP标记。JSP文件在用户第一次请求时,会被编译成Servlet,然后再由这个Servlet处理用户的请求,所以JSP也可以看成是运行时的Servlet。
指令:以<%@开始%>结束的就是指令。在JSP中常用的指令有三个page指令、taglib指令、import指令
注释:以“<%--”以“--%>”结束,中间则是注释的内容,在JSP中注释有两种,一种是JSP注释,一种是HTML注释,其中JSP注释不会响应的浏览器,但是HTML注释会响应到客户端浏览器。
脚本:以<%开始,以%>结束,中间则是我们要书写的Java代码或者业务逻辑。
声明:以“<%!”开始,以“%>”结束,中间则可以定义方法、类等内容
表达式:<%=%>则是向页面中输出变量,等价于out对象的write()方法。
模板:模板其实就是在JSP中的HTML
JSP生命周期:JSP容器管理JSP页面生命周期的两个阶段:转换阶段(translation phase)和执行阶段(execution phase)。
JSP内置对象:
JSP内置对象是指在JSP中不需要实例化即可直接使用的对象。
内置对象 | 描述 |
application | ServletContext的实例 |
config | ServletConfig的实例 |
exception | 获取出现异常时的信息 |
out | jsp的输出流对象 |
page | 指向当前jsp的对象 |
pageContext | jsp的上下文路径 |
request | HttpServletRequest的实例,请求对象 |
response | HttpServletResponse的实例,响应对象 |
session | HttpSession的实例,会话 |
JSP作用域:
名称 | 作用域 |
application | 在所有应用程序中有效 |
session | 在当前会话中有效 |
request | 在当前请求中有效 |
page | 在当前页面有效 |
请求转发和重定向:
请求转发和重定向的作用都是用于跳转web资源,但是二者是存在区别的。
下面的两个示例分别演示的用请求转发和重定向跳转资源:
在请求转发中,客户端浏览器请求JSP或者Servlet,当JSP或者Servlet接收到请求后,将请求转发给其他的JSP或者Servlet,最终由转发后的资源对客户端进行响应。在整个过程中只有1次请求。
在重定向中,客户端浏览器请求JSP或者Servlet,当JSP或者·Servlet接收到请求后会先向客户端响应302状态码及重定向地址,当客户端浏览器接收到该302响应码以后,重新发起一次请求,请求的地址就是服务端伴随这302响应的地址,因此在整个过程中发生了2次请求。
EL表达式:
EL的语法简单,使用方便。所有的EL表达式都是以“${”开始,以“}”结束,在JSP开发中有着大量的使用,通常情况下和JSTL搭配使用。关于JSTL的内容会在下一章节中讲解。
EL内置对象:
内置对象 | 描述 |
pageScope | page 作用域 |
requestScope | request 作用域 |
sessionScope | session 作用域 |
applicationScope | application 作用域 |
param | Request 对象的参数,字符串 |
paramValues | Request对象的参数,字符串集合 |
header | HTTP 信息头,字符串 |
headerValues | HTTP 信息头,字符串集合 |
initParam | 上下文初始化参数 |
cookie | Cookie值 |
pageContext | 当前页面的pageContext |
JSTL:
JSTL(JSP Standard Tag Library),规范由Sun公司制定,Apache的Jakoarta小组负责实现,JSTL的目标是为了简化JSP页面的设计。
Maven简介:
是 Apache 下的一个纯 Java 开发的开源项目,Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
wangEditor
是一款基于 javascript 和 css 开发的 Web 富文本编辑器, 轻量、简洁、易用、开源免费。
2. 系统功能模块
2.1 前台系统功能描述
用户登录注册功能:包括用户的注册、登录。
用户发表博客功能:普通游客只能浏览博客,注册登录后可完成发表博客、修改博客、删除博客等功能。
用户评论功能:普通游客只能浏览留言,注册登录后可完成对博客的评论操作。
用户留言功能:游客和注册用户都能完成留言。
用户信息修改功能:用户在登录状态下,可以对自己的信息进行修改。
后台系统功能描述
用户信息管理:
管理员在登录状态下,可对已经注册的用户数据删除、修改密码、修改状态等操作。
博客管理:
管理员可以对用户发表的博客进行查找、审核、推荐、删除、查看。
评论管理:
管理员可以对用户发表的评论进行查找、删除、查看。
留言管理:
管理员可以对用户留言进行查看和删除,管理员可以作为普通用户登录系统。
页面展示
前台首页:
自适应布局 :
用户注册:
用户登录:
发表博客 :
阅读博客:
用户管理:
博客管理:
留言管理:
源码链接
本网站使用jetty容器,启动方法如下: