java_web [Maven]项目

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 链接数据库

  1. 导入mysql-connector-java-8.0.30.jar jar 包
    在这里插入图片描述
  2. 生成库文件
    在这里插入图片描述
    在这里插入图片描述

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();
    }
}

  1. 封装连接数据库,增删查改等 方法
import java.sql.*;

public class connectionMysql {
   
    /*
    *写方法的一般原则:
    * 1. 知道这个要干什么?【业务理解】
    * 2. 要不要返回值?返回值的意义?
    *  a: 调用此方法的目的就是为了拿到返回值
    *  b: 通过返回值判断方法的执行过程
    * 3. 方法要不要参数?
    * */
    Connection con = null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码字小萌新♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值