JSP
脚本
- <% %> : 放在
_jspService()
方法中 - <%= %>: 放在
out.print()
的参数 - <%! %> : 放在
_jspService()
方法之外,被类直接包含
缺点
- 书写麻烦
- 阅读麻烦
- 复杂度高,
JRE, jsp容器
- 占用资源磁盘
- 调试困难
- 前端可能不会JAVA
EL表达式
EL(Expression Language), 表达式语言,用于简化JSP的java代码
用法
${express}
会依次从四大作用域寻找表达式的值
示例
/**
* EL's test
*/
req.setAttribute("test", "RoboTerh");
req.getRequestDispatcher("/hello.jsp").forward(req, resp);
功能
获取数据
四大作用域
page
: 当前页面
request
: 当前请求
session
: 当前会话
application
: 当前应用
JSTL标签库
<!-- JSTL标签库 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
在JSP页面导入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用
<c:if>
<!-- 使用JSTL -->
<c:if test="${status == 1}">
true
</c:if>
<c:if test="${status == 0}">
false
</c:if>
<c:forEach>
<c:forEach items="${brands}" var="brand">
改进
Servlet + HTML + AJAX
Mybatis
准备
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- mysql-connect -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
mybatis-config.xml
放于resources
下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 别名-->
<typeAliases>
<package name="com.roboterh.pojo"/> <!-- 更改 -->
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/><!-- 更改 -->
<property name="url" value="jdbc:mysql:///javaweb?useSSL=false&useServerPrepStmts=true"/><!-- 更改 -->
<property name="username" value="root"/><!-- 更改 -->
<property name="password" value="root"/><!-- 更改 -->
</dataSource>
</environment>
</environments>
<mappers>
<!-- 扫描mapper -->
<!-- <mapper resource="org/mybatis/example/BlogMapper.xml"/>-->
<package name="com.roboterh.mapper"/><!-- 更改 -->
</mappers>
</configuration>
在resources
下创建包结构com/roboterh/mapper
,之后创建UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.roboterh.mapper.UserMapper">
<select id="selectAll" resultType="com.roboterh.pojo.User">select * from user</select>
</mapper>
同时需要在mapper
包下创建UserMaaper
接口
package com.roboterh.mapper;
import com.roboterh.pojo.User;
import java.util.List;
public interface UserMapper {
List<User> selectAll();
}
SqlSessionFactory
创建一个工具包,形成复用
package com.roboterh.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class SqlSessionFactoryUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// 创建连接池,只调用一次
String resource = "mybatis-config.xml";
InputStream stream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
} catch (IOException e) {
e.printStackTrace();
}
}
// 构造成员方法
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
}
之后在service
包下调用
package com.roboterh.service;
import com.roboterh.mapper.UserMapper;
import com.roboterh.pojo.User;
import com.roboterh.util.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class UserService {
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
public List<User> selectAll() {
// 调用UserMapper.selectAll()
//创建session
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取Mapper
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用mapper的方法
List<User> users = userMapper.selectAll();
//关闭资源
sqlSession.close();
return users;
}
}
Cookie
基本使用
发送cookie
获取cookie
时间周期
session
基本使用
Filter
AJAX
作用
使用步骤
创建XML HTTP Request对象
var xmlhttp;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
向服务器发送请求
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();
//ajax_info.txt为请求url 第三个参数true为异步,false为同步,默认异步
xmlhttp.open("POST","/try/ajax/demo_post2.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Henry&lname=Ford");
响应
- responseText属性
如果来自服务器的响应并非 XML,请使用 responseText 属性。
responseText 属性返回字符串形式的响应
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
- responseXML属性
xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
{
txt=txt + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("myDiv").innerHTML=txt;
onreadystatechange事件
属性 | 描述 |
---|---|
onreadystatechange | 每当 readyState 属性改变时,就会调用该函数 |
readyState | 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化 0. 请求未初始化 1: 服务器连接已建立 2: 请求已接收 3: 请求处理中 4: 请求已完成,且响应已就绪 |
status | 200:“OK” 404: not found |
常用: |
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
Vue
指令