欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java,

来源: javaer 分享于  点击 21790 次 点评:46

Java,


实习旅程(18)

开始我的实习旅程,记录所学到的知识,以及需要掌握的知识。

文章目录

  • 实习旅程(18)
    • 第一章程(09-10)
      • 一、SVN的安装、配置,使用SVN从仓库里导出项目
      • 二、IDEA的安装、配置,将Maven项目导入IDEA。
      • 三、`$(function(){}) `和`$(document).ready(function(){})`。
      • 四、memcache和Redis。
      • 五、跨界面传值(jsp界面之间的传值)和div的隐藏与显示。
      • 六、redraw(重绘)与reflow(回流)。
      • 七、部署前后端分离项目。
      • 八、数据库中的 like concat 查询。
      • 九、Springboot和Springcloud。
        • 1.Springboot的简述
        • 2.Springcloud的简述
        • 3.springboot和springcloud的区别
      • 十、设计模式:单例和代理
        • 1.单例模式(Singleton)
        • 2.代理模式(Proxy)
      • 十一、restful接口用postman或者swagger测试
      • 十二、vue.js
      • 十三、oracle的基本语法和链表查询:左右连接、全连接、内链接
    • 第二章程(11)
      • 一、获取变量或者某个标签、属性的值。
      • 二、js里关于弹窗的删除。
      • 三、json数据。
      • 四、html转换为pdf(wkhtmltopdf)。
        • 1.wkhtmltopdf工具是什么
        • 2.wkhtmltopdf的优点
        • 3.wkhtmltopdf的使用
        • 4.解决分页问题
      • 五、实例问题。
        • 1.js里的返回问题
        • 2.判断后端传过来的数据是否为空
        • 3.下拉框
      • 六、初始页面时加载方法。
      • 七、按回车触发事件。
      • 八、请求之后。
    • 第三章程(12)
      • 一、随机生成加密的Id。
      • 二、获取当前用户。
      • 三、计算一个程序耗时多少。
      • 四、js实现小数点后两位。
      • 五、字符串,集合,数组之间的转换。
      • 六、input输入框的实时更新检验。
      • 七、JQuery的组建弹框。
    • 第四章程(01)
      • 一、双日历插件。
      • 二、适配器:(界面初始加载)。
      • 三、Enter按键。
      • 四、获取当前浏览器的版本号。
    • 第五章程(02-03)
      • 一、Js数组去重。
      • 二、Redis闪退启动问题。
      • 三、Shiro。
      • 四、MySQL。
      • 五、Linux。
      • 六、WebService。

第一章程(09-10)

一、SVN的安装、配置,使用SVN从仓库里导出项目

SVN的官方下载地址:https://www.visualsvn.com/visualsvn/download/tortoisesvn/
详情请参考:SVN的安装与配置

二、IDEA的安装、配置,将Maven项目导入IDEA。

IDEA相对于eclipse来说,运行大的项目,它的速度能够更快一点。要导入Maven项目,只需要导入该maven项目的pom.xml,可以自动给你下载jar包。
IDEA的官方下载地址:https://www.jetbrains.com/idea/download/#section=windows
详情请参考:IDEA的安装与配置

三、$(function(){})$(document).ready(function(){})

