文档章节

会话技术( Cookie ,Session)

Jusenr
 Jusenr
发布于 2016/05/17 00:46
字数 2736
阅读 6
收藏 0
点赞 2
评论 0

 会话技术:
    会话:浏览器访问服务器端,发送多次请求,接受多次响应。直到有一方断开连接。会话结束。
    
    解决问题:可以使用会话技术,在一次会话的多次请求之间共享数据。
        
    分类:
        客户端会话技术    Cookie
        服务器端会话技术    Session

 

  客户端会话技术:Cookie 小饼干的意思

        服务器端不需要管理,方便。但是不安全。
        
        原理:
            1.客户端第一次请求服务器端,服务器作出响应时,会发送set-cookie头,携带需要共享的数据
            2.当客户端接受到这个响应,会将数据存储在客户端
            3.当客户端再次请求服务器端时,会通过cookie请求头携带着存储的数据。
            4.服务器接受带请求,会获取客户端携带的数据。
        
        Java代码实现:
            1.发送cookie
                //1.创建Cookie对象。
                Cookie c = new Cookie("name","zhangsan");
                //2.通过response发送cookie
                response.addCookie(c);
                
            2.接收cookie
                //1.获取所有cookie数组
                Cookie[] cs = request.getCookies();
                //2.遍历数组
                if(cs != null){
                    for (Cookie c : cs) {
                        //获取cookie的名称
                        String name = c.getName();
                        //判断名称,得到目标cookie
                        if("name".equals(name)){
                            //获取值
                            String value = c.getValue();
                            System.out.println(name+":"+value);
                        }
                    }
                }
        
        Cookie的细节:
            1.默认情况下,cookie保存在客户端浏览器内存中。
              需要将数据持久化存储在客户端的硬盘上。
              设置cookie的存活时间。setMaxAge(int s);
            
            2.Cookie是不支持中文数据的。如果要想存储中文数据。需要转码。
                URL编码
        
        功能:记住用户名和密码


        服务器端会话技术:Session  主菜的意思
        
        服务器端需要管理数据,麻烦,但是安全。
        
        原理:
            1.客户端访问服务器端,在服务器端的一个对象(Session)中存储了数据
            2.服务器给客户端作出响应时,会自动将session对象的id通过响应头 set-cookie:jsessionid=xxx 发送到客户端
            3.客户端接受到响应,将头对应的值存储到客户端
            4.客户端再次请求时,会携带着请求头 cookie:jsessionid=xxx.
            5.服务器接受到请求,通过jsessionid的值,找到对应的session对象。就可以获取对象中存储的数据了。
            
            Session技术依赖于cookie。
        
        获取session
            HttpSession session = request.getSession();
        
        域对象:
            setAttribute():
            getAttribute():
            removeAttribute():
        
        session细节:
            1.客户端关闭了,两次session一样吗?
                不一样。因为客户端浏览器内存释放了,jsessionid没了。
              服务器关闭了,两次session一样吗?
                不一样。因为服务器内存释放了,session对象没了。
                    session的钝化:
                        当服务器正常关闭时,会将session对象写入到服务器的硬盘上。
                    session的活化:
                        当服务器正常启动时,会将session文件还原为session对象
        
            2.session对象的销毁
                1.session超时
                    <session-config>
                        <session-timeout>30</session-timeout>
                    </session-config>
                
                2.invalidate():session销毁
                
                3.服务器关闭。
                
            3.session依赖于cookie,如果客户端禁用了cookie,那么session该咋办?
                URL重写。

        
            4.getSession方法的重载:
                boolean:
                    true:默认值
                        通过id查找session,如果没找到,新创建一个
                    false:
                        通过id查找session,如果没找到,返回null
                        第一次创建一个新的对象

 

  代码演示:

 1 package cookie;
 2 
 3 import java.io.IOException;
 4 import java.sql.PreparedStatement;
 5 import java.sql.SQLException;
 6 
 7 import javax.servlet.ServletException;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import javax.servlet.http.HttpSession;
