web开发小知识
session共享机制:f5刷新是再次提交之前的数据请求 地址栏回车属于不同的请求 不同浏览器获取不到之前数据 同一浏览器可以获取同步数据 session注销:session.invalidate();//全部session失效
session.removeAttribute(xxx);//失效某个session cookie:不是内置对象 需要new 但服务端会仅仅自动new一个名字为jssionid的cookie
getNmae()获取cookie对象的名字
getValue()获取cookie对象的值
request.getCookies()获取cookie对象数组 获取浏览器Jessionid:request.getCookies()[0].getValue() 和session.getId()值一样的 application.getContextPath() 当前项目的虚拟路径
application.getRealPath(application.getContextPath()) 当前项目的绝对路径 解决post请求乱码:request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8"); 四种范围对象:均有set、getAttribute的方法
pagecontext 当前页面有效
request 同一个请求有效 请求转发可共享数据,重定向(二次请求)数据拿不到
session 换浏览器、关闭浏览器无效
application 整个项目运行期间均有效包括换浏览器/关闭浏览器或其他项目访问也会无效
····JNDI技术可实现关闭浏览器或其他项目访问也会有效···· JDBC:drivermanager-jdbd驱动
connection-连接
statement connection.createstatement()
preparedstatement connection.preparestatement())
resultset 返回结果集
callablestatement 调用存储过程和函数 connection.preparecall(过程、函数名字)
过程无返回值用out代替 存储函数有返回值return
例子:xxx=connection.preparecall("{call 过程名(?,?,?)}")
xxx.setInt(1,xx)
xxx.setInt(2,xx)
xxx.execute()
xxx.registeroutparameter(3,Types.INTEGER)//设置返回值类型
int result=xxx.get(3) orecle大文本BLOB、CLOB(稍微大点的数据也可存储路径后io操作,缺点受路径影响)缺点笨重、 影响数据库内存 xxx.setBinarystream(2,inputstream);||先建inputstream后放入reader对象 xxx.setCharacterstream(2,reader);
mysql是TEXT javabean定义:1、public修饰的类,public无参构造2、属性为private,并且提供get、set方法。
封装数据,提高代码复用率 servlet2.5使用需要在web.xml中配置路由
servlet3.0不需要配置,但在控制层的类前面加入注解@WebServlet("url地址")
2.5web.xml中通过load-on-startup设置数字来确定谁先执行初始化
3.0中在@WebServlet(load-on-startup=xx) url书写区别:<a href="a/add">请求会去src、webcontent中先找是否有a
web.xml中的/ 代表项目根路径
jsp中的/ 代表域名+端口号部分 servlet生命周期:
加载(无需干预,自动)--初始化init方法(执行一次)--服务(service抽象方法)--销毁 destroy方法--卸载(无需干预,自动) web.xml中设置:
在整个web容器中设置的参数
<context-param>
<param-name>xxx</param-name>
<param-value>xxxx</param-value>
</context-param>
参数获得方式:在servlet中用ServletContext servletContext=super.getServletContext();
String string=servletContext.getInitParameter("参数名字");
System.out.println(string); 在当前servlet中设置的参数方式:
<servlet>
<servlet-name>XXX</servlet-name>
<servlet-class>
XXXX
</servlet-class>
<init-param>
<param-name>XXXXX</param-name>
<param-value>XXXXXXX</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
参数获得方式:在servlet中用string a=super.getInitParameter("参数名字"); 接口的空实现好处:
不用 实现类---接口 用类继承---空实现类---接口
可以把接口中不用的方法不实现 servlet中获取out、session、application的方法
Session session=(Session) request.getSession();
PrintWriter pWriter=response.getWriter();
application: ServletContext s=(ServletContext) request.getServletContext(); 获取请求数据存入数据库时,查看数据库存入的数据乱码问题:jdbc:mysql://localhost/article? useUnicode=true&characterEncoding=UTF-8 jsp---java----class文件:在Tomcat的work文件夹中 mysql实现分页:
mysql从第0页开始,oracle、sqlserver从第1开始
从第0页开始 假设每页10个数据:select * from stu limit 0,10;
通用格式:select * from table limit (当前页-1)*pageSize,pageSize;
oracle分页、:select * from stu where sno>=(n-1)*10+1 and sno<=n*10;前提是数据是id连续的
伪列不能大于等于 解决办法 查询结果嵌套
办法:使用伪列select s.* from stu s order by sno asc;先排序
然后:select rownum ,t* from(select s.* from stu s order by sno asc)t
where rownum>=(n-1)*10+1 and rownum <=n*10;
最后:select * from(
select rownum r,t* from(select s.* from stu s order by sno asc)t
where rownum>=(n-1)*10+1 and rownum <=n*10;)t
)where r>=(n-1)*10+1 and r<=n*10;
优化性能:select * from(
select rownum r,t* from(select s.* from stu s order by sno asc)t
where rownum <=n*10
)where r>=(n-1)*10+1 ; sqlserver2005+分页:rownum不能直接用,需要制定列为伪列:select * from(
select row_num() over(sno order by sno asc) as r,* from stu where r<=n*10
)where r>=(n-1)*10+1 ; sqlserver2003分页:top关键字 select top 3 * from stu;查询第一页数据 假如每页3条 sqlserver2012+分页:offset fetch next only
select * from stu order by sno offset (页数-1)*页面大小+1 rows fetch next 页面大小 rows only 分页实现:需要5个变量(数据总量 select count(*)from stu;
、每页条数页面大小 用户定义
、总页数、 程序自动计算sum%xx==0?sum/xx:sum/xx+1
当前页页码、 用户定义
当前页的对象集合) list的查询集合 获取所有表单数据的方法:
var data = $("form").serialize(); return&return
在try中return,在finally执行前会把结果保存起来,即使在finally中有修改也以try中保存的值 为准,但如果是 引用类型,修改的属性会以finally修改后的为准;
3、如果try/finally 都有return,直接返回finally中的 return. +/concat
+可以是字符串或者数字及其他基本类型数据,而concat只能接收字符串。 +左右可以为null, concat为会空指针。 如果拼接空字符串,concat会稍快,在速度上两者可以忽略不计,如果 拼接更多字符串建议用StringBuilder。 从 字节码来看+号编译后就是使用了 StringBuiler来拼接,所以一行+++的语句就会创建一个StringBuilder,多条+++ 语句就 会创建多个,所以为什么建议用StringBuilder的原因。 序列化
如果某个字段不想序列化,在该字段前加上transient关键字即可。 一个基于JSON的API的response应该包含以下header
Content-Type:application/json; charset=utf-8 设置自动刷新
Response.setHeader("Refresh","1000;URL=http://localhost:8080/servlet/example.htm"); 如何实现JSP或Servlet的单线程模式?
对于JSP页面,可以通过page指令进行设置。
<%@page isThreadSafe=”false”%>
对于Servlet,可以让自定义的Servlet实现SingleThreadModel标识接口。
说明:如果将JSP或Servlet设置成单线程工作模式,会导致每个请求创建一个Servlet实例,这种实践将导致严重的性能问题(服务器的内存压力很大,还会导致频繁的垃圾回收),所以通常情况下并不会这么做。
web开发小知识的更多相关文章
- 移动端 Web 开发前端知识整理
文章来源: http://www.restran.net/2015/05/14/mobile-web-front-end-collections/ 最近整理的移动端 Web 开发前端知识,不定期更新. ...
- 移动Web开发小技巧
移动Web开发小技巧 添加到主屏后的标题(IOS) name="apple-mobile-web-app-title" content="标题"> 启用 ...
- React Native环境配置、初始化项目、打包安装到手机,以及开发小知识
1.前言 环境:Win10 + Android 已经在Windows电脑上安装好 Node(v14+).Git.Yarn. JDK(v11) javac -version javac 11.0.15. ...
- WEB开发基本知识
参考文献:http://www.cnblogs.com/xdp-gacl/p/3729033.html 一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示I ...
- java web开发必备知识
从各种招聘网站的要求上筛选出了一些java开发的一些基本的要求,对照自身看看有哪些缺陷. java基础 既然是java web开发,java SE肯定要学好了. 多线程,IO,集合等,对队列,缓存,消 ...
- Web开发基础知识
综述 最近开始Java Web方面的工作,千里之行始于足下,我们在开发过程中要善于总结自己遇到的问题.善于管理一些优秀的代码片段.本文的主要内容是Web开发的基础知识,对于大牛来说可以忽略,对于初入W ...
- 3.web开发入门知识
/*web入门*/ /*互联网上常用的协议以及它的端口*/ http 80 http://localhost/ 相当于 http://localhost:80/ http协 ...
- 移动web开发(一)——移动web开发必备知识
参考: 移动终端开发必备知识.http://isux.tencent.com/mobile-development-essential-knowledge.html
- Web开发小妙招:巧用ThreadLocal规避层层传值
摘要:我们可以在处理每次请求的过程中,无需从Controller以及Service中的方法层层传值,只需要直接通过该局部变量取值即可. 本文分享自华为云社区<拦截器中巧用ThreadLocal规 ...
随机推荐
- (67) c# 序列化
二进制序列化器 xml序列化器 数据契约序列化器
- 《单词的减法》state1~state17(200p)
单词的减法 2016.05.18 state 1 absent accessible accordingly accuracy/accurate acquaint/acquaintance adequ ...
- java自学基础、项目实战网站推荐
推荐一个自学的好平台,有Java前端,后端,基础的内容都有讲解,还有框架的讲解和实战项目,特别适合自学 JAVA 自学网站 JAVA 练习题 Mybatis 教程 Spring MVC 教程 模仿天猫 ...
- Cocos2d 之FlyBird开发---GameUnit类
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 这节来实现GameUnit类中的一些函数方法,其实这个类一般是一个边写边完善的过程,因为一般很难一次性想全所有的能够供多个类共用的方法.下 ...
- 博弈的dfs
题目: 链接:https://ac.nowcoder.com/acm/contest/283/D来源:牛客网 小西买了一堆肥宅快乐水和肥宅快乐茶,准备和室友比谁更肥宅. 快乐水有A瓶,快乐茶B瓶. 小 ...
- 【目录】linux 编程
随笔分类 - linux 编程 Linux编程 24 shell编程(结构化 if [ condition ] 数值比较,字符串比较) 摘要: 一.概述 接着上篇讲的结构化命令,最后讲到了test命令 ...
- 用户积分排行榜功能-Redis实现
一.排行榜功能简介 排行榜功能是一个很普遍的需求.使用 Redis 中有序集合(SortedSet)的特性来实现排行榜是又好又快的选择. 一般排行榜都是有实效性的,比如交通数据流中的路口/路段的车流量 ...
- Nginx的应用之虚拟主机
开始前请确保selinux关闭,否则当配置完虚拟主机后,尽管权限或者网站目录都正确,访问的结果也是403 nginx的虚拟主机有三种方式: 一.基于域名的虚拟主机 (1)创建对应的web站点目录以及程 ...
- webpack学习(一)起步安装
起步 webpack 用于编译 JavaScript 模块.一旦完成安装,你就可以通过 webpack 的 CLI 或 API 与其配合交互.如果你还不熟悉 webpack,请阅读核心概念和打包器 ...
- Android 编译笔记20191205
gradle下载很慢 解决问题的方法如下: 使用文件管理器 打开用户主目录 windows平台: c:\Users\用户名\.gradle macos平台: /Users/用户名/.gradle li ...