1.$(function() {})$(document).ready(function()的简写。
2.$(document).ready(function()可以写在jsp或者html页面的底端,能优先加载,$(function() {})需要写在前端,比如head标签里面,否则会被其他的js代码覆盖。

四、memcache和Redis。

它们都是都是内存数据库,区别之处是存储的数据类型方面以及存储性能。
1.数据类型方面:
memcache可以存储普通数据以外,还可以存储图片、视频;Redis除了褚存简单的k/v类型的数据以外,同时还提供list、set,hash等数据结构的存储。
2.存储性能方面:
memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复。redis相对来说更安全。
参考博客:https://blog.csdn.net/chaoluo001/article/details/70740307

五、跨界面传值(jsp界面之间的传值)和div的隐藏与显示。

jsp页面的传值可用EL表达式: <%=%>${}
1.<%=%>,需要明确指出从哪个对象取值。<%=request.getAttribute("x")%>取request中的x的值,x没有会报错。
2.${}自动从内置对象中查找值。${x}查找x的顺序:当前页面—>request—>session—>application.没找到x就输出空值。
3.div的隐藏与显示:
代码如下:

// An highlighted block
  <div id="123" style="display:none;">
    	<p>显示的内容</p>
  </div>
  <div id="switch" onclick="mySwitch()">点击显示</div>
	<script language="javascript">
		function mySwitch(){
			document.getElementById('123').style.display = 	document.getElementById('123').style.display=='none'?'block':'none';
		}
	</script>

结果:

六、redraw(重绘)与reflow(回流)。

1.redraw(重绘)
当页面元素样式改变时不影响元素在文档流中的位置时(比如background,color等)这时候浏览器只会将新样式赋予元素进行;重新绘制操作。
2.reflow(回流)
当改变的操作响应文档内容或者结构,或者元素的位置时就会触发回流。
详情请参考博客:https://blog.csdn.net/web_yh/article/details/79300987

七、部署前后端分离项目。

1、使用Nginx来访问静态资源。
在本地安装nginx并且修改nginx.conf,修改相关配置,将web访问的端口的资源进行更改,配置如下:

server {
              listen       80;
              server_name  localhost;
              charset utf-8;
              #access_log  logs/host.access.log  main;
              location / {
                    proxy_pass http://tomcat_pool;
                    proxy_redirect off;  
                    proxy_set_header HOST $host;  
                    proxy_set_header X-Real-IP $remote_addr;  
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
                    client_max_body_size 10m;  
                    client_body_buffer_size 128k;  
                    proxy_connect_timeout 90;  
                    proxy_send_timeout 90;  
                    proxy_read_timeout 90;  
                    proxy_buffer_size 4k;  
                    proxy_buffers 4 32k;  
                    proxy_busy_buffers_size 64k;  
                    proxy_temp_file_write_size 64k;  
              }        
              location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|woff|woff2|ttf|eot|map)$  {     
                   root D:\Workspaces\esop-html;
                   index index.html;
              }

listen对象改为你本地的tomcat访问端口,最下面location中的root改为你前端项目中静态资源的位置,这样就可以实现只部署后端的项目就能访问前端的页面了。
2、将前端项目转换为动态的web项目,随后端项目一起丢入tomcat
这个方案省去了在本地安装和配置nginx,但是也只适用于开发阶段项目的部署运行和调试,真正在生产环境通常前后端项目会部署在不同的服务器。
1)如果是Intellij Idea,在导入前端项目之后,右键项目 add framework support --> web application,这时将会把前端项目转换为一个javaweb项目,然后将静态资源放在生成的web目录下即可。
2)如果是eclipse,可以新建一个javaweb项目然后将静态资源放入web或者webcontent目录下,或者直接先导入前端项目,然后通过 project facts 将项目转换为dynamic web项目并勾选 js等相关配置。然后,运行项目时把后端的war包和前端的war包一同添加到 deployment中运行即可。

八、数据库中的 like concat 查询。

MySQL中的Concat:

 Select  *  from   table1  where  ‘text’ like CONCAT(%,(select   name  from  table2  where  id =3),%)

Group_concat: 把查出来的一列结果用逗号连成一个字符串。

九、Springboot和Springcloud。

有关Springboot和Springcloud的详情请参考:https://www.cnblogs.com/dream-to-pku/p/9222731.html
百度网盘视频(需要了解可下载看):
链接:https://pan.baidu.com/s/1fw0hj6-h67XsmS8W7gsfsQ
提取码:j92a

1.Springboot的简述

Springboot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务。
特点:简单易用,初学者和大牛都可以轻松上手,其中的注解会给使用者提供方便;Spring boot对第三方技术进行了很好的封装和整合,提供了大量第三方接口;
可以通过依赖自动配置,不需要XML等配置文件。

2.Springcloud的简述

Springcloud是一种云端分布式架构解决方案,基于spring boot,在spring boot做较少的配置,便可成为 springcloud 中的一个微服务。

3.springboot和springcloud的区别

Spring boot Spring cloud
Spring的一套快速配置脚手架,可以基于Spring Boot快速开发单个微服务 一个基于Spring Boot实现的云应用开发工具
专注于快速、方便集成的单个个体 关注全局的服务治理框架
使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置 很大的一部分是基于Spring Boot来实现
可以离开Spring Cloud独立使用开发项目 Spring Cloud离不开Spring Boot,属于依赖的关系

十、设计模式:单例和代理