12 
13 public class LoginServlet extends HttpServlet {
14 
15     private static final long serialVersionUID = -4372317815130787297L;
16 
17     public void doGet(HttpServletRequest request, HttpServletResponse response)
18             throws ServletException, IOException {
19         try {
20             //1.获取验证码
21             String checkCode = request.getParameter("checkCode");
22             //2.获取生成的验证码
23             HttpSession session = request.getSession();
24             String checkCode_pro = (String) session.getAttribute("checkCode_pro");
25             
26             //1.设置编码
27             request.setCharacterEncoding("utf-8");
28             //2.获取用户名和密码
29             String username = request.getParameter("username");
30             String password = request.getParameter("password");
31             //3.操作数据库,获取数据库连接
32             //4.定义sql
33             //5.获取pstmt对象
34             PreparedStatement pstmt = JDBCUtils.getConnection().prepareStatement("select * from user where username = ? and userpassword = ?");
35             //6.设置参数
36             pstmt.setString(1, username);
37             pstmt.setString(2, password);
38             //7.执行sql
39             //8.验证,判断
40             //判断验证码是否正确
41             if(checkCode_pro.equalsIgnoreCase(checkCode)){
42                     //正确
43                     //注册 或 登录
44                     session.setAttribute("regist_msg", "验证码正确");
45                     if(pstmt.executeQuery().next()){
46                     //登陆成功
47                     request.setAttribute("username", username);
48                     request.getRequestDispatcher("/success.jsp").forward(request, response);
49                     }else{
50                         //登陆失败
51                         request.setAttribute("msg", "用户名或密码错误!");
52                         request.getRequestDispatcher("/login.jsp").forward(request, response);    
53                     }
54             }else{
55                 //错误
56                 session.setAttribute("regist_msg", "验证码错误");
57                 response.sendRedirect("/colloquy/login.jsp");
58                 //将session中存储的验证码清空
59                 session.removeAttribute("checkCode_pro");    
60             }    
61         } catch (SQLException e) {
62             e.printStackTrace();
63         }
64     }
65 
66     public void doPost(HttpServletRequest request, HttpServletResponse response)
67             throws ServletException, IOException {
68         this.doGet(request, response);
69     }
70 }

 

 

 1 package cookie;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.Cookie;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 public class RemServlet extends HttpServlet {
12 
13     private static final long serialVersionUID = -3477344209817695234L;
14 
15     public void doGet(HttpServletRequest request, HttpServletResponse response)
16             throws ServletException, IOException {
17         //1.获取用户名和密码,复选框
18         String username = request.getParameter("username");
19         String password = request.getParameter("password");
20         //2.判断用户名和密码是否正确
21         if("zhangsan".equals(username) && "123".equals(password)){
22             //登陆成功
23             if(request.getParameter("rem") != null){
24                 //记住密码
25                 //1.创建cookie
26                 Cookie c_username = new Cookie("username", username);
27                 Cookie c_password = new Cookie("password", password);
28                 //2.设置存活时间
29                 c_username.setMaxAge(60 * 60 * 24 * 7);
30                 c_password.setMaxAge(60 * 60 * 24 * 7);
31                 //3.发送cookie
32                 response.addCookie(c_username);
33                 response.addCookie(c_password);
34             }
35             request.setAttribute("username", username);
36             request.getRequestDispatcher("/success.jsp").forward(request, response);
37         }else{
38             //登陆失败
39             request.setAttribute("msg", "用户名或密码错误!");
40             request.getRequestDispatcher("/login.jsp").forward(request, response);
41         }
42     }
43 
44     public void doPost(HttpServletRequest request, HttpServletResponse response)
45             throws ServletException, IOException {
46         this.doGet(request, response);
47     }
48 }

 

 

 1 package cookie;
 2 
 3 import java.awt.Color;
 4 import java.awt.Graphics;
 5 import java.awt.image.BufferedImage;
 6 import java.io.IOException;
 7 import java.util.Random;
 8 
 9 import javax.imageio.ImageIO;
