java_web 项目搭建
一. web项目搭建及web服务器
(一) 一般Java项目
(二) java_web 项目创建
(三) web服务器
Web服务器:【
apacth
apacthTomcat
weblogic
】发布项目—最终运行
1. 结构剖析:tomcat
2. tomcatserver.xml
配置文件x相关的配置场景
(四) tomcat项目部署
tomcat项目部署:
将项目复制到 tomcat 里 webapps 目录里
tomcat 导进IDEA
(五) jsp详解及内置对象
Jsp概念:内嵌java代码的html页面—交互式页面
Jsp的编译过程:jdk—>现将jsp编译成一个.java文件—>再把他编译成.class
文件
1. 添加.jar
包
添加到项目目录里的lib目录中
2. 表单提交数据
<form action="addUser.jsp" method="post" id="myFrom" name="addUserform">
<form 提交数据—提交的是表单元素数据【控件】
Action:数据提交地址?【html,jsp ctr,邮箱】
Method:数据提交方式【get/post…枚举类型】
get提交(显示)
post提交(隐式)
Name:给表单起名字—方便与js提交表单 >
3. jsp接收数据
.jsp
文件解析级应用📌request 请求对象:—>封装所有客户端请求的对象—>将对应的表单元素名和值以键值对的形式封装—>用户通过其对应的方法就能获得对应的值
String name=request.getParameter("userName");
📌Response 响应对象
response.sendRedirect("HD_fwdPractList.jsp"); <!--返回到 HD_fwdPractList.jsp 界面-->
⚪Request:当客户端发起请求时创建—当服务端接收到请求时销毁
⚪Response:当服务端发起响应时创建—当客户端接收到响应时销毁📌Jsp常用内置对象:
Out对象—用于向页面输出信息
Out.print()out.print("<script>alert('修改成功');window.location.href='YH_UserList.jsp'</script>");
📌Seesion 会话对象
⚪会话?:当客户进入一个站点到离开的那段时间称之为一会话:session监控用户在此会话过程中的一切动作
⚪由于session对象的生命周期的特殊性,在开发过程中,用session对象在多个页面共享参数
⚪Session对象的生命周期:当用户进入一个站点就创建,关闭浏览器销毁【默认的销毁时间为30min】
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!--导入 method 类-->
<%@ page import="com.qf.doman.method" %>
<!--创建对象,下面直接使用-->
<jsp:useBean id="m" class="com.qf.domain.method"></jsp:useBean>
<!--在 ‘<% %>’ 里面可以写Java代码-->
<%
<!--post提交中文乱码转换-->
request.setCharacterEncoding("UTF-8");
<!--get方式提交,中文乱码最终解决-->
String name = request.getParameter("userName");
String s = new String(name.getBytes("iso8859-1"), "UTF-8");
<!--获得表单数据-->
String name=request.getParameter("userName");
String pass=request.getParameter("passWord");
<!--调用method类中的方法-->
method m=new method();
login p =m.checklogin(name, pass);
<!--响应界面-->
response.sendRedirect("HD_fwdPractList.jsp");
<!--向页面输出信息-->
out.print("<script>alert('修改成功');window.location.href='YH_UserList.jsp'</script>");
<!--设置标识, 用于数据共享-->
session.setAttribute("username", name);
<!--销毁sestion会话对象-->
sestion.invalidate();
%>
<html>
<% %> 外面可以写html代码
<!--获取 sestion 共享的数据 session.getAttribute("username");-->
span ><a href="javaScript:quanxian()" id="names"><%=session.getAttribute("username") %></a></span>
</html>
4. jsp 中显示获取的多个数据
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<jsp:useBean id="m" class="com.qf.doman.method"></jsp:useBean>
<%@ page import="com.qf.doman.pojo.user" %>
<%
List<user> list=m.getUser();
%>
<body>
<table class="tablelist" style="text-align: center; width: 100%">
<thead>
<tr>
<th><input id="s" name="" type="checkbox" value="" onclick="checkAll()" /></th>
<th>编号<i class="sort"><img src="images/px.gif" /></i></th>
<th>用户名</th>
<th>密码</th>
<th>权限</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<%for(int i=0;i<list.size();i++){
%>
<tr>
<td><input id="ss" name="" type="checkbox" value="<%=list.get(i).getUid() %>" /></td>
<td><%=list.get(i).getUid() %></td>
<td><%=list.get(i).getUname() %></td>
<td><input readonly="readonly" type="password" value="<%=list.get(i).getUpass()%>"></td>
<td><%=list.get(i).getUroot() %></td>
</tr>
<%} %>
</tbody>
</table>
</body>
(六) Servlet基本概念,原理及实操
📌Java Servlet 是与平台无关的服务器端组件,它运行在Servlet 容器中;
📌Servlet容器负责Servlet和客户的通信以及调用Servlet的方法;
📌Servlet和客户的通信采用“请求/响应”模式
⚪后台版的 jsp
📌每一个JSP页面就是一个servlet
📌JSP在执行时,Web服务器先要把JSP页面翻译成Java源代码,而这个源代码就是一个servlet
📌servlet 可以完成JSP的所有功能
1. Servlet映射配置
2. servlet 类创建及常用方法实操
@WebServlet(name = "Servlet", value = "/Servlet")
public class Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 处理 get 请求
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 处理 post 请求
//弹框乱码转换
response.setContentType("text/html;charset=UTF-8");
//post提交中文乱码转换
request.setCharacterEncoding("UTF-8");
// 获取out对象
PrintWriter out = response.getWriter();
// 获取session对象
HttpSession session = request.getSession();
//获得表单数据
String name=request.getParameter("userName");
String pass=request.getParameter("passWord");
// 设置标识, 用于数据共享
session.setAttribute("username", name);
// 获取共享数据
String uname = (String) session.getAttribute("username");
out.print("<script>alert('修改失败');window.location.href='HD_fwdPractList.jsp'</script>");
}
}
(七) Ajax—实现局部刷新和异步提交—请求
📌Ajax的概念:利用js实现的异步交互机制—局部刷新
📌Ajax的分类:
1)原生态ajax :
XmlHttprequest(核心对象):–根据不同浏览器创建不同的XmlHttprequest对象【先判断你使用的是什么浏览器----】兼容性问题-----物联网—c c++| 底层交互xml 动态创建xml
2)jquery封装的ajax:
Ajax参数说明:
<script>
$.ajax({
type : 'post',//设置数据请求方式
async : true,//设置提交模式—异步提交
url : 'insertUsers',//请求地址或数据提交地址---【controllor 接口】servlet
dataType : 'json',//设置接受服务端返回数据类型
// dataType : 'text',
// Ajax提交数据
data:{
name:”cuihua”,//需要带的参数或提交的数据
age:18
},
// data:$('#myFrom').serialize(), //将表单数据序列化
// myFrom 是表单 id
// Ajax 接收数据
success : function(data) {
//当数据提交成功或者接口请求成功自动执行的函数
Data:就是服务端返回的数据
//业务逻辑自己写
if(data.trim()==1) {
alert("发布成功");
window.location.href="HD_fwdPractList.jsp";
} else if(data.trim()==0) {
alert("发布失败");
window.location.href="HD_fwdPractList.jsp";
}
},
error : function(data) {
//当数据提交失败或者接口请求失败自动执行的函数
Data:就是服务端返回的数据
}
});
</script>
二. jdbc 链接数据库
(一) jdbc 链接数据库原理
(二) jdbc 链接数据库
- 导入
mysql-connector-java-8.0.30.jar
jar 包
- 生成库文件
3.jdbc 链接数据库各种情况及方法讲解(理解就行
)
import java.sql.*;
import java.util.HashMap;
public class TestConnectionMysql {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
HashMap<String, Object> map = new HashMap<>();
// 面试:本机的几种表示形式
// a:localhost b:127.0.0.1
// c: ip地址(cmd -> ipconfig): 192. 168.108.1 d:讣算机名
// 服务端口:
// mysql :3306 sqlSever :1433
// orcl: 1521 sqlite: 直接链接--文件
// 1. 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver"); // 固定写法,加载驱动
// 2. 用户信息和url
String userName = "root"; // 用户名
String passWord = "123456"; // 密码
String sqlName = "som"; // 数据库名称
String url = "jdbc:mysql://localhost:3306/"+sqlName+"?serverTimezone=UTC&"+
"useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2b8";
// 3. 连接成功,返回值是--数据库对象(connection) 代表数据库 是一种对象
Connection connection = DriverManager.getConnection(url, userName, passWord);
// 4. 创建执行对象
Statement statement = connection.createStatement();
// 执行对象 就可以调用对应的方法,完成对应操作
// 5. 指向sql的对象去执行sql语句
// Statement 方法解析
// 1)executeQuery (查询)
// public abstract ResultSet executeQuery(String sql) throws SQLException
// 参数:静态的SQL SELECT(查询)语句
// 返回值:包含有查询产生的数据的ResultSet;永远不为null
String sql = "select * from user where phone = '15199235042'";
ResultSet resultSet = statement.executeQuery(sql);
// 这里count是:搜索出了多少条数据
int count = resultSet.getMetaData().getColumnCount(); // -->3
// resultSet.next() 的值是:查询成功为true,调用一次后其值立马变为false;查询失败为false;
while (resultSet.next()) {
// (1) 查询出来后,直接获取查询结果(一个一个单独获取)
// field 标识的字段名【键】--> phone (获取的是【键】)
String field = resultSet.getMetaData().getColumnName(1);
// field1 标识的值【值】--> 15199235032 (获取的是【值】)
String field1 = (String) resultSet.getObject(field);
// String phone = (String) resultSet.getObject("phone"); 键也可以不用获取,自己直接给即可
// (2) 查询出来后,直接获取查询结果(一次性获取全部查询结果)
// 注意下标是从1开始的
for (int i = 1; i <= count; i++) {
// field 标识的字段名【键】--> phone (获取的是全部的【键】)
String field2 = resultSet.getMetaData().getColumnName(i);
// field1 标识的值【值】--> 15199235032 (获取的是全部的【值】)
String field3 = (String) resultSet.getObject(field2);
// String phone = (String) resultSet.getObject("phone"); 键也可以不用获取,自己直接给即可
// (3) 查询出来后,放进map集合中 (一次性全部放进去)
map.put(field2, resultSet.getString(field2));
// (4) {phone=15199235032} 根据键,筛选数据库里面查到的值,并把查到的值赋值给对应的键
map.put("phone", resultSet.getString("phone"));
// 根据键,获取值
String phone1 = (String) map.get("phone");
System.out.println(phone1);
}
}
// (5) 在不知道表结构的情况下获取 表源数据 表源数据对应的字段类型 表数据
String sql1 = "select * from biao";
ResultSet res = statement.executeQuery(sql1);
//结果集表源数据--表结构破解ResultSetMetaData(表信息)
ResultSetMetaData meta = res.getMetaData();
//获得所有字段总数 (搜索出了多少条数据)
int count1 = meta.getColumnCount();
//遍历字段,获得对应的信息
for(int i=1;i<=count1;i++){
//获取字段名
String columnName = meta.getColumnName(i);
//获取对应的字段类型
String columnType = meta.getColumnTypeName(i);
// 现在已经知道了表结构,就可以运用上面的四类方式进行操作
}
// 2)executeUpdate (增删改)
// public abstract int executeUpdate(String sql) throws SQLException
// 参数:一条 SQL INSERT(插入)、UPDATE(更新) 或 DELETE(删除) 语句或没有返回值的 SQL 语句
// 返回值:如果执行 INSERT、UPDATE 或 DELETE 语句返回行数或者为执行没有返回值的语句返回 0
String sqls = "INSERT INTO user(phone, pwd, mibao, jijiu) VALUES('123', '123', '123', '123');";
int number = statement.executeUpdate(sqls); // number = 1
// 6. 释放连接
resultSet.close();
statement.close();
connection.close();
}
}
- 封装连接数据库,增删查改等 方法
import java.sql.*;
public class connectionMysql {
/*
*写方法的一般原则:
* 1. 知道这个要干什么?【业务理解】
* 2. 要不要返回值?返回值的意义?
* a: 调用此方法的目的就是为了拿到返回值
* b: 通过返回值判断方法的执行过程
* 3. 方法要不要参数?
* */
Connection con = null