1.单例模式(Singleton)

单例模式属于创建模型,是设计模式中比较简单而又最常用的模式之一。通过单例模式可以保证系统中,应用该模式的类只有一个类实例
进一步了解请参考:https://blog.csdn.net/cl534854121/article/details/80518079

public class Singleton {
	private Singleton(){}
	public static Singleton getInstance(){
	    return SingletonInstance.instance;
	}

	private static class SingletonInstance{ 
	    static Singleton instance = new Singleton(); 
	}
}

单例模式的懒汉式和饿汉式:

  • 饿汉式:线程安全,不支持懒加载,第一次加载类到内存中时就会初始化。
/**
- 饿汉式单例模式.
*/
public class Singleton {
   /** 全局唯一实例. */
   private static final Singleton singleton = new Singleton();
   private Singleton() {}
   public static Singleton getSingleton() {
       return singleton;
   }
}
  • 懒汉式:非线程安全,相对饿汉式,懒汉式提供了在需要时候初始化的方式,不建议使用。
/**
- 非线程安全的懒汉式.
*/
public class Singleton {
  private static Singleton singleton;
  private Singleton() {}
  /**
   * 通过懒加载的方式获取实例,但是非线程安全.
   * @return Singleton实例
   */
  public static Singleton getSingleton() {
      if (singleton == null) {
          singleton = new Singleton();
      }
      return singleton;
  }
}

开发的时候一般用第一种模式,饿汉式,因为在涉及到多线程的问题式,懒汉式会导致一系列的安全隐患,但是懒汉式是单例模式中的重要考察点。

2.代理模式(Proxy)

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。有中介隔离作用,能开闭原则,增加功能。
进一步了解可参考:https://www.cnblogs.com/daniels/p/8242592.html
例如:给项目加入缓存、日志这些功能,我们就可以使用代理类来完成,而没必要打开已经封装好的委托类。

  • 静态代理
    第一步:创建服务类接口
/**
 * 接口
 */
public interface IUserDao {
  void save();
}

第二步:实现服务接口

/**
* 接口实现
* 目标对象
*/
public class UserDao implements IUserDao {
  public void save() {
      System.out.println("----已经保存数据!----");
  }
}

第三步:创建代理类

/**
* 代理对象,静态代理
*/
public class UserDaoProxy implements IUserDao{
 //接收保存目标对象
 private IUserDao target;
 public UserDaoProxy(IUserDao target){
     this.target=target;
 }

 public void save() {
     System.out.println("开始事务...");
     target.save();//执行目标对象的方法
     System.out.println("提交事务...");
 }
}

第四步:编写测试类

/**
* 测试类
*/
public class App {
 public static void main(String[] args) {
     //目标对象
     UserDao target = new UserDao();

     //代理对象,把目标对象传给代理对象,建立代理关系
     UserDaoProxy proxy = new UserDaoProxy(target);

     proxy.save();//执行的是代理的方法
 }
}

优点:可以做到在不修改目标对象功能的前提下对目标对象进行功能扩展。
缺点:代理对象需要与目标对象实现一样的接口,所以会有很多代理类 ,一旦接口增加方法,目标对象与代理对象都要维护。(解决:采用动态代理)

  • 动态代理
    1)不再需要再手动的创建代理类,只需要编写一个动态处理器就可以了。
    2)利用JDK的API,动态的在内存中构建代理对象,,不需要实现接口,也成为JDK代理或者接口代理。
    static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h )
    该方法是在Proxy类中是静态方法,且接收的三个参数依次为:
    ClassLoader loader:指定当前目标对象使用类加载器,获取加载器的方法是固定的。
    Class<?>[] interfaces:目标对象实现的接口的类型,使用泛型方式确认类型。
    InvocationHandler h:事件处理,执行目标对象的方法时,会触发事件处理器的方法,会把当前执行目标对象的方法作为参数传入。

    3)代理对象不需要实现接口,但是目标对象一定要实现接口,否则不能用动态代理。

  • 第一步:编写动态处理器

/**
 * 创建动态代理对象
 * 动态代理不需要实现接口,但是需要指定接口类型
 */
public class ProxyFactory{

    //维护一个目标对象
    private Object target;
    public ProxyFactory(Object target){
        this.target=target;
    }

