tomcatserver.xml
配置文件x相关的配置场景Jsp概念:内嵌java代码的html页面—交互式页面
Jsp的编译过程:jdk—>现将jsp编译成一个.java文件—>再把他编译成.class
文件
.jar
包<form action="addUser.jsp" method="post" id="myFrom" name="addUserform">
.jsp
文件解析级应用request 请求对象:—>封装所有客户端请求的对象—>将对应的表单元素名和值以键值对的形式封装—>用户通过其对应的方法就能获得对应的值
String name=request.getParameter("userName");
Response 响应对象
response.sendRedirect("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"%>
<%@ page import="com.qf.doman.method" %>
<jsp:useBean id="m" class="com.qf.domain.method">jsp:useBean>
<%
request.setCharacterEncoding("UTF-8");
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 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.invalidate();
%>
<html>
<% %> 外面可以写html代码
span ><a href="javaScript:quanxian()" id="names"><%=session.getAttribute("username") %>a>span>
html>
<%@ 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>
Java Servlet 是与平台无关的服务器端组件,它运行在Servlet 容器中;
Servlet容器负责Servlet和客户的通信以及调用Servlet的方法;
Servlet和客户的通信采用“请求/响应”模式
⚪后台版的 jsp
每一个JSP页面就是一个servlet
JSP在执行时,Web服务器先要把JSP页面翻译成Java源代码,而这个源代码就是一个servlet
servlet 可以完成JSP的所有功能
@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("");
}
}
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>
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;
Statement sta = null;
ResultSet res = null;
// 打开数据库连接 (封装连接数据的方法,返回Connection 对象)
public Connection openMysql() {
try {
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";
// 1. 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 连接
con = DriverManager.getConnection(url, username, pwd);
} catch (Exception e) {
System.out.println("------------------连接异常------------------");
e.printStackTrace();
System.out.println("------------------连接异常------------------");
}
return con;
}
// 增删改 (封装增删改的方法,返回查询产生的数据的ResultSet;永远不为null)
public int update(String sql) {
int re = 0;
try {
// 创建执行对象
sta = con.createStatement();
// 成功几条返回几, 失败返回0
re = sta.executeUpdate(sql);
} catch (SQLException e) {
System.out.println("------------------操作异常------------------");
e.printStackTrace();
System.out.println("------------------操作异常------------------");
}
return re;
}
// 查询 (封装查询的方法,返回执行成功的行数)
public ResultSet select(String sql) {
try {
// 创建执行对象
sta = con.createStatement();
res = sta.executeQuery(sql);
// res: com.mysql.cj.jdbc.result.ResultSetImpl@5a4041cc
} catch (SQLException e) {
System.out.println("------------------查询异常------------------");
e.printStackTrace();
System.out.println("------------------查询异常------------------");
}
return res;
}
// 查看表信息(在只知道表名的情况下,获取数据)
public void showTableMessage(String tableName) {
try {
String sql = "select * from " + tableName;
sta = con.createStatement();
res = sta.executeQuery(sql);
// 结果集表源数据--表结构破解
ResultSetMetaData meta = res.getMetaData();
// 获得所有字段总数
int count = meta.getColumnCount();
// 遍历字段
for (int i = 1; i <= count; i++) {
// 获取字段名
String columnName = meta.getColumnName(i);
// 获取对应的字段类型
int columnType = meta.getColumnType(i); // 数据库数据类型最底层是整型
String columnTypeName = meta.getColumnTypeName(i);
System.out.println(columnName+":"+columnTypeName);
}
} catch (SQLException e) {
System.out.println("------------------查表信息异常------------------");
e.printStackTrace();
System.out.println("------------------查表信息异常------------------");
}
}
// 关闭链接(web 阶段不建议用)
public void closeAll() {
try {
if (res != null) {
res.close();
}
if(sta != null) {
sta.close();
}
if(con != null) {
con.close();
}
}catch (SQLException e) {
e.printStackTrace();
}
}
}
在其他
.Java
文件中,调用各种封装的方法;
public class Main {
public static void main(String[] args) throws SQLException {
connectionMysql con = new connectionMysql();
Connection connection = con.openMysql();
ResultSet res = con.select("select * from users");
if(res.next()) {
String ss = res.getString("uname");
System.out.println(ss);
}
}
}
⚪按钮级别的权限
根据角色匹配功能
⚪字段级别的权限
用户表,角色表,权限表,用户角色表,角色权限表
⚪权限系统
基于权限业务开发对应得系统
M: Model(模型)–bean—类—逻辑实现
C: Controller(控制)—前后衔接的过程—业务协调处理(servlet)jsp
V: View(视图)----数据渲染—显示—客户端页面【jsp,html,vue,asp】
B/S架构程序:客户端浏览器到服务端—>优点:部署成本低,运行方便,培训….
C/S架构程序:客户端到服务端—>缺点:成本高,维护费劲,培训
Servlet:基本概念、原理及实操
Maven是一个项目管理工具,它包含了一项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Manangement System),和用来运行定义在生命周期阶段中插件目标的逻辑。
1、官网去下载maven,http://maven.apache.org/download.cgi
2、解压apache-maven-3.5.0-bin.zip 到D盘
3、右键“计算机”,选择“属性”,之后点击“高级系统设置”,点击“环境变量”,
新建用户变量 MAVEN_HOME 变量值:D:\Java\apache-maven-3.5.0
编辑系统变量 Path 添加变量值: ;%MAVEN_HOME%\bin;
** settings.xml【Maven主配置文件】**
<localRepository>D:\IDEA\out-putlocalRepository>
<mirrors>
<mirror>
<id>alimavenid>
<mirrorOf>*mirrorOf>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
mirror>
mirrors>
骨架选择模式:Maven-web项目 下一步
下一步:IDEA版本不同,需选择对应的maven路劲及配置路劲
相关依赖汇总:https://mvnrepository.com/–对应的依赖查找
Mysql连接依赖
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.4version>
dependency>
单元测试依赖
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
Oracle数据库连接依赖
<dependency>
<groupId>com.oraclegroupId>
<artifactId>ojdbc6artifactId>
<version>11.2.0.4version>
dependency>
jsp依赖
<dependency>
<groupId>javax.servletgroupId>
<artifactId>jsp-apiartifactId>
<version>2.0version>
dependency>
serverlete依赖
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>compilescope>
dependency>
大数据相关依赖
<dependency>
<groupId>org.apache.hadoopgroupId>
<artifactId>hadoop-commonartifactId>
<version>2.7.2version>
dependency>
<dependency>
<groupId>org.apache.hadoopgroupId>
<artifactId>hadoop-mapreduce-client-coreartifactId>
<version>2.7.2version>
dependency>
<dependency>
<groupId>org.apache.hadoopgroupId>
<artifactId>hadoop-hdfsartifactId>
<version>2.7.2version>
dependency>
其他的依赖【关于xml创建和解析】
<dependency>
<groupId>org.dom4jgroupId>
<artifactId>dom4jartifactId>
<version>2.1.0version>
dependency>
<dependency>
<groupId>jaxengroupId>
<artifactId>jaxenartifactId>
<version>1.1.6version>
dependency>
SSM:框架相关的依赖
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.4.5version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>1.3.1version>
dependency>
<dependency>
<groupId>org.aspectjgroupId>
<artifactId>aspectjweaverartifactId>
<version>1.8.7version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.0.9version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>jsp-apiartifactId>
<version>2.0version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>servlet-apiartifactId>
<version>2.5version>
<scope>providedscope>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-apiartifactId>
<version>2.10.0version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-webartifactId>
<version>2.9.1version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>1.7.25version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-slf4j-implartifactId>
<version>2.9.1version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-jclartifactId>
<version>2.9.1version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.6version>
dependency>
<dependency>
<groupId>jstlgroupId>
<artifactId>jstlartifactId>
<version>1.2version>
dependency>
<dependency>
<groupId>taglibsgroupId>
<artifactId>standardartifactId>
<version>1.1.1version>
dependency>
<dependency>
<groupId>commons-fileuploadgroupId>
<artifactId>commons-fileuploadartifactId>
<version>1.3.1version>
dependency>
<dependency>
<groupId>commons-iogroupId>
<artifactId>commons-ioartifactId>
<version>2.5version>
dependency>
<dependency>
<groupId>c3p0groupId>
<artifactId>c3p0artifactId>
<version>0.9.1.2version>
dependency>
<dependency>
<groupId>com.github.pagehelpergroupId>
<artifactId>pagehelperartifactId>
<version>5.1.2version>
dependency>
<dependency>
<groupId>org.springframework.securitygroupId>
<artifactId>spring-security-webartifactId>
<version>${spring.security.version}version>
dependency>
<dependency>
<groupId>org.springframework.securitygroupId>
<artifactId>spring-security-configartifactId>
<version>${spring.security.version}version>
dependency>
<dependency>
<groupId>org.springframework.securitygroupId>
<artifactId>spring-security-coreartifactId>
<version>${spring.security.version}version>
dependency>
<dependency>
<groupId>org.springframework.securitygroupId>
<artifactId>spring-security-taglibsartifactId>
<version>${spring.security.version}version>
dependency>