JavaWeb学习笔记

2023-10-31

JavaWeb

1、开发环境搭建

new->other->Server ->Server

new-> other->web->Dynamic web Project (动态web项目)

2、Dao回顾

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cLRjaqar-1619269796179)(JavaWeb.assets/image-20210108162229575.png)]

DAO:工具类、异常类、实体类、DAO中的各种方法

Service:业务逻辑,事务,异常(根据业务场景抛出各种异常)

3、HTTP协议 模式:请求–响应 request-response

请求:

响应:

在请求与响应的过程中,浏览器与web服务器之间有一个协议,HTTP协议,hyperText Translate Protocol超文本传出协议

协议://主机:端口/路径?查询字符串

URL:Uniform Resource Location:对服务器上资源的定位

如:http://www.woniuxy.com/studentcourse/1729
结构:协议://主机:端口/路径?查询字符串
如:http://localhost:8080/woniushap/user/reg.jsp?name=tom&age=21
https://www.baidu.com/s?wd=JDBC&rsv_spt=1&rsv_iqid=0xc1f3e10d00001eed&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=5&rsv_sug1=2&rsv_sug7=100&rsv_sug2=0&inputT=1977&rsv_sug4=2736
ftp://ftp.woniuxy.com

请求头:

method:一般分为get/post

get: 参数直接更在URL的查询字符串中,相对post不安全
POST:参数会在请求体中,只有在表单提交通过form的属性method=“post”,就是post方法,其他都是get,在文件上传时,一定是用post 不能使用get

使用上:敏感数据,使用post比较适合,查询功能适合使用get(登陆除外)

referer:来源,适合做:防盗链,登录之后会到原页面

user-Agent:获取客户端信息 (浏览器信息)

可以使用Servlet的处理请求方法获取所有的请求头

Enumeration names = request.getHeaderNames();

while(Names.hasMoreElements()) {

String name = names.nextElement();

System.out.println(name + “:” +request.getHeader(name));

}

响应头:

**Status Code:**状态码,常见状态码:404(资源未找到)500(服务器内部错误)200(服务器正常处理请求)403(无权限)400(请求不正确)

客户端数据存储技术之一

**Cookie:(重点理解)**第一次发请求,请求头没有Cookie包含在请求头中,当响应回来时,会产生一个cookie包含在响应头,(存在本地);当再次发生请求时,请求头包含了从服务器端你返回的cookie

思路:请求–响应–》HTTP

URL:
请求头:method,referer,user-agent
响应头:status:200,404,500,403,400,302
Cookie:

HTTP权威指南,开发者看前面几章
HTTP图解

4、Servlet的基本使用

Server let

Applet Application let

运行在服务器端中的一个Servlet容器(Tomcat)中,有容器负责对Servlet实例化及管理

代码实现上:Servlet必须实现Servlet接口,一般继承HttpServlet类,重写doGet与doPost,分别处理get请求与post请求
配置:1,实现注解WebServlet("/path"); path以/开头,且不能重复,这种方式简单**
2,在web.xml中配置,该文件在3.0开始不是必须的**
作用:
1,获取客户端的请求(用户数据,请求头)
2,服务器端数据有效性校验
3,调用业务逻辑方法
4,根据业务逻辑方法返回的的结果或抛出的异常做出合适的响应

避免类爆炸,将相关操作交由一个Servlet处理,使用一个特定的参数(opr)决定是何种操作

http://localhost:8080/test/index.html

http://localhost:8080/test/category

5,中文乱码

1.1 页面上中文内容乱码:编辑器的编码确保是UTF-8,在页面上使用
1.2 Java连接数据库加入数据时:创建数据库时指定编码,UTF8,UTF8MB4,老版本(8之前)JDBC连接字符串指定编码useUnicode=true&chracterEncoding=UTF8
1.3 页面参数传到Servlet中是乱码
get:在地址栏中提交中文参数,在Tomcat的server.xml中,找到Connector标签,增加URIEncoding=“UTF-8”
post:参数再前求体中传,默认的编码 ISO-8859-1 代码 new String(name.getBytes(),“UTF-8”)
在request上使用setCharacterEncoding(“UTF-8”),这句代码一定要在获取参数(getParameter)之前
最佳实践:使用过滤器(Filter)