   //给目标对象生成代理对象
    public Object getProxyInstance(){
        return Proxy.newProxyInstance(
                target.getClass().getClassLoader(),
                target.getClass().getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("开始事务2");
                        //执行目标对象方法
                        Object returnValue = method.invoke(target, args);
                        System.out.println("提交事务2");
                        return returnValue;
                    }
                }
        );
    }

}
  • 第二步:编写测试类
/**
* 测试类
*/
public class App {
   public static void main(String[] args) {
       // 目标对象
       IUserDao target = new UserDao();
       // 【原始的类型 class cn.itcast.b_dynamic.UserDao】
       System.out.println(target.getClass());

       // 给目标对象,创建代理对象
       IUserDao proxy = (IUserDao) new ProxyFactory(target).getProxyInstance();
       // class $Proxy0   内存中动态生成的代理对象
       System.out.println(proxy.getClass());

       // 执行方法   【代理对象】
       proxy.save();
   }
}

十一、restful接口用postman或者swagger测试

十二、vue.js

十三、oracle的基本语法和链表查询:左右连接、全连接、内链接

第二章程(11)

一、获取变量或者某个标签、属性的值。

methods show
用session取数据 session.getAttribute("变量名");
EL表达式 <%=%>${}
获取id $("#name").val()
获取class $(".name").val()
获取标签属性 $("#id").find("标签名").html() 或者document.getElementById("id").className
全局变量 var 全局变量名

二、js里关于弹窗的删除。

 var id =$("#id").val();
 _confirm("小提示","是否删除","确定|取消",{'ok':function(){
            if(true){
                $.ajax({
                    url:'${baseURL}',
                    type:'post',
                    data: {"data.id":id},//data.id 为后端data对象的id
                    dataType:'json',
                    success:function(result){
                        if('0'==result.code){
                            method();
                        }
                    }
                });
            }
        },'fail':function(){}});

三、json数据。

json数据的传输:

  net.sf.json.JSONobject=net.sf.json.JSONobject.fromObject("");

四、html转换为pdf(wkhtmltopdf)。

1.wkhtmltopdf工具是什么

wkhtmltopdf:是一个使用 Qt WebKit 引擎做渲染的,能够把html 文档转换成 pdf 文档图片(image)命令行工具
安装准备

  • 官网 : https://wkhtmltopdf.org/
  • 下载地址:https://wkhtmltopdf.org/downloads.html
  • 如想对该工具的进一步了解请参考:https://www.jianshu.com/p/559c594678b6

安装之后

  • 配置环境变量,把你安装wkhtmltopdf目录下的bin子目录加到 PATH 环境变量下。
  • 执行wkhtmltopdf -V出现类似wkhtmltopdf 0.12.3.2 (with patched qt)的版本信息,就是安装成功了。
  • 重启电脑才能在命令行里使用。

2.wkhtmltopdf的优点

1). 生成PDF时会自动根据你在HTML页面中H标签生成树形目录结构
2).小巧方便,转换速度快。
3). 夸平台,在Liunx下用,在win下也可以用。

3.wkhtmltopdf的使用

1)把一个html文件转换成PDF
命令格式 :wkhtmltopdf xxx.html xxx.pdf

C:\Users\admin>wkhtmltopdf 1.html 1.pdf
Loading pages (1/6)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done

当你看到类似上面的内容时,说转换已经完成了,转换好的pdf文档在C:\Users\admin>目录下。

2)把一个 url 指向的网页转换成PDF
命令格式 : wkhtmltopdf url xxx.pdf

C:\Users\admin>wkhtmltopdf www.wmyao.com wmyao.pdf
Loading pages (1/6)
QFont::setPixelSize: Pixel size <= 0 (0)                     ] 55%
Counting pages (2/6)
QFont::setPixelSize: Pixel size <= 0 (0)=====================] Object 1 of 1
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done

3)把html文件 和 url指向的网页 转换成图片
命令格式 :
wkhtmltoimage xxx.html xxx.jpg
wkhtmltoimage url xxx.jpg
可以转换成任意的图片格式。

4.解决分页问题

div{ width:800px; min-height:1362px;margin:auto;page-break-inside:avoid;}
注:html的table中不能用thead,用了后换页会出现两个表头
在HTML页面中,想要分页的div的样式最后添加一个:page-break-inside:avoid;

五、实例问题。

1.js里的返回问题

<a href="javascript:history.back();" class="btn twoBtn">返回</a>