10 import javax.servlet.ServletException;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14 
15 /**
16  * 生成验证码
17  * @author rongsnow
18  *
19  */
20 public class CheckCodeServlet extends HttpServlet {
21 
22     private static final long serialVersionUID = 8583894656985684165L;
23 
24     public void doGet(HttpServletRequest request, HttpServletResponse response)
25             throws ServletException, IOException {
26         
27         int width = 100;
28         int height = 50;
29         //1.创建图片
30         BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
31         //2.装饰图片
32         //2.1设置背景色
33         //2.1.1  获取画笔对象
34         Graphics g = image.getGraphics();
35         //2.2.2 设置画笔的颜色
36         g.setColor(Color.pink);
37         //2.2.3 填充背景色
38         g.fillRect(0, 0, width, height);
39         
40         //2.2 画边框
41         g.setColor(Color.GREEN);
42         g.drawRect(0, 0, width - 1, height - 1);
43         
44         //2.3 写入验证码
45         g.setColor(Color.RED);
46         
47         String msg = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
48         Random ran = new Random();
49         StringBuilder sb = new StringBuilder();
50         for (int i = 1; i <= 4; i++) {
51             int index = ran.nextInt(msg.length());//随机生成角标
52             String s = String.valueOf(msg.charAt(index));
53             sb.append(s);
54             
55             g.drawString(s, width/5 * i, height/2);
56         }
57         String checkCode_pro = sb.toString();
58         //将生成的验证码 存入session
59         request.getSession().setAttribute("checkCode_pro", checkCode_pro);
60         
61         //2.4画干扰线
62         g.setColor(Color.BLUE);
63         
64         for (int i = 0; i < 5; i++) {
65             //动态生成坐标点
66             int x1 = ran.nextInt(width);
67             int x2 = ran.nextInt(width);
68             int y1 = ran.nextInt(height);
69             int y2 = ran.nextInt(height);
70             g.drawLine(x1, y1, x2, y2);
71         }
72         
73         //3.将图片数据 写入到 response输出流中
74         ImageIO.write(image, "jpg", response.getOutputStream());
75     }
76 
77     public void doPost(HttpServletRequest request, HttpServletResponse response)
78             throws ServletException, IOException {
79 
80         this.doGet(request, response);
81     }
82 }

 

 

 1 package cookie;
 2 
 3 import java.io.FileNotFoundException;
 4 import java.io.FileReader;
 5 import java.io.IOException;
 6 import java.sql.Connection;
 7 import java.sql.DriverManager;
 8 import java.sql.ResultSet;
 9 import java.sql.SQLException;
10 import java.sql.Statement;
11 import java.util.Properties;
12 
13 /**
14  * JDBC 工具类
15  * @author rongsnow
16  *
17  */
18 public class JDBCUtils {
19     private static String url = null;
20     private static String user = null;
21     private static String password = null;
22     private static String driverClass = null;
23     
24     static{
25         /*
26          * 加载配置文件,为每一个值赋值
27          */
28         try {
29             //1.创建properties对象
30             Properties pro = new Properties();
31             //获取配置文件的真实路径
32             //2.关联资源文件
33             pro.load(new FileReader(JDBCUtils.class.getClassLoader().getResource("jdbc.properties").getPath()));
34             //3.获取数据
35             url = pro.getProperty("url");
36             user = pro.getProperty("user");
37             password = pro.getProperty("password");
38             driverClass = pro.getProperty("driverClass");
39             //4.注册驱动
40             Class.forName(driverClass);
41             
42         } catch (FileNotFoundException e) {
43             e.printStackTrace();
44         } catch (IOException e) {
45             e.printStackTrace();
46         } catch (ClassNotFoundException e) {
47             e.printStackTrace();
48         }
49     }
50     
51     /**
52      * 获取数据库连接
53      * @throws SQLException 
54      */
55     public static Connection getConnection() throws SQLException{
56         
57         return DriverManager.getConnection(url, user, password);
58     }
59     
60     /**
61      * 释放资源
62      * @throws SQLException 
63      */
64     public static void close(Connection conn,Statement stmt,ResultSet rs) throws SQLException{
65         if(rs != null){//预防空指针异常
66             rs.close();
67         }
68         if(stmt != null){//预防空指针异常
69             stmt.close();
70         }
71         if(conn != null){//预防空指针异常
72             conn.close();
73         }
74     }
75     public static void close(Connection conn,Statement stmt) throws SQLException{
76         if(stmt != null){//预防空指针异常
77             stmt.close();
78         }
79         if(conn != null){//预防空指针异常
80             conn.close();
81         }
82     }
83     public static void close(Connection conn) throws SQLException{
84         if(conn != null){//预防空指针异常
85             conn.close();
86         }
87     }
88 }

 

 

  web.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" 
 3     xmlns="http://java.sun.com/xml/ns/javaee" 
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7   <display-name></display-name>    
 8   
 9     <servlet>
