java_web [Maven]项目
一. web项目搭建及web服务器(一) 一般Java项目(二) java_web 项目创建(三) web服务器Web服务器:【apacthapacthTomcatweblogic】发布项目—最终运行1. 结构剖析:tomcat2.tomcatserver.xml配置文件x相关的配置场景(四) tomcat项目部署tomcat项目部署:将项目复制到 tomcat 里 webapps 目录里tomcat 导进IDEA(五) jsp详解及内置对象Jsp概念:内嵌java代码的html页面—交互式页面Jsp的编译过程:jdk—现将jsp编译成一个.java文件—再把他编译成.class文件1. 添加.jar包添加到项目目录里的lib目录中2. 表单提交数据formaction="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("scriptalert('修改成功');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:useBeanid="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("scriptalert('修改成功');window.location.href='YH_UserList.jsp'/script");!--设置标识, 用于数据共享--session.setAttribute("username", name);!--销毁sestion会话对象--sestion.invalidate(); %html% % 外面可以写html代码!--获取 sestion 共享的数据 session.getAttribute("username");--span ahref="javaScript:quanxian()"id="names"%=session.getAttribute("username") %/a/span/html4. jsp 中显示获取的多个数据%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%jsp:useBeanid="m"class="com.qf.doman.method"/jsp:useBean%@ page import="com.qf.doman.pojo.user" % % Listuserlist=m.getUser(); %bodytableclass="tablelist"style="text-align:center;width:100%"theadtrthinputid="s"name=""type="checkbox"value=""onclick="checkAll()"//thth编号iclass="sort"imgsrc="images/px.gif"//i/thth用户名/thth密码/thth权限/thth操作/th/tr/theadtbody%for(int i=0;ilist.size();i++){%trtdinputid="ss"name=""type="checkbox"value="%=list.get(i).getUid() %"//tdtd%=list.get(i).getUid() %/tdtd%=list.get(i).getUname() %/tdtdinputreadonly="readonly"type="password"value="%=list.get(i).getUpass()%"/tdtd%=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")publicclassServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{// 处理 get 请求}@OverrideprotectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{// 处理 post 请求//弹框乱码转换response.setContentType("text/html;charset=UTF-8");//post提交中文乱码转换request.setCharacterEncoding("UTF-8");// 获取out对象PrintWriterout=response.getWriter();// 获取session对象HttpSessionsession=request.getSession();//获得表单数据Stringname=request.getParameter("userName");Stringpass=request.getParameter("passWord");// 设置标识, 用于数据共享session.setAttribute("username",name);// 获取共享数据Stringuname=(String)session.getAttribute("username");out.print("scriptalert('修改失败');window.location.href='HD_fwdPractList.jsp'/script");}}(七) Ajax—实现局部刷新和异步提交—请求📌Ajax的概念:利用js实现的异步交互机制—局部刷新📌Ajax的分类:1)原生态ajax :XmlHttprequest(核心对象):–根据不同浏览器创建不同的XmlHttprequest对象【先判断你使用的是什么浏览器----】兼容性问题-----物联网—c c++| 底层交互xml 动态创建xml2)jquery封装的ajax:Ajax参数说明:script$.ajax({type:'post',//设置数据请求方式async:true,//设置提交模式—异步提交url:'insertUsers',//请求地址或数据提交地址---【controllor 接口】servletdataType:'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";}elseif(data.trim()==0){alert("发布失败");window.location.href="HD_fwdPractList.jsp";}},error:function(data){//当数据提交失败或者接口请求失败自动执行的函数Data:就是服务端返回的数据}});/script二. jdbc 链接数据库(一) jdbc 链接数据库原理(二) jdbc 链接数据库导入mysql-connector-java-8.0.30.jarjar 包生成库文件3.jdbc 链接数据库各种情况及方法讲解(理解就行)importjava.sql.*;importjava.util.HashMap;publicclassTestConnectionMysql{publicstaticvoidmain(String[]args)throwsClassNotFoundException,SQLException{HashMapString,Objectmap=newHashMap();// 面试:本机的几种表示形式// 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. 用户信息和urlStringuserName="root";// 用户名StringpassWord="123456";// 密码StringsqlName="som";// 数据库名称Stringurl="jdbc:mysql://localhost:3306/"+sqlName+"?serverTimezone=UTC"+"useSSL=falseallowPublicKeyRetrieval=trueserverTimezone=GMT%2b8";// 3. 连接成功,返回值是--数据库对象(connection) 代表数据库 是一种对象Connectionconnection=DriverManager.getConnection(url,userName,passWord);// 4. 创建执行对象Statementstatement=connection.createStatement();// 执行对象 就可以调用对应的方法,完成对应操作// 5. 指向sql的对象去执行sql语句// Statement 方法解析// 1)executeQuery (查询)// public abstract ResultSet executeQuery(String sql) throws SQLException// 参数:静态的SQL SELECT(查询)语句// 返回值:包含有查询产生的数据的ResultSet;永远不为nullStringsql="select * from user where phone = '15199235042'";ResultSetresultSet=statement.executeQuery(sql);// 这里count是:搜索出了多少条数据intcount=resultSet.getMetaData().getColumnCount();// --3// resultSet.next() 的值是:查询成功为true,调用一次后其值立马变为false;查询失败为false;while(resultSet.next()){// (1) 查询出来后,直接获取查询结果(一个一个单独获取)// field 标识的字段名【键】-- phone (获取的是【键】)Stringfield=resultSet.getMetaData().getColumnName(1);// field1 标识的值【值】-- 15199235032 (获取的是【值】)Stringfield1=(String)resultSet.getObject(field);// String phone = (String) resultSet.getObject("phone"); 键也可以不用获取,自己直接给即可// (2) 查询出来后,直接获取查询结果(一次性获取全部查询结果)// 注意下标是从1开始的for(inti=1;i=count;i++){// field 标识的字段名【键】-- phone (获取的是全部的【键】)Stringfield2=resultSet.getMetaData().getColumnName(i);// field1 标识的值【值】-- 15199235032 (获取的是全部的【值】)Stringfield3=(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"));// 根据键,获取值Stringphone1=(String)map.get("phone");System.out.println(phone1);}}// (5) 在不知道表结构的情况下获取 表源数据 表源数据对应的字段类型 表数据Stringsql1="select * from biao";ResultSetres=statement.executeQuery(sql1);//结果集表源数据--表结构破解ResultSetMetaData(表信息)ResultSetMetaDatameta=res.getMetaData();//获得所有字段总数 (搜索出了多少条数据)intcount1=meta.getColumnCount();//遍历字段,获得对应的信息for(inti=1;i=count1;i++){//获取字段名StringcolumnName=meta.getColumnName(i);//获取对应的字段类型StringcolumnType=meta.getColumnTypeName(i);// 现在已经知道了表结构,就可以运用上面的四类方式进行操作}// 2)executeUpdate (增删改)// public abstract int executeUpdate(String sql) throws SQLException// 参数:一条 SQL INSERT(插入)、UPDATE(更新) 或 DELETE(删除) 语句或没有返回值的 SQL 语句// 返回值:如果执行 INSERT、UPDATE 或 DELETE 语句返回行数或者为执行没有返回值的语句返回 0Stringsqls="INSERT INTO user(phone, pwd, mibao, jijiu) VALUES('123', '123', '123', '123');";intnumber=statement.executeUpdate(sqls);// number = 1// 6. 释放连接resultSet.close();statement.close();connection.close();}}封装连接数据库,增删查改等 方法importjava.sql.*;publicclassconnectionMysql{/* *写方法的一般原则: * 1. 知道这个要干什么?【业务理解】 * 2. 要不要返回值?返回值的意义? * a: 调用此方法的目的就是为了拿到返回值 * b: 通过返回值判断方法的执行过程 * 3. 方法要不要参数? * */Connectioncon=null