2.判断后端传过来的数据是否为空

jQuery.isEmptyObject(data);

3.下拉框

下拉框的联动实现,参考:https://blog.csdn.net/vicoll/article/details/78015360
下拉框的基本用法,参考:https://zhidao.baidu.com/question/1691278356311298508.html
通过js加载下拉框的选择数据

 <select id="account" name="ctripAccount" style="height: 35px;   vertical-align: middle; line-height: 40px;">
 	<option value="">选择账号</option>
 </select> 
     
 <%--通过js加载下拉框数据 --%>             
 <script type="text/javascript">                   
 var list = result.data.list;
     if(list && 0 < list.length) {
         for (var i = 0; i < list.length; i++) {
              $('#account').append("<option value='" + list[i].corpId + "'>"+ list[i].corpId +"</option>");
          }
     }
 </script>

六、初始页面时加载方法。

1.$(window).load(function(){}) 一般放在页面的开始
2.onload="method()" 可用于某个标签里
3.$(document).ready(function(){}) 一般放在页面的最下方

七、按回车触发事件。

 var event = arguments.callee.caller.arguments[0] || window.event;
            if(event.keyCode == 13){//判断是否按了回车,enter的keycode代码是13。
                loadPager(1);
            }

八、请求之后。

1.刷新页面: location.reload(true);
2.请求成功后有确认信息:

success:function(result) {
          _alert("成功","提交成功",{
           'ok':function(){
             document.location.href = url;
                    },
                });
            }

url:为成功之后跳转的页面。

第三章程(12)

一、随机生成加密的Id。

String id= UUID.randomUUID().toString().replace("-", "").toLowerCase();

二、获取当前用户。

1.action请求:

HttpServletRequest request = ServletActionContext.getRequest();
		UserInfoVO userInfo = WxqyhAppContext.getCurrentUser(request);
		if (userInfo == null) {
			setActionResult("1001",ErrorTip.USER_ID_NULL.toString());
			return ;
		}

2.jsp:

<%
	UserInfoVO userInfo = WxqyhAppContext.getCurrentUser(request);
	String userName = "";
	if(userInfo != null){
		userName = userInfo.getPersonName();
	}
%>

三、计算一个程序耗时多少。

第一种:以毫秒为单位计算的。

//下面是一些测试代码
long startTime=System.currentTimeMillis();
for(int i=0;i<10000;i++){
	System.out.println("当前是:"+i);
}
long endTime=System.currentTimeMillis();
System.out.println("当前程序耗时:"+(endTime-startTime)+"ms");

第二种:以纳秒为单位计算的。

//下面是测试代码
long startTime=System.nanoTime();
for(int i=0;i<10000;i++){
	System.out.println("当前是:"+i);
}
long endTime=System.nanoTime();
System.out.println("当前程序耗时:"+(endTime-startTime)+"ns");

第一种测试程序是一般精确时间,第二种为高精确时间。

时间换算:

1小时=60分钟

1分钟=60秒

1秒=1000毫秒

1毫秒=1000微秒

1微秒=1000纳秒

1纳秒=1000皮秒

四、js实现小数点后两位。

1.toFixed保留两位小数

var num1 = 55.3715; 
console.log(num1.toFixed(2));//保留两位小数

var num2 = 55.3755; 
console.log(num2.toFixed(2));//可四舍五入为55.38

var num3 = 55.3; 
console.log(num3.toFixed(2));//可自动补位为55.30

var num5 = 55; 
console.log(num5.toFixed(2));//将整数自动补位为两位小数55.00

2.substr直接按字符串截取

var num1 = 55.3785 + ""; 
console.log("substr方式保留两位小数:"+num1.substr(0,num1.indexOf(".")+3));
//直接按位截取,没有四舍五入,没有补位,结果为55.37

3.浮点数四舍五入和补位

var num1 = parseFloat(55.7856); 
var num2 = parseFloat(55); 
  if (!isNaN(num1)) { 
	  num1 = Math.round(num1*100)/100; 
	  console.log("将浮点数四舍五入,取小数点后2位:"+num1);
	  //结果为55.79
	 var rs = str.indexOf('.'); 
	   if (rs < 0) { 
		    rs = str.length; 
		    str += '.'; 
	    } 
	   while (str.length <= rs + 2) { 
	    	str += '0'; 
	   } 
   }
   console.log("将浮点数四舍五入,取小数点后2位,位数不够进行补位:"+str);
   //结果为55.00