10         <description>This is the description of my J2EE component</description>
11         <display-name>This is the display name of my J2EE component</display-name>
12         <servlet-name>LoginServlet</servlet-name>
13         <servlet-class>cookie.LoginServlet</servlet-class>
14     </servlet>
15     <servlet>
16         <description>This is the description of my J2EE component</description>
17         <display-name>This is the display name of my J2EE component</display-name>
18         <servlet-name>RemServlet</servlet-name>
19         <servlet-class>cookie.RemServlet</servlet-class>
20     </servlet>
21     <servlet>
22         <description>This is the description of my J2EE component</description>
23         <display-name>This is the display name of my J2EE component</display-name>
24           <servlet-name>checkcode</servlet-name>
25           <servlet-class>cookie.CheckCodeServlet</servlet-class>
26       </servlet>
27 
28 
29     <servlet-mapping>
30         <servlet-name>LoginServlet</servlet-name>
31         <url-pattern>/loginServlet</url-pattern>
32     </servlet-mapping>
33     <servlet-mapping>
34         <servlet-name>RemServlet</servlet-name>
35         <url-pattern>/remServlet</url-pattern>
36     </servlet-mapping>
37     <servlet-mapping>
38           <servlet-name>checkcode</servlet-name>
39           <url-pattern>/checkCodeServlet</url-pattern>
40       </servlet-mapping>
41       
42       
43   <welcome-file-list>
44       <welcome-file>index.jsp</welcome-file>
45   </welcome-file-list>
46 </web-app>

 

  jdbc.properties配置文件内容

driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql:///mydb
user=root
password=123

login.jsp
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 
 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 4 <html>
 5     <head>
 6         <title>My JSP 'login.jsp' starting page</title>
 7         <script type="text/javascript">
 8             function changeImg(){
 9                 document.getElementById("img").src = "/colloquy/checkCodeServlet?time="+new Date().getTime();
10             }
11             function changeImg2(obj){
12                 obj.src = "/colloquy/checkCodeServlet?time="+new Date().getTime();
13             }
14         </script>
15     </head>
16     <body>
17         <%
18             //1.获取所有cookie
19             Cookie[] cs = request.getCookies();
20             String username = "";
21             String password = "";
22             //2.遍历cookie数组
23             if(cs != null){
24                 for(Cookie c : cs){
25                     //获取名称
26                     String name = c.getName();
27                     if("username".equals(name)){
28                         username = c.getValue();
29                     }
30                     if("password".equals(name)){
31                         password = c.getValue();
32                     }
33                 }
34             }    
35         %>
36         
37         <form action="/colloquy/loginServlet" method="post">    
38             <table align="center" bgcolor="pink">
39                 <caption>用户登陆</caption>
40                 <tr>
41                     <td>用户名:</td>
42                     <td><input type="text" name="username"></td>
43                 </tr>
44                 <tr>
45                     <td>密码:</td>
46                     <td><input type="password" name="password"></td>
47                 </tr>
48                 <tr>
49                     <td>验证码:</td>
50                     <td><input type="text" name="checkCode"></td>
51                     <td><img src="/colloquy/checkCodeServlet" id="img" onclick="changeImg2(this);"></td>
52                     <td><a href="javascript:void(0);" onclick="changeImg();">看不清?</a><br></td>
53                 <tr>
54                 <tr>
55                     <td>记住密码</td>
56                     <td><input type="checkbox" name="rem"></td>
57                 </tr>
58                 <tr>
59                     <td colspan="2" align="center" ><input type="submit" value="登陆"></td>
60                 </tr>
61             </table>
62         </form>
63         <div align="center" style="color:red;"><%=request.getAttribute("msg")==null ? "" : request.getAttribute("msg") %></div>
64         <div align="center" style="color:#FF0000;"><%=session.getAttribute("regist_msg")==null ? "" : session.getAttribute("regist_msg") %></div>
65     </body>
66 </html>

 

 