6,路径问题

绝对路径:适合访问外部站点
相对路径:不以斜线开头,也不一定协议开头,以…/开头,上一层目录开始定位
站点根路径:以/开头

http://localhost:8080/woniushop/category/css/pintuer.css
http://localhost:8080/css/admin.css

7、超连接,传id

Servlet获取到id,进行查询,将数据展示到修改页面
提交修改页面的数据到Servlet进行数据库操作
完成之后转到列表页

8、文件上传:

客户端,HTML中:
1,使用input type=“file”
2, form的属性method=“post” enctype="multipart/form-data"
Servlet:增加注解@MultipartConfig 可以支持multipart/form-data类型的数据

代码:
   使用request.getPart()得到代表文件的Part对象,调用其writer(filename),把相对路径存数据库
**带数据用request.getRequestDispatcher  不带数据用response.sendRedirect**

请求–响应

小结:发送请求的方式:
地址栏输入地址
表单 action=“url”
a href=“url”
img src=“url”
link href=“url”
script src=“url”

js:location.href=""
form.submit()

9,如何定位Servlet?

​ 通过@WebServlet(urlPatterrns="") 与请求匹配,匹配上交由该Servlet处理
​ 语法上urlpattern可以是多个

分类:
1.1 精确匹配 以/ 请求的url与Servlet配置的urlpattern完全相同 使用最频繁
1.2 路径匹配 以/开头 以/结尾 代表任意长度字符
@WebServlet("/servlet2/
")
@WebServlet("/servlet2/aaa/
")
有一个请求:servlet2/aaa/bbb
最长路径匹配原则
1.3 扩展匹配 以*.shtml
注意:路径匹配与扩展匹配不能一起使用
1.4 默认匹配 / 在容器中有一个叫default的Servlet
优先级:精确匹配 》 路径匹配 》扩展匹配 》默认匹配

10,Servlet生命周期(重点)

LifeCycle:从加载Servlet类到销毁结束

Servlet类必须实现javax.servlet.Servlet接口,通常直接继承javax.servlet.http.HttpServlet

类的层次结构:
Servlet:
GenericServlet:
HttpServlet:
自定义servlet

与生命周期相关的方法:
init(ServletConfig)
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
destroy

结论:

10.1 在第一次处理请求时,Servlet会被实例化,紧接着调用init方法进行初始化,使用service方法处理请求

​ 第二次处理请求时,只会调用service方法
​ destroy:在容器正常关闭或者卸载项目

10.2 在Servlet配置属性loadOnStartup

​ 在容器启动后,将Servlet实例化,调用init方法,
​ 当处理请求时,调用service方法
​ destroy:在容器正常关闭或者卸载项目
​ 注意:Servlet只会有一个实例

自定义servlet通常直接继承javax.servlet.http.HttpServlet,重写doGet,doPost
处理的请求方法是service方法,该方法在HttpServlet中根据请求的方法调用doGet或doPost

ServletRequest是HttpServletRequest接口的父接口
ServletResponse是HttpServletResponse的父接口

模板方法设计模式

11,补充注解

Annotation Java5新增,目前使用非常频繁

主要作用是使用类似注释的方式,无侵入为现有的类,方法,属性,参数增加功能

定义注解:
@Retention:决定注解信息存储在何处,一般是RetentionPolicy.RUNTIME,能被反射获取到
@Target:决定了注解能使用在什么场景

 属性:
     数据类型  属性名()  default 默认值;

如何使用:
   @注解名(属性1=值1,属性2=值2)
   属性有默认值,可以不显示赋值
   属性是数组,值如果是单个,可以直接赋值也可以使用大括号;如果值是多个,必须使用大括号

   属性的名字是value,如果只为属性value赋值,可以省略属性名

扩展:使用反射获取注解的信息

12,@WebServlet配置 使用该注解配置Servlet的信息,包括urlPatterms,name,初始化参数,异步支持

value:与urlPatterns等同
loodOnStartup: servlet会在容器启动后进行实例化和init方法调用
initParams:配置初始化参数,类型是@WebInitParam数组,
asyncSupported:异步支持

@WebInitParam:初始化参数,
name:名字
value:值

13,获取参数:HttpServletRequest接口

​ 用户参数:
​ 文本:
​ getParameter():得到的单个字符串
​ getParameterValues();得到字符串数组,通常获取复选框的值,只有被选中的复选框才会传值到后台
​ 如果一个复选框都没选中,则得到的是空对象
​ 二进制:
​ getPart:
​ getParts:
​ 请求头:
​ getHeader
​ getHeadderNames

13.1HttpServletRequest接口

​ 作用域操作:
​ setAttribute
​ getAttribute
​ getAttributeNames
​ removeAttribute
​ 字符集
​ setCharacterEncoding:设置字符串
​ getCharacterEncoding:或字符串
​ Cookie操作
​ getCookies:获取Cookie
​ 会话操作:
​ getSession;
​ 获取服务端和客户端信息:
​ getRemoteHost
​ //补充 getRequestURI

ServletRequest接口是HttpServletRequest的父接口
在使用中,ServletRequest接口的方法可用,则直接用,不能用,则将其强转为子接口HttpServletRequest

14,做出响应:HttpServletResponse接口

14.1 前台重定向与后台转发:

​ 前台重定向:response.sendRedirect(); 导致响应码为302,还有一个location,浏览器识别302位重新发送请求到新的地址location,地址栏会变化
​ 后台转发:request.getRequestDiapatcher().forward(req,resp); 在服务器端找资源,将其作为响应返回到客户端
​ 存在于reqesut作用域中的数据能在页面被访问到,地址栏不会变化

14.2 数据如何共享,作用域(Scope):数据存储的范围

分类:
页面作用域
请求作用域:request.setAttribute() 往请求作用域中存储数据 它只在一次请求响应中可以共享,绝大部分查询适合使用的作用域 主要存储查询的数据
会话作用域:request.getSession().setAttribute 往会话作用域中存储数据 在访问的时间内会话是活动的,与用户相关的,主要存储用户信息,验证码信息
应用作用域:ServletContext 作用域是全局的,所有的用户任何时间都可以访问的数据,可以存储默认分页大小,在线人数,。。。。

  在页面使用EL获取作用域中的数据:${expression}
       它会从范围小的作用域向大的作用域中找属性
   可以使用pageScope,requestScope,sessionScope,applicationScope限定从某个作用域中查找属性

14.3 响应内容的类型:

​ 文本:
​ 页面
​ 数据,JSON,适合处理Ajax
​ 二进制数据:任务,导出 POI,EasyExcel
​ 响应头

js:JSON:parse stringify
java:fastjson JSON.toJsonString()
统一响应格式:
code, msg,data

HttpServletResponse接口代表响应
addCookie:增加Cookie
addHeader:增加响应头信息
getCharancterEncoding
setCharactterEncoding
getWriter:得到PrintWriter用于将数据写入响应中
sendError
sendRedirect

15,会话跟踪

HTTP协议:无状态的协议
当第一次发送请求时,服务器端(容器Tomcat)产生一个Cookie(叫jsessionid=xxxxx),随着响应(响应头)发送到了客户端
当后面再次发送请求(只要是同一个站点)时,浏览器会在请求头中自动带上第一次响应回来的Cookie,将数据存储到服务器端,称之为Session

HttpSeesion:该接口表示会话,有请求接口的getSession获取实例
方法:
     setAttribute()
 getAttribute()
 removeAttribute()
 invalidate():将session失效,用于退出系统
 
 默认有效时长是30分钟,可以通过设置改变
  web.xml中进行配置,其中的是单位是分钟
  <session-config>
	<session-timeout>5</session-timeout>
</session-config>
任务:将管理员的退出实现

Cookie:存储在客户端上的一段数据,一般存储用户信息,跟用户相关信息
属性:
name:名字
value:值
domain:域
path:路径
expried/max-age:有效时长
操作Cookie:
js:
Java:
Cookie:构造方法传入name和value,setMaxAge设置最大存活时间
addCookie:增加Cookie

     显示:request.getCookies()

     找一个EL内置对象,将Cookie的值获取到

URL重写
隐藏表单域

总结:4种

16,过滤器

Filter,一个实现了Filter接口的类,通过配置能够在请求发送到服务器资源之前处理请求与响应
实现Filter接口,使用@WebFilter进行配置
生命周期:在容器启动后直接加载过滤器,实例化,调用init方法进行初始化

任务1:实现一个设置请求与响应编码的过滤器,对所有的请求都起作用

执行原理:理解过滤器练链执行过程

@WebFilter 属性
value urlPatterns:
filterName:实例化时以该属性的值的字母顺序进行实例化
dispatcherTypes:决定那种请求会经过该过滤器,可选的值:
DispatcherType.REQUEST:默认的,直接访问,路径匹配会经过滤器
DispatcherType.FORWRAD:后台转发到的资源,路径匹配会经过滤器
任务2:实现过滤器,实现对后台功能的保护
先对无需登录即可访问的资源放行
需要登录才能访问,对Session中的属性admin进行判断,如果有,放行,否则返回到登录界面

17,包装器

包装器提供对原始请求与响应对象的包装,在包装器作为请求与响应往后传递
HttpServletRequestWrapper

18,监听器

分类:
容器启动完
会话创建:统计在线人数
会话中属性的变化

  提供了若干接口:
     HttpSessionListener
 //TODO  自行查找还有哪些监听器

 实现监听器,实现对应的接口,重写对应的方法,使用注解@WebListener修饰

ServletContext:Servlet上下文(环境)

getContextPath
getRealPath
setAttribute/getAttribute/removeAttribute
addXXXX:增加Web组件(Servlet,Filter,Listener)
getInitParameter/getInitParameterNames

19,xml配置和注解

WEB-INF:该目录在站点根目录下,该目录下的文件不允许直接访问,通常放置配置文件
其中有两个特殊的目录:classes(存放class文件),lib(存放jar文件,其中的jar文件自动加到项目的buildpath中)
web.xml:位于WEB-INF根目录,也称为部署描述文件(符),其中可以配置任何项目信息

19.1 配置servet

  <servlet>
​		<servlet-name>xxx7</servlet-name>
​		<servlet-class>com.woniuxy.Servlet7</servlet-class>
​		<init-param>
​			<param-name>a</param-name>
​			<param-value>aaa</param-value>
​		</init-param>
​		<init-param>
​			<param-name>b</param-name>
​			<param-value>bbb</param-value>
​		</init-param>
​		<load-on-startup>1</load-on-startup>
​	</servlet>
​	<servlet-mapping>
​		<servlet-name>xxx7</servlet-name>
​		<url-pattern>/yyy7</url-pattern>  如果请求是yyy7他会交给xxx7,然后找到上面的xxx7找到class
​		<url-pattern>/zzz7</url-pattern>
​	</servlet-mapping>

19.2 配置Filter

<filter>
	<filter-name>filter1</filter-name>
	<filter-class>com.woniuxy.MyFilter1</filter-class>
	<init-param>
		<param-name>xx</param-name>
		<param-value>value</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>filter1</filter-name>
	<url-pattern>/*</url-pattern>
	<dispatcher>REQUEST</dispatcher>
	<dispatcher>FORWARD</dispatcher>
</filter-mapping>

19.3 配置监听器

  <listener>
	<listener-class>com.woniuxy.MySessionLisntener</listener-class> 
 </listener>

19.4 会话超时,单位是分钟,默认30分钟

<session-config>
	<session-timeout>5</session-timeout>
</session-config>

19.5 配置全局参数,通过ServletContext中的getInitParanmeter方法

  <context-param>
	<param-name>p1</param-name>
	<param-value>v1</param-value>
</context-param>

19.6 配置欢迎欢迎页面,在访问到某个目录时,无需明确页面地址,自动从上往下会找欢迎页面

<welcome-file-list>
	<welcome-file>index.html</welcome-file>
	<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

19.7 配置统一出错页面

<erorr-page>
	<error-code>404</error-code>
	<location>/404.html</location>
</erorr-page>

区别:
1,XML配置,配置信息很集中,容易维护;注解,维护较分散
2,编写:注解使用方便

 如何选择:自已的组件(Servlet,Filter,Listner使用注解),其他的配置没有选择,只能使用xml
        使用第三方框架,xml是唯一选择

20,JSP执行原理

Java Server Pages
当第一次访问JSP时,容器将JSP翻译为一个Servlet,将Servlet进行编译,加载,实例化,初始化,提供服务,销毁
后续访问,该Servlet直接处理请求

21,语法

​ 1,静态页面内容:HTML标签,css,js,注释
​ 2,JSP指令: <%@ directive attr1=value1 attr2=attr2%>
​ page: 设置翻译过程中的页面属性 language,contentType,pageEncoding
​ taglib: 引入标签库 prefix,uri
​ include:引入其他页面,file
​ 3,Java小脚本:<% java代码 %> 放到翻译后的Servlet的_jspService方法中
​ 4,表达式:在页面输出信息 <%=expression%> 在Servlet中对应out.print(expression);
​ 5,声明:在页面声明变量,方法 <%! int num=10; void print(){} %> 放到翻译后的Servlet类中作为类的成员
​ 6,注释: <%-- JSP注释 --%> 产生的页面是没有该注释
​ 7,表达式语言:${expression}
​ 8, JSP动作(Action), <jsp:include page>引入页面 jsp:param往页面传参数

22,隐式(内置)对象 9个

​ 在JSP中无需显式声明即可使用的对象
request:代表请求
response:代表响应
pageContext:页面作用域
session:会话
application:应用作用域
config:获取配置的参数
out:输出到页面的输出流
page:当前Servlet的实例
exception:代表异常,在页面使用page指令的isErrorPage="true"才有

23,EL,语法

${expression} 将表达式计算的结果输出到页面,会自动从小范围的作用域向大范围的作用域找属性

​ 基本数据类型,引用类型,数组,集合(List,Map)

  内置对象:${cookie}  ${param}, //TODO 自行整理

24,JSTL

标签库:封装起来的实现了特定功能的Java类,使用标签的方式用于页面
JSP Standard Taglib Libary:官方实现的
第三方:SprngMVC,Struts2.。。。

JSTL分类:
(重点)核心标签库:判断,循环
格式化标签库:数据(日期,数字,货币)格式化,国际化
(几乎不用)SQL标签库:页面练接数据库,执行SQL语句
(几乎不用)XML标签库:页面处理XML
函数标签库:提供对字符串,集合等操作

使用:1,使用taglib指令引入标签库,

​ 属性:prefix,前缀,自定义,使用prefix:tagname</prefix:tagname>

2,在页面使用标签

核心标签库:
forEach:用于遍历或循环 属性:items,var,begin end step
if:属性test,必须的,其值为boolean类型,可能会使用el中的比较和逻辑运算符
and or not:逻辑
empty:空判断,判断作用域中是否存在某个属性
eq ne gt lt ge le:比较
choose:
when:
otherwise:
import:
格式化标签库:
formatDate:属性value,pattern

国际化:i18n internationalization 一套系统在不同的国家和语言环境中自动或手动切换显示的格式,文本
文本的国际化:编写几个不同的资源(一般是属性)文件
name

函数:使用上与其他4个不同,用于表达式中进行运算
提供的功能:对字符串的常规操作,对数组的处理

25,MVC vs 分层

MVC:
Model:模型,为系统提供数据操作的 Service,DAO
View:视图,展示给用户的界面,HTML,CSS,JSP
Controller:控制器,接收请求根据模型的数据操作结果控制做出的响应 Servlet
原则:请求一定交给控制器
视图只做界面的展示
模型负责操作数据,数据需要展示到界面则使用控制器进行共享
好处:各司其职,维护性高

注意:分层与MVC是两个完全不同的概念
典型分三层:
数据访问层:封装操作数据库的方法,不涉及业务,不涉及事务
业务逻辑层:体现两个方面:体现业务逻辑(可能调用多个DAO的多个方法),事务的边界
视图层/表示层/展示层:接收请求作出响应

原则:
层之间的调用,上层调用直接下层,不允许跨层调用或下层调用上层
层之间的数据传递,使用实体类传递
下层出异常上层一定要获捕获
尽可能解耦:下层抛出统一自定义异常给上一层,针对接口编程(第三阶段)

好处:从代码的功能上拆分的

实用:Servlet的实现与配置,获取参数,页面的后台转发与前台重定向 EL ,JSTL(核心标签库)
JSON,Ajax(本周重点)

jQurey
Bootstrap

Ajax

事件注册:addEventListener(“Load/click/change”,function(){})

发送Ajax

DOM:访问元素的属性内容

​ 动态创建或删除元素

Ajax:前后端分离开发的实现技术,Asynchronous JavaScript And XML

jQuery

1、jQuery是一个简化的JS开发的库

2、下载jQuery jquery.com

3、页面引入

4、基本使用

​ 入口:$(function(){})

​ 与load事件在执行时机上的区别:

​ load:页面的资源全部加装完成后执行

​ jQuery:页面结构出来之后执行

5、提供的功能

5.1定位元素

$(“selector”):id,class,tag群组,后代,子

使用该方法,获取的元素并不是原生的DOM对象,是一个jQuery对象

​ 操作元素的属性和内容

​ 导航

​ 动态创建/删除元素

​ 事件注册

​ 事件对象

​ 事件传播

​ 事件类型

​ Ajax

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaWeb学习笔记 的相关文章

随机推荐

  • js 数据转换(保留两位小数,去除前面多余的0等)

    保留两位小数 不够的添0补齐 function changeTwoDecimal f x var f x parseFloat x if isNaN f x return 0 var f x Math round x 100 100 var
  • 为什么const 定义的对象和数组可以改变它的值呢

    碰到这个问题我第一反应是肯定不能改变 如果要改变值的话 用const定义干嘛 然后不信邪在浏览器控制台试试结果 卧槽 但是定义一个基本类型 确实改不了 那为什么const 定义的对象和数组可以改变它的值呢 我来为大家解释一下 都知道对象和数
  • Unity3D实战【七】Cinemachine & Post Processing 摄像机跟踪和后处理

    一 摄像机跟随 1 PackManger中安装Cinemachine 2 点击菜单栏的Cinemachine gt Create Virtual Camera 会代替原来的Main Camera 3 调整参数 Body Framing Tr
  • js中根据已知key得到某对象中相对应的value的方法

    给自己打个小广告 有开发APP 小程序 网站 后台系统需求 或者 想学习前端的可以私信我哈 var key accountBingFlag1 var value obj key var key accountBingFlag1 var va
  • 如何用git命令生成Patch和打Patch

    在程序员的日常开发与合作过程中 对于code的生成patch和打patch 应用patch 成为经常需要做的事情 什么是patch 简单来讲 patch中存储的是你对代码的修改 什么是生成patch 生成patch就是记录你对代码的修改并将
  • python-selenium-规避检测,无头浏览器

    1 无头浏览器 取消的浏览器的可视化界面 在一定程度上加了自动化速度 chrome options Options chrome options add argument headless chrome options add argume
  • Eclipse 解决JSON parse error: Invalid UTF-8 总结 完善

    今天在本地测试通过的代码 部署之Tomcat 服务器 前端同事给我反馈如下的错误信息 org springframework http converter HttpMessageNotReadableException message JS
  • 下载的python没有pip_python – 所有依赖项都不会通过“pip download”下载

    我正在尝试使用可以在没有互联网连接的计算机上重新安装的软件包来设置本地目录 但是我遇到了一些软件包的问题 我首先下载包 pip download r requirements txt d my packages no binary all
  • python_元组_1.07

    一 元组 1 定义 python的元组与列表类似 不同之处在于元组的元素一旦定义就不能修改 添加 删除 可以访问 元组使用小括号 列表使用方括号 元组创建很简单 只需要在括号中添加元素 并使用逗号隔开即可 course chinese ma
  • 微信小程序-消息提示框实例

    做Android的时候对toast是很熟悉的 微信小程序开发中toast也是重要的消息提示方式 提示框 wx showToast OBJECT 显示消息提示框 OBJECT参数说明 示例代码 wx showToast title 成功 ic
  • 第5讲:业务扩展模型图

    业务扩展模型图主要是将雨雾流程相关的重要人 事 物及这个业务流程所要达成的目标做一个链接 不过有关业务流程的内部细节 通常不会在这张图中介绍 一 元素 1 1 流程 Process 代表一连串有意义的工作流程 在一个 流程 中通常要达成一个
  • myeclipse出现Could not find the main class原因分析

    昨天晚上像往常一样打开myeclipse 随便运行一个类 run as java application 居然弹出Could not find the main class Program will exit 按照以往的经验 做如下检查 编
  • 【Unity】ShaderToys——将大神们写的shader搬到unity中来吧

    这篇文章翻译自国外的一篇文章 这里是原文链接 正在使用unity的你是否在shader toy上发现很多牛逼哄哄的shader却不知道如何使用 那么这篇文章就是帮助你来进行转换的 本文只是基础文章 那些对HLSL CG GLSL都很熟悉的大
  • 后台权限管理系统(2)——系统基础数据的展示

    目录 1 页面效果展示 2 具体实现 2 1 订单管理模块 2 1 1 订单展示页面 2 1 2 订单详情页面 1 页面效果展示 实现效果如下 订单管理页面 产品管理页面 2 具体实现 2 1 订单管理模块 2 1 1 订单展示页面 点击订
  • opencv imread图像读取不成功

    不论是imread读取相对路径还是绝对路径 如果imread读取不成功 显示Nnoe 很有可能是你的路径名字中含有中文 检查你的路径中是否含有中文 有的话将其改为英文 1 相对路径示例 import cv2 假如图像文件位于当前工作目录下的
  • 对 TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1)函数在PWM应用中的理解

    注意 以下为本人理解 并非权威 仅做参考 虚心接受指正 首先看原函数如下 void TIM SetCompare1 TIM TypeDef TIMx uint16 t Compare1 Check the parameters assert
  • JSONP解决跨域数据访问问题

    介绍 JSONP JSON with Padding 是JSON 的一种 使用模式 可用于解决主流浏览器的跨域数据访问的问题 还是那句话 JSONP虽然用不到 但是要了解 后续要用CORS JSONP实现原理 由于浏览器同源策略的限制 网页
  • 001 linux 导学

    前言 本文建立在您已经安装好linux环境后 本文会向您介绍Shell的一些常用指令 什么是linux Linux是一种自由和开放源代码的类UNIX操作系统 该操作系统的内核由林纳斯托瓦兹在1991年首次发 布 之后 在加上用户空间的应用程
  • Linux中的火墙策略优化

    目录 一 火墙介绍 二 火墙管理工具切换 三 iptables的使用及火墙默认策略 1 默认策略中的5条链 2 默认的3张表 3 iptables命令 4 数据包状态 5 iptables中的NAT 四 firewalld 1 firewa
  • JavaWeb学习笔记

    JavaWeb 1 开发环境搭建 new gt other gt Server gt Server new gt other gt web gt Dynamic web Project 动态web项目 2 Dao回顾 DAO 工具类 异常类