五、字符串,集合,数组之间的转换。

详情可参考:https://blog.csdn.net/ymaini/article/details/80720067

六、input输入框的实时更新检验。

以重命名文件为例:

<input type="text" id="foldername" placeholder="请输入文件夹名" value="'+name+'" style="margin:8px 0;width:100%;padding:11px 8px;font-size:15px; border:1px solid #999;"/>
//specialCheck 输入框里还有提示时为false
var changeTimeOut;
        $("#foldername").off('keyup').on('keyup', function(){
            clearTimeout(changeTimeOut);
            changeTimeOut = setTimeout(function () {
                if(include($("#foldername").val())){
                    if(0 == $("#specialStr").length) {
                        $("#foldername").after('<span id="specialStr" >您输入的格式有误,文件名不能包含特殊字符:? \\ * | " < > : /,请重新输入!</span>')
                    }else{
                        $("#specialStr").show();
                        specialCheck = false;
                    }
                }else{
                    $("#specialStr").hide();
                    specialCheck = true;
                }
            }, 300);
        });

七、JQuery的组建弹框。

组建弹框预览: ftp://wmyao.cn/www/JQuery/dialog/index.html
组建弹框下载地址:(JQuery库也有)dist文件夹+index.html文件
ftp://wmyao.cn/www/JQuery/dialog

第四章程(01)

一、双日历插件。

基于jQuery: http://www.jq22.com/jquery-info3814
基于Bootstrap: http://www.jq22.com/jquery-info1087

二、适配器:(界面初始加载)。

界面初始加载适配器:比如某个功能为本人时才能显示,好比csdn文章的编辑功能。编辑按钮的显示如下:定义原来的样式为不可见,hide或者display为none;

window.onresize = function(){
        mobilStyleAdapter();
    }
 var fth = $(".qw-folder-top").height();//某个地方的高度
 function mobilStyleAdapter(){
       var code=getParam("appCode");//获取URL中某个参数的值
       if(code=="personalTicket"){//满足条件的时候显示目标(好比是csdn为本人查看博客时,应有编辑按钮显示)
          if(450 > $("body").width()){//当屏幕宽满足条件(手机端和pc)
            $("#renameFile").css({"display": "block", "margin": "10px 0"});//目标的id,即编辑按钮的id
             $(".qw-folder-top").css({"height": (fth + 28)});//目标的样式,即编辑按钮的样式
           }else{
              $("#renameFile").css({"display": "inline", "marginTop": "0"});
              $(".qw-folder-top").css({"height": "inherit"});
          }
      }
  }

三、Enter按键。

$('#id').keydown(function(e){//id为某个输入框的id
			if(e.keyCode==13){//判断是否按下enter键
				enterSearch();//执行按下enter键后执行的方法
			}
		});

四、获取当前浏览器的版本号。

1.js中获取浏览器的版本号

// js中获取浏览器的版本号
 var appVersion = navigator.appVersion; //浏览器的版本号
            var lang = appVersion.substr(appVersion.lastIndexOf("/") + 1, appVersion.length);
            console.log("浏览器的语言版本 (Language version of browser):"+lang);
            if (lang == "en"){
                window.location.replace('${baseURL}/jsp/wap/sap/list_en.jsp?type=${param.type}&corp_id=${param.corp_id}');
            }else{
                window.location.replace('${baseURL}/jsp/wap/sap/list.jsp?type=${param.type}&corp_id=${param.corp_id}');//中文编码时打开链接
            }

2.action后台获取浏览器的版本

//action后台获取浏览器的版本
 public void getAcceptLanguage() {
        HttpServletRequest request = ServletActionContext.getRequest();
        addJsonObj("acceptLanguage", request.getHeader("accept-language"));
    }

第五章程(02-03)

一、Js数组去重。

参考链接:https://www.jb51.net/article/118657.htm

二、Redis闪退启动问题。

参考链接:https://blog.csdn.net/qq_38317491/article/details/79685309

三、Shiro。

1、Shiro与Spring Security比较

Apache Shiro Spring Security
简单、灵活 复杂、笨重
可脱离Spring 不可脱离Spring
粒度较粗 粒度更细

2、Shiro认证