success.jsp
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 
 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 4 <html>
 5     <head>
 6             <title>My JSP 'success.jsp' starting page</title>
 7     </head>
 8     <body>
 9         
10         <%=
11             request.getAttribute("username")
12         %>,欢迎您!
13         
14     </body>
15 </html>

 

 所使用的MySQL语句

 1 -- 创建用户信息表 user,并指定主键且自增长
 2 CREATE TABLE USER(
 3     uid        INT PRIMARY KEY AUTO_INCREMENT,
 4     username    VARCHAR(32),
 5     userpassword    VARCHAR(32)    
 6 );
 7 
 8 -- 查询所有列
 9 SELECT * FROM USER;
10 
11 -- 添加数据
12 INSERT INTO USER(username,userpassword) VALUE ('zhangsan','123');
13 INSERT INTO USER(username,userpassword) VALUE ('lisi','1234');
14 INSERT INTO USER(username,userpassword) VALUE ('wangwu','234');
15 INSERT INTO USER(username,userpassword) VALUE ('zhaoliu','1234');
16 INSERT INTO USER(username,userpassword) VALUE ('sisi','234');

 

本文转载自:http://www.cnblogs.com/rongsnow/p/5172246.html

共有 人打赏支持
Jusenr
粉丝 0
博文 20
码字总数 10876
作品 0
西安
Android工程师
JavaWeb Item10: Cookie会话管理

一、会话的概念   会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。   有状态会话:一个同学来过教室,下次再来...

_Roger_ ⋅ 2016/01/26 ⋅ 0

Java程序员从笨鸟到菜鸟之(二十二)华山论session和cookie机制

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用...

长平狐 ⋅ 2012/11/12 ⋅ 1

cookie机制和session机制

一、cookie机制和session机制的区别 * 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。 同时我们也看到,由于才服务器端保持状态的方案...

ArlenXu ⋅ 2015/01/29 ⋅ 0

(JavaEE-06)Session与Cookie

Session和Cookie对象 Session和Cookie主要使用在会话管理中。 会话 什么是会话? 简单来说,用户打开一个浏览器,点击多个链接,访问服务器的多个web资源,然后关闭浏览器,整个过程称之为一...

_-Leon-_ ⋅ 2014/06/27 ⋅ 0

JavaEE 要懂的小事:三、图解Session(会话)

Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter :BYSocket 相继 图解Http协议 和 图解Cookie 之后,中间迷茫期哈,没写了!可是又要告诉...

泥沙砖瓦浆木匠 ⋅ 2015/07/12 ⋅ 27

2014-07-09 Java Web的学习(5)-----会话管理(Cookie和Session)

1.什么是会话 会话,牛津词典对其的解释是进行某活动连续的一段时间。从不同的层面看待会话,它有着类似但不全然相同的含义。比如,在web应用的用户看来,他打开浏览器访问一个电子商务网站,...

查封炉台 ⋅ 2014/07/10 ⋅ 0

web对象page、request、session、application的生命周期

一、 影响范围与生命周期划分 WEB是基于HTTP协议的,HTTP协议是无状态的。无状态是指无法直接通过HTTP连接的相关属性来鉴别用户状态。但实际上的WEB应用通常是需要以用户会话的形式来支撑业务...

wangxiaoyi ⋅ 2012/10/04 ⋅ 0

详解COOKIE和SESSION关系和区别

在技术面试中,经常被问到“说说Cookie和Session的区别”,大家都知道,Session是存储在服务器端的,Cookie是存储在客户端的,然而如果让你更详细地说明,你能说出几点?今天个推君就和大家谈...

个推 ⋅ 2017/06/27 ⋅ 0

Servlet技术 - Cookie与Session

Cookie与Session 会话使用 使用场景 * 偏好记录 * 自动登录 * 浏览记录 原理 * 客户端或者服务端保存用户数据 Cookie与Session Cookie 会话数据保存在浏览器客户端 Session 会话数据保存在服...

抢小孩糖吃 ⋅ 2016/09/03 ⋅ 0

Session与Cookie的区别和联系

具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以s...

hanzhankang ⋅ 2012/10/25 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 15分钟前 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部