##JavaWeb笔记
###一 response和request
request 可以实现请求转发,具体过程如下
请求转发的语句是
request.getRequestDispatcher("路径").forward(request,response);
请求转发是指在对一个资源执行了一些操作之后转到另一个类去执行另外的操作
请求转发虽然转到了另外一个类,但是实际上他的url还是初始的那个类的url,url并不会发生变化
request.setAttribute("","")
类似于key,value的形式,是在类与类跳转的时候传递值的,类似于map
在第二个类中通过
request.getAttribute("key")
可以得到一个返回值类型为object
浏览器地址栏路径不发生变化
只能转发到当前服务器的内部资源
一次请求,可以在转发的资源间使用request共享数据
**response可以实现重定向 **
大概意思就是浏览器向服务器请求完成,但是这个服务器无法完成,然后返回一个状态码302,并且设置一个响应头,格式为reponse.setHeader(“Location”,“路径”)。返回给浏览器之后浏览器去找这个能完成他要求的服务器。
也有一种简化的方式去设置重定向,格式为
response.sendRedirect("路径");
response.setContentType("text/html;charset=utf-8");
sqlsession.commit();
每次用mybatis都得复制三行代码,直接创建一个工具类。
JSP标准标签库,使用标签取代JSP页面上的Java代码
JSTL要和EL表达式一起使用,在Servlet中向域中传递参数后,使用请求转发转发到jsp页面,代码如下:
//2.存储到request域中
request.setAttribute("brands",brands);
request.setAttribute("status",1);
//3.转发到el-demo.jsp
request.getRequestDispatcher("/jstl-if.jsp").forward(request,response);
//request.getRequestDispatcher("/el-demo.jsp").forward(request,response);
然后在jsp中使用JSTL来进行if判断,代码如下:
启用
禁用
相当于for循环
items:被遍历的容器
var:遍历产生的临时变量
${brand.id}
${brand.brandName}
${brand.companyName}
${brand.ordered}
${brand.description}
${brand.status}
修改 删除
MVC是一种分层开发的模式,其中:
三层架构
表现层:接受请求,封装数据,调用业务逻辑层,响应数据(Controller)
业务逻辑层:对业务逻辑进行封装,组合数据访问层中基本功能,形成复杂的业务逻辑功能(service)
数据访问层:对数据库的CRUD基本操作(dao)
原因是由于实体的属性名称和数据库的字段名称不一致,在对应的mapper.xml映射文件中添加映射,然后在方法的注解下多加一行注解即可。代码如下:
<resultMap id="brandResultMap" type='brand'>
<result column="brand_name" property="brandName">result>
<result column="company_name" property="companyName">result>
resultMap>
@ResultMap("brandResultMap")
会话:用户打开浏览器,访问web服务器的资源,会话建立,知道有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应
会话跟踪: 一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话中的多次请求间共享数据
实现方式:
发送cookie:
创建Cookie对象,设置数据
Cookie cookie = new Cookie("key","value");
发送Cookie到客户端:使用response对象
response.addCookie(cookie);
获取Cookie:
获取客户端携带的所有Cookie,使用request对象
Cookie[] cookies = request.getCookies();
遍历数组,获取每一个Cookie对象:for
使用Cookie对象方法获取数据
cookie.getName();
cookie.getvalue();
Cookie[] cookies = request.getCookies();
for(Cookie cookie:cookies){
String name = cookie.getName();
if("username".equals(name)){
String value = cookie.getValue();
System.out.println(value);
break;
}
}
默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁
setMaxAge(int seconds) : 设置Cookie存活时间
Cookie不能直接存储中文
如需要存储,则需要进行转码,URL编码
String value = "张三";
String value1 = URLEncoder.encode(value,"UTF-8");
Cookie cookie = new Cookie("username",value1);
//设置Cookie存活时间
cookie.setMaxAge(60*60*24*7);
//2.发送cookie
response.addCookie(cookie);
//1.获取Cookie数组
Cookie[] cookies = request.getCookies();
for(Cookie cookie:cookies){
String name = cookie.getName();
if("username".equals(name)){
String value = cookie.getValue();
//url 解码
String value1 = URLDecoder.decode(value, "UTF-8");
System.out.println(value1);
break;
}
}
服务端会话跟踪技术 :将数据保存到服务端
JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能
使用:
获取session对象
HttpSession session = request.getSession();
session对象功能
void setAttribute(String name,Object o): 存储数据到Session域中
Object getAttribute(String name): 根据key,获取值
void removeAttribute(String name): 根据key,删除该键值对
存储位置:Cookie是将数据存储在客户端,Session将数据存储在服务端
安全性:Cookie不安全,Session安全
数据大小:Cookie最大3KB,Session大小无限制
存储时间:Cookie可以长期存储,Session默认30分钟
Object getAttribute(String name): 根据key,获取值
void removeAttribute(String name): 根据key,删除该键值对