构建SecurityManager环境:
DefaultSecurityManager defaultSecurityManager=new DefaultSecurityManager ();
defaultSecurityManager.setRealm()
3、Shiro授权

四、MySQL。

SQL:Structured Query Language结构化查询语言,一种特殊编程语言
1.数据库分类(运行环境):
网络数据库:把数据技术引入到计算机网络系统中,借助成熟的网络技术
层级数据库:一个有根节点的定向有序树
关系数据库:建立在关系模型基础上的数据库,集合代数等数学概念和方法处理数据

2.数据库的另外一种区分:存储介质(磁盘和内存)
关系型数据库:存储在磁盘中
非关系型数据库:内存

3.关系模型:
关系数据结构:以二维表的形式存储
关系操作集合:关联、管理存储的数据,SQL指令
关系完整性约束:数据内部的关联关系,数据与数据之间的关联关系

4、典型关系型数据库
小型关系型数据库:Microsoft Access,SQLite
中型:Microsoft SQL Server,Mysql------开源,免费
大型:Oracle,DB2------IDM提出,使用

Mysql与Oracle一个公司:隶属于Oracle。

5.查看系统变量:select @@autocommit;

6.修改系统变量:
会话修改变量:set autocommit=0;
全局修改变量:set global autocommit=0;
set @@global.autocommit=2;
(只针对新连接的客户生效)

五、Linux。

1.Linux操作系统分为内核版和发行版。
2.toolbar.netcraft.com----看网站后台的服务器,操作系统
3.linux系统主要分debian系和redhat系,还有其它自由的发布版本。
debian系主要有Debian,Ubuntu,Mint等及其衍生版本;
redhat系主要有RedHat,Fedora,CentOs等,
其它有Slackware,Gentoo,Arch linux,LFS,SUSE等。
如果开发用,推荐redhat系,业内公司的服务器多用centos,
平时使用,就选择fedora,可以选择最新的发行版。
如果简单用加开发,可以选择debian系,推ubuntu,mint。
如果是技术狂型,那么就推荐Gentoo,Arch linux,LFS,Slackware等。
不过视频讲课用的都是centos

4.Linux严格区分大小写
Linux中的内容以文件形式保存,包括硬件(一切内容皆文件)
Linux中没有扩展名:
压缩包:.gz .bz2 .tar.bz2 .tgz
二进制压缩包:.rpm
网页文件:.html .php
脚本文件:.sh
配置文件:.conf

5.Windows下的程序不能直接在Linux中安装和运行

6.字符界面:占用系统资源少,操作系统更稳定

7.http://www.vmware.com
建议的配置(虚拟机最低配置:CPU 1GHz,内存:1GB,硬盘:8GB)

安装完虚拟机,需要安装centos,虚拟机的内存最少628M

真实机需要在2GB以上

8.快照:记录虚拟机当前的状态,将虚拟机玩坏了以后,可以恢复到快照状态

9.给虚拟机分配的内存,不能超过真机内存的一半

10.Windows:分区、格式化、给盘符,就可以进行使用了

Windows分完区以后,就可以通过自带的图形界面,直观的看到分区的结果,格式化、分配盘符。而Linux中刚开始没有图形界面,这个时候需要给分区分配盘符,没有这样的图形界面,无法确定给哪一个分配,因此需要事先给每分区起一个文件名,才可以给盘符,才能使用

Linux:分区、格式化、给每一个分区起一个设备文件名、分配盘符

11.逻辑分区从5开始(即使没有3、4)

主分区1、2、3、4

12.swap:虚拟内存。当真实内存不够用时,可以拿swap分区中的硬盘空间当内存来使用

真实机内存<=4GB,swap分区的大小为内存的2倍

真实机内存>4GB,swap分区和内存一样大即可

13.在linux中没有盘符的说法,应该叫挂载点

14.分区:把大硬盘分为小的逻辑分区:主分区,扩展分区,逻辑分区
格式化:写入文件系统
分区设备文件名:给每个分区定义设备文件名
挂载:给每个分区分配挂载点

六、WebService。

WebService:一种跨编程语言和跨操作系统平台的远程调用技术,不同系统之前的交互和数据传递。
WebService规范:JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS
三要素
http://www.webxml.com.cn/zh_cn/index.aspx

相关文章

    暂无相关文章
相关栏目:

用户点评