Java Web 程序设计期末复习重要知识点总结
临近期末,对这学期学习的JavaWeb进行一个简单的复习总结,也希望能对萌新们有所帮助。本篇文章重点总结知识点,实操练习项目代码相关在我的“Java Web 程序设计”分类专栏其他文章。Java Web,是用Java技术来解决相关web互联网领域的技术栈。...
目录
前言
临近期末,对这学期学习的JavaWeb进行一个简单的复习总结,也希望能对萌新们有所帮助。本篇文章重点总结知识点,实操练习项目代码相关在我的“Java Web 程序设计”分类专栏其他文章。
一、Java Web是什么?
Java Web,是用Java技术来解决相关web互联网领域的技术栈。web包括:web服务端和web客户端两部分。Java在客户端的应用有Java Applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP、第三方框架等等。Java技术对Web领域的发展注入了强大的动力。
二、安装eclipse、jdk、tomcat服务器
1.安装eclipse
首先打开eclipse官网,官网首页地址为:
Enabling Open Innovation & Collaboration | The Eclipse Foundation
进入官网后点击Download下载
点击Download Packages去选择自己需要的版本
在选择好版本后点击进入如下界面,选择Windows系统下载,我这里eclipse示例选的是2020-09版
这里选择Download下载
然后选择自己要下载的位置下载即可。出现后面这个界面不必在意,Eclipse是免费的软件,之后等待下载完成即可!
下载完成后打开下载完成的压缩文件,将其解压至合适的位置。解压完成后找到安装包点击安装跟着提示安装即可,安装位置默认应该是c盘,建议改到其他盘,包括安装包也是尽量放在其他盘,不要什么都默认放在c盘,这样对你电脑好一点。
Eclipse第一次启动时会要求用户选择一个工作空间(之后在Eclipse创建的项目都将自动创建在你选择的文件夹中,下方的Use this as the……尽量不要打勾,避免之后因为想要改变工作空间所处文件夹而浪费掉一些时间)工作空间所处的位置最好不要再C盘,避免浪费C盘空间(若C盘不是系统盘也可设置为C盘),笔者将工作空间设置在了D盘。还有就是你们刚进入这个软件出现下图界面应该全是英文,我是加载了中文插件包的,如果想设置成中文可以去我的资源下载中文包然后根据我下面说明操作即可设置成中文。如下图所示
点击启动之后就是如下界面,此页面不必在意,叉掉即可,当然你们是英文的欢迎界面
2. 设置eclipse为中文
在我CSDN博客资源中下载中文包后解压得到下面这个文件(1是我的中文压缩包;2是我解压后得到的文件,3是是我eclipse软件安装目录)
点击进入2我解压后得到的文件复制里面的eclipse文件夹
将 eclipse文件夹复制到eclipse软件安装目录下的dropins文件夹里面(D:\Professional Study\Java web\开发工具\eclipse\dropins),如果里面有相同内容选择替换即可。然后重启软件即可设置成功。
3.安装jdk
去到官网下载jdk,找到下载后的jdk的安装包,双击进行安装。JDK的安装是无脑安装,就是一路下一步下一步,直到完成。默认安装在C盘下的Program Files目录下,如果想更改安装目录,那么请你记一下安装目录,不然待会配置环境变量的时候不知道去哪里找jdk安装目录。
安装很简单,萌新觉得麻烦就默认位置吧,我也以jdk安装默认位置来示范环境变量如何配置。找到电脑计算机,单击右键,然后点属性。
进来后点击高级系统设置
然后点击环境变量
在系统变量这里点击新建,新建变量名为“JAVA_HOME”,变量值为jdk安装路径,我这里是“C:\Program Files\Java\jdk-11.0.5” 。win10,win11可以点击浏览目录去选择jdk安装路径,win7需要自己去电脑找到jdk安装目录然后把路径复制过来。
浏览目录
上面设置好后还是在系统变量里面找到Path,在我们的windows系统中,path变量是内置好的,我们需要将jdk下的bin目录配置到path里。所以此处选择编辑:
然后两次新建,将jdk下的bin目录和jdk下jre里的bin目录配置进去。
配置后一定要点击确定,确定,确定,这些配置才会生效。
测试是否安装成功
打开终端:
方法一:开始|Windows系统|命令提示符
方法二:搜索框里直接搜索:命令提示符或者cmd(Command)
方法三:快捷键:win+R键,然后输入cmd
注意:如果你在配置环境变量前已经打开了dos窗口,那么配置环境变量后,需要重新打开dos窗口。
测试1:java -version
测试2:javac
4.安装tomcat
首先我先简单介绍一下Eclispe的主界面,即Eclipse的工作台窗口。Eclipse的工作台主要由菜单栏、工具栏、透视图工具栏、透视图、项目资源管理器视图、大纲视图、编辑器和其他视图组成。可以配合下面这张图来理解。
(1)打开eclipse,在eclipse工作台的其他视图中,选中“Servers”服务器视图,在该视图的空白区域单击鼠标右键,在弹出的快捷菜单中选择“New”/“Server”菜单项,将打开“新建服务器”对话框,在该对话框中,展开Apache节点,选中该节点下的“Tomcat v9.0 服务器”子节点,(当然也可以选择其他版本的服务器)其他采用默认。
我这里服务器视图有9.0的服务器是因为我配置过用过,读者一开始应该是没有的。还有就是如果读者下的我CSDN资源里的服务器那就选择9.0版本的,如果是自己去下的其他版本选择对应版本就可以。
(2)单击“Next”按钮,将打开指定Tomcat服务器安装路径的对话框,单击“浏览(Browse)”按钮,选择Tomcat的安装路径,其他采用默认。设置好后点“Finish”完成。
(3)然后在服务器视图双击标号1,选择标号2,再按快捷键“Ctrl+s”保存设置,最后关闭这个界面Tomcat服务器就设置好了。
(4) 我们来写个html运行到服务器上测试一下。
在左上角文件这里点击新建,新建一个Dynamic Web Project项目,项目名字自己随便取,然后点击完成。
在新建项目的WebContent上面新建HTML File,名字自己取。
最后再复制我的代码或者自己简单写一个运行测试一下,看有没有问题
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户注册</title>
</head>
<body>
<table width="270" border="1">
<tr>
<th>用户注册</th>
</tr>
<tr>
<td align="left">用户名:</td>
<th align="right"><input type="text">*</th>
</tr>
<tr>
<td align="left">密码:</td>
<td align="right"><input type="text">*</td>
</tr>
<tr>
<td align="left">确认密码:</td>
<td align="right"><input type="text">*</td>
</tr>
<tr>
<td align="left">电话:</td>
<td align="right"><input type="text">*</td>
</tr>
<tr>
<td align="left">邮箱:</td>
<th align="right"><input type="text">*</th>
</tr>
<tr>
<th align="left"></th>
<th align="center"><input type="submit" value="提交"> <input type="submit" value="重置"></th>
</tr>
</table>
</body>
</html>
运行到我们配置的服务器上。
如果和我一样表单能运行出来就没问题。
5.设置编码格式
在窗口里找到“首选项”,然后找到Web
将划横线的这三个字符编码设置成UTF-8,避免出现乱码。最后点击应用并关闭。
三、走进JSP
1、JPS概述
JSP(Java Server Pages)是由Sun公司倡导、许多公司参与而建立的动态网页技术标准。它在HTML代码中嵌入Java代码片段(Scriptlet)和JSP标签,构成了JSP网页。在接收到用户请求时,服务器会处理Java代码片段,然后生成处理结果的HTML页面返回给客户端,客户端的浏览器将呈现最终页面效果。
JSP特征:
跨平台、业务代码分离、组件重用、预编译、继承Java Servlet功能
2、指令标签
(1)page指令
language属性 | 该属性用于设置JSP页面使用的语言,默认值是Java。 |
extends属性 | 该属性用于设置JSP页面继承的Java类,该属性并不常用,而且有可能影响服务器的性能优化。 |
import属性 | 该属性用于设置JSP导入的类包。JSP页面可以嵌入Java代码片段,这些Java代码在调用API时需要导入相应的类包。 |
pageEccoding属性 | 该属性用于定义JSP页面的编码格式,也就是指定文件编码。 |
contentType属性 | 该属性用于设置JSP页面的MIME类型和字符编码,浏览器会据此显示网页内容。 |
(2)include指令
include指令用于文件包含。该指令可以在JSP页面中包含另一个文件的内容,但是它仅支持静态包含,也就是说被包含文件中的所有内容都被原样包含到该JSP页面中;如果被包含文件中有代码,将不被执行。被包含的文件可以是一段Java代码、HTML代码或者是另一个JSP页面。
(3)taglib指令
该指令用于加载用户自定义标签,自定义标签将在后面章节进行讲解。使用该指令加载后的标签可以直接在JSP页面中使用。其语法格式如下:
<%@taglib prefix="view" uri="/WEB-INF/tags/view.tld" %>
3、嵌入Java代码
(1)代码片段
Java代码片段被包含在“<%”和“%>”标记之间。可以编写单行或多行的Java代码,语句以“;”结尾,其编写格式与Java类代码格式相同。
(2)声明
定义全局变量:
<%! long startTime = System.nanoTime();%>
定义全局方法:
<%!
int getMax(int a, int b) {
int max = a > b ? a : b;
return max;
}
%>
(3)JSP表达式
JSP表达式可以直接把Java的表达式结果输出到JSP页面中。表达式的最终运算结果将被转换为字符串类型,因为在网页中显示的文字都是字符串。JSP表达式的语法格式如下:
圆周率是:<%=Math.PI %>
4、注释
类别 | 语法 |
HTML注释 | <!-- 注释文本 --> |
JSP注释 | <%-- 注释文本 --%> |
动态注释 | <!-- <%= 变量值 %> --> |
代码注释 | <% //单行注释 /* 多行注释 */ /**JavaDoc注释,用于成员注释*/ %> |
5、JSP常用对象
(1)request对象
获取请求参数值:
String request.getParameter(String parameter)
获取Form表单的信息
String[] request. getParameterValues(String parameter)
获取请求客户端信息
在作用域中管理属性
Object request.setAttribute(String name ,Object value)
(2)response对象
response对象的常用方法
方法 | 返回值 | 说明 |
addHeader(String name,String value) | void | 添加HTTP文件头,如果同名的头存在,则覆盖 |
setHeader(String name,String value) | void | 设定指定名称的文件并头的值,如果存在则覆盖 |
addCookie(Cookie cookie) | void | 向客户端添加一个cookie对象 |
sendError(int sc,String msg) | void | 向客户端发送错误信息。例如:404 网页找不到 |
sendRedirect(String location) | void | 发送请求到另一个指定位置 |
getOutputStream() | ServletOutputStream | 获取客户端输出流对象 |
setBufferSize(int size) | void | 设置缓冲区大小 |
(3)session对象
session是与请求有关的会话对象,是java.servlet.http.HttpSession对象,用于保存和存储页面的请求信息。
session对象的setAttribute()方法可实现将信息保存在session范围内,而通过getAttribute()方法可以获取保存在session范围内的信息。
(4)application对象
application对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象的生命周期更长,类似于系统的“全局变量”。
application对象的常用方法
方法 | 返回值 | 说明 |
getAttribute(String name) | Object | 通过关键字返回保存在application对象中的信息 |
getAttributeNames() | Enumeration | 获取所有application对象使用的属性名 |
setAttribute(String key,Object obj) | void | 通过指定的名称将一个对象保存在application对象中 |
getMajorVersion() | int | 获取服务器支持的Servlet版本号 |
getServerInfo() | String | 返回JSP引擎的相关信息 |
removeAttribute(String name) | void | 删除application对象中指定名称的属性 |
getRealPath() | String | 返回虚拟路径的真实路径 |
getInitParameter(String name) | String | 获取指定name的application对象属性的初始值 |
四、Servlet技术
1、Servlet基础
(1)Servlet与Servlet容器
Servlet是使用Java Servlet接口(API)运行在Web应用服务器上的Java程序。
Servlet容器也就是指Web容器,如Tomcat、Jboss、Resin、WebLogic等,它们对Servlet进行控制。
(2)Servlet技术特点
2、Servlet配置
(1)声明Servlet对象
<servlet>
<servlet-name>SimpleServlet</servlet-name>
<servlet-class>com.lyq.SimpleServlet</servlet-class>
</servlet>
(2)映射Servlet
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<url-pattern>/SimpleServlet</url-pattern>
</servlet-mapping>
3、Servlet 常用的接口和类
(1)Servlet接口
Servlet接口中的方法及说明
方 法 | 说 明 |
public void init(ServletConfig config) | Servlet实例化后,Servlet容器调用此方法来完成初始化工作 |
public void service(ServletRequest request, | 此方法用于处理客户端的请求 |
public void destroy() | 当Servlet对象应该从Servlet容器中移除时,容器调用此方法,以便释放资源 |
public ServletConfig getServletConfig() | 此方法用于获取Servlet对象的配置信息,返回ServletConfig对象 |
public String getServletInfo() | 此方法返回有关Servlet的信息,它是纯文本格式的字符串,如作者、版本等 |
ServletConfig接口
方 法 | 说 明 |
public String getInitParameter(String name) | 此方法返回String类型名称为name的初始化参数值 |
public Enumeration getInitParameterNames() | 获取所有初始化参数名的枚举集合 |
public ServletContext getServletContext() | 用于获取Servlet上下文对象 |
public String getServletName() | 返回Servlet对象的实例名 |
HttpServletRequest接口
方 法 | 说 明 |
public String getContextPath() | 返回请求的上下文路径,此路径以“/”开关 |
public Cookie[] getCookies() | 返回请求中发送的所有cookie对象,返回值为cookie数组 |
public String getMethod() | 返回请求所使用的HTTP类型,如get、post等 |
public String getQueryString() | 返回请求中参数的字符串形式,如请求MyServlet?username=mr,则返回username=mr |
public String getRequestURI() | 返回主机名到请求参数之间部分的字符串形式 |
public StringBuffer getRequestURL() | 返回请求的URL,此URL中不包含请求的参数。注意此方法返回的数据类型为StringBuffer |
public String getServletPath() | 返回请求URI中的Servlet路径的字符串,不包含请求中的参数信息 |
public HttpSession getSession() | 返回与请求关联的HttpSession对象 |
HttpServletResponse接口
方 法 | 说 明 |
public void addCookie(Cookie cookie) | 向客户端写入cookie信息 |
public void sendError(int sc) | 发送一个错误状态码为sc的错误响应到客户端 |
public void sendError(int sc, String msg) | 发送一个包含错误状态码及错误信息的响应到客户端,参数sc为错误状态码,参数msg为错误信息 |
public void sendRedirect(String location) | 使用客户端重定向到新的URL,参数location为新的地址 |
(2)GenericServlet类
GenericServlet类是一个抽象类,分别实现了Servlet接口与ServletConfig接口。此类实现了除service()之外的其他方法,在创建Servlet对象时,可以继承GenericServlet类来简化程序中的代码,但需要实现service()方法。
(3)HttpServlet类
HttpServlet类继承了GenericServlet类,通过其对GenericServlet类的扩展,可以很方便地对HTTP请求进行处理及响应。
4、Servlet过滤器
(1)过滤器接口
Filter接口
方 法 | 说 明 |
public void init(FilterConfig filterConfig) | 过滤器的初始化方法,容器调用此方法完成过滤的初始化。对于每一个Filter实例,此方法只被调用一次 |
public void doFilter(ServletRequest request, | 此方法与Servlet的service()方法相类似,当请求及响应交给过滤器时,过滤器调用此方法进行过滤处理 |
public void destroy() | 在过滤器生命周期结束时调用此方法,用于释放过滤器所占用的资源 |
FilterChain接口
void doFilter(ServletRequest request, ServletResponse response)
throws IOException , ServletException
此方法主要用于将过滤器处理的请求或响应传递给下一个过滤器对象。在多个过滤器的Web应用中,可以通过此方法进行传递。
FilterConfig接口
方 法 | 说 明 |
public String getFilterName() | 返回过滤器的名称 |
public String getInitParameter(String name) | 返回初始化名称为name的参数值 |
public Enumeration getInitParameterNames() | 返回所有初始化参数名的枚举集合 |
public ServletContext getServletContext() | 返回Servlet的上下文对象 |
(2)过滤器的配置
声明过滤器对象
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.lyq.util.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
映射过滤器
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
五、数据库技术——JDBC
1、JDBC概述
JDBC代表JAVA DATA bASE Connectivity(Java数据库连接),它是一个标准的Java API,用于Java 编程语言和大量数据库之间的独立于数据库的连接。 JDBC库包括用于下面提到的每个任务的API,这些API通常与数据库使用相关联。 与数据库建立连接。 创建SQL或MySQL语句。
2、JDBC驱动程序
JDBC(java database connectivity)驱动程序是对JDBC规范完整的实现,它的存在在JAVA程序与数据库系统之间建立了一条通信的渠道。分为以下4种:
- JDBC-ODBC Bridge
- JDBC-Native API Bridge
- JDBC-middleware
- Pure JDBC Driver
3、JDBC中的常用接口
DriverManager(驱动管理器获得数据库链接)
Connection(数据库链接接口)
Statement(语句接口,用来静态操作SQL语句)
PreparedStatement(预定义语句,用来动态操作SQL语句)
CallableStrtement(可以调用存储过程的预定义语句)
ResultSet(结果集,保存数据记录的结果集合)
ResultSetMetaData(结果集元素数据如:列名、列类型)
DatabaseMetaData(数据元数据:数据库名称、版本)
4、连接数据库
(1)加载JDBC驱动程序
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("加载数据库驱动时抛出异常,内容如下:");
e.printStackTrace();
}
(2)创建数据库连接
Connection conn = DriverManager.getConnection(
" jdbc:mysql://127.0.0.1:3306/db_database24", "root", "123456");
(3)执行SQL语句
Statement | 该类型的实例只能用来执行静态的SQL语句 |
PreparedStatement | 该类型的实例增加了执行动态SQL语句的功能; |
CallableStatement | 该类型的实例增加了执行数据库存储过程的功能。 |
(4)获得查询结果
通过Statement接口的executeUpdate()或executeQuery()方法,可以执行SQL语句,同时将返回执行结果。
(5)关闭连接
resultSet.close();
statement.close();
connection.close();
5、数据库操作技术
(1)增
Statement stmt=conn.createStatement();
int rtn = stmt.executeUpdate
("insert into tb_user (username, password) values('xinxin','111')");
PreparedStatement pStmt = conn.prepareStatement("insert into tb_user (username, password) values(?,?)");
pStmt.setString(1,"book");
pStmt.setString(2,"111");
int rtn= pStmt.executeUpdate();
(2)删
Statement stmt=conn.createStatement();
int rtn= stmt.executeUpdate("delete tb_user where username ='xinxin'");
PreparedStatement pStmt = conn.prepareStatement("delete from tb_user where username =?");
pStmt.setString(1,"book");
int rtn= pStmt.executeUpdate();
(3)改
Statement stmt=conn.createStatement();
int rtn= stmt.executeUpdate("update tb_user set username='xinxin', password='222' where username='book'");
PreparedStatement pStmt = conn.prepareStatement("update tb_user set username =?, password =? where username =?");
pStmt.setString(1,"book");
pStmt.setString(2,"111");
pStmt.setString(3,"class");
int rtn= pStmt.executeUpdate();
(4)查
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = DriverManager
.getConnection(
"jdbc:mysql://localhost/db_database24?useUnicode=true&characterEncoding=utf8",
"root", "123456");
Statement stmt = conn.createStatement();
ResultSet rs = stmt
.executeQuery("select * from tb_user where username='admin'");
while (rs.next()) {
out.println("用户名:" + rs.getString(2) + "密码:" + rs.getString(3));
}
rs.close();
stmt.close();
conn.close();
更多推荐
所有评论(0)