一个JSP页面通常由4种基本元素组成:
1.HTML标记
2.JSP注释
3.java脚本元素 如java代码
4.jsp标记
Jsp注释:
<%-- 内容 --%>
Jsp代码片段:
<% String a = null; %>
如此这般比注释少了两个-符号
当多个客户请求jsp时候,jsp为每个客户启动一个线程,不同的线程会分别执行该jsp页面中的java程序片,程序片中的局部变量,在不同的线程中分配不同的内存空间,因此一个客户对jsp页面局部变量的操作不会影响别的客户
成员变量和方法的声明格式 <%! 声明变量 %>
在上面的变量 在整个jsp页面都有效,而且多个用户共享这个变量,其他用户对于该变量的更改会影响这个值。
在标记符 <%= %>之间插入表达式
在<%@ page String a = “” %>中定义属性
一般主要用于导包
<%@ include file =“URL” %>
如此方法用于加载在静态页面加载图片等 ,先生成jsp文件 再转java处理
也可以用如下方法
加载jsp文件或者html之类的用如下方法
也可以
这种是先处理后包含所以这个动态方法会慢 但是灵活
JSP跳转 + 传参
标记
## 第二部分 JSP内置对象
request 对象 在这里贴出几个常用方法
request.getAttribute(String name)返回指定属性的属性值
String a = request.getParameter(String name)返回name指定的参数的参数值
String [] a =request.getParameterValues(String name)返回names数组指定的参数的参数值
request.setCharacterEncoding(String code )一般设置为utf-8 针对post传输
setAttribute(key value) getAttribute(key)类似hashmap的东西
response.setContentType 可以重新设置contenType属性值
response.setHeader 定义返回的http 头的信息
response.sendRedirect 实现客户端的重定向
web服务器可以用内置对象 session来存放 有关http链接信息
客户端连接就会创建一个session对象 每个对象分配一个ID
session.getId 就能获取
session失效的方式 1:用户关闭浏览器 2:调用invalidate()方法
不同于session application是多个用户可以共享的
服务器关闭才会使得 application失效
一般实现网站访问数量
pageContext 提供了获取jsp所有内置对象的方法
也提供了提取属性的方法
JSP有四种作用域:
页面域 page
请求域 request
会话域 session
应用域 application
jsp 使用bean <% import=“com.bean.*”%>
Servlet有两种方法,一种是注解方式实现,一种是xml实现
这是XML实现
注解实现
Servlet主要有三个过程 :
初始化servlet init()实现 并且实现一次
service()方法相应请求 多客户端则每个客户端启动一个线程
servlet死亡
这是servlet比较重要的知识,由于本人掌握,就不多做解释了:)
重定向和转发:
转发 发生在服务器端 浏览器还显示在之前请求的地址 使用 RequestDispatcher getRequestDispatcher(String url) 方法实现一个
RequestDispatcher 类 从而调用其的forward(request,response)方法实现转发
重定向 发生在客户端 相当于两次请求以前 request 存放的信息完全失效
sendRedirect方法调用,在之前有讲过
request.getSession()获取session
MVC不会那就可以洗洗睡了,这里不累赘了:)
Cookie c = new Cookie(“cookie的名称”,“cookie的值”)
addCookie©添加cookie
也可以getCookie()获取cookie
Cookie默认不在客户端保存 关闭浏览器就会失效
setMaxAge(ing time )设置cookie的存活时间
time = 0 表示删除cookie
time = 负数 浏览器关闭失去cookie
Session只会在第一次访问服务器时候才会创建 访问静态web不会创建
invalidate方法失其失效 用户和服务器多次会话使用同一个session
Session ID 被保存在cookie中 所以不是很安全 会被更改
URL重写技术
一句话概括: 在url上加上session 就完事了
过滤器 Filter对客户请求进行预先处理
比servlet 处理先 可以拦截任意资源
可以放置多个 不影响访问速度
一般防御DOS之类的攻击要写Filter 一般程序员考虑此类问题较少,这是需要重视的
Filter 中 init(FilterConfig fconfig)方法 初始化过滤器 配置其信息
doFilter 主要就是执行了
destroy 使其销毁
针对filter
如此两种方法皆可
ServletContextListener 监听 context的创建与销毁 context表示当前web应用程序 服务器开启时候调用其 contextInitalized(ServletContextEvent sce)方法 服务器关闭时候执行 contextDestroyed(ServletContextEvent sce)方法
该监听器用于启动时自动获取web.xml中配置的初始化参数 作为定时器加载全局属性对象 创建全局数据库连接 加载缓存信息等
ServletRequestListener 监听request的创建 每次请求都会创建requestInitialized(ServletRequestEvent sre) requestDestroyed(ServletRequestEvent sre)
监听器按照web.xml顺序来的 监听器 过滤器 servlet
httpsession中对象的状态:绑定-》解除绑定 钝化-》活化
针对文件上传 @MultipartConfig注解要写在 HttpServletReuqest上面
小DEMO
实现了插入lalala 并且查询lalala
package Pojo;
import java.sql.*;
public class ConnectDao {
public static void main(String args[]){
try{
Class.forName("com.mysql.jdbc.Driver");//设置驱动
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/Student?user=root&password=594824210&useUnicode=true&characterEncoding=UTF-8"); //建立数据库连接
Statement s = con.createStatement(); //创建对象
// PreparedStatement ss = con.prepareStatement("insert into student (Sname) values (?);");
// ss.setString(1,"lalalasanshale");
// int a =ss.executeUpdate();
int flag = s.executeUpdate("insert into student (Sname) values ('lalala');");
ResultSet rs = s.executeQuery("select *from student where Sname = 'lalala'");
while (rs.next()){
System.out.println(rs.getString("Sname").toString());
}
}
catch (ClassNotFoundException | SQLException e){
System.out.println(e.toString());
}
}
}
数据库连接池的基本思想 :为数据库连接设计一个缓冲池,在缓冲池放入一定数量的连接,当需要建立数据库连接的时候,只需要从数据库中取出一个再放回。通过连接池管理机制监视数据库连接的数量以及使用情况,为系统开发 测试 和性能调整提供依据
Statement 对象在每次执行sql语句时候都将语句传给数据库 将sql语句转换为命令 并且执行该命令 所以效率低下
prepareStatement(String sql)方法把sql语句预编译然后传入参数 再运行方法就比上面效率多了,同时! 可以防止sql注入的问题!(大知识,划重点 哪天你被暴库了 你就知道了:))
GET方式请求:xmlhttp.open(“GET”,“URL 一般指向”,true)true表示可以异步请求(个人不是很喜欢异步请求,有时候编程时候返回的值不是预定的值,喜欢写false对于小项目影响不大)
xmlhttp.send()发送到服务器 异步的好处就是可以立即返回 ,不然等到服务器返回信息才会返回,个人觉得差距不大。
GET在URL传参 不多累赘。
POST
xmlhttp.open(“post”,“URL 一般指向Servlet”,true)
xmlhttp.setRequestHeader(“header”,“value”)
xmlhttp.send(“name=lalala&pwd=lalala”)
获取返回值
document.getElementById(“myResponse”).innerHTML=xml.reponseText;
responseXML 用于接收XML形式的相应信息 传入的 content-Type头部指定MIME类型为text/xml 或者是application/xml
onreadystatementchange 指定每次状态改变所触发事件和事件处理函数
status 返回状态码 200成功 202请求接受但是没完成 400请求错误 404资源错误 500服务器错误
1.定义ajax的触发事件
2.创建ajax 事件 var xmlhttp = new XMLHttpRequest();
3.确定请求地址和参数
4.xmlhttp.open(“post”,“URL 一般指向Servlet”,true)
5. onreadystatementchange 指定每次状态改变所触发事件和事件处理函数
6. 根据相应处理数据
7. send
json:
{
key1:value1;
}
value 可以是String int Object list 都行
或者是
[
value1
value2
]
两者组合也可以
{
“hobby”:[“足球”,“篮球”];
}
在js中使用json:
var jsonText = “{“name”:“lalala”}”
var jsObj = eval("("+jsonText+")")
vat jsobj = JSON.stringify(jsonText);
导入JQ