jsp进阶
Jsp的九大内置对象:(已经初始化好的,可以直接使用的)
- out:输出(向浏览器去写数据)
- response:响应对象
- page: 描述页面的对象,(指当前页面转换后的Servlet类的实例) this 指的是当前页,离开当前页之后对象便不存在
- 域对象:
- pageContext:单个页面的全局对象(jsp页面的容器) 当前页面有效 它可以获取其他的八大内置对象
- request:请求对象
- session:会话对象 、用来保存用户的信息 一次会话有效 关闭浏览器后在打开访问就无效
- application:所有页面的全局对象(相当于servletContext) 所有用户的共享数据 浏览器关闭之后在打开都可以访问
- config:服务器配置信息对象,可以获取到初始化参数
- exception:异常对象
jsp四大域对象:
- 作用域大小:PageContext<Request <Session<Application
- 取值问题:使用El表达式取取值会默认会从作用域最小的开始查找,但如果有同名存在,通过El表达式的一些特殊写法上控制取某一个作用域的值。
- el 出现同名键的情况下 默认取值从最小的域去取,如果你想从指定域获取那么可以显示指明 比如 xxScope
- 注意 严格区分大小写 requestScope 、requestScope
- el 出现同名键的情况下 默认取值从最小的域去取,如果你想从指定域获取那么可以显示指明 比如 xxScope
<%
pageContext.setAttribute("marong", "你个亚索都0-15了!");
request.setAttribute("marong", "亚索你地址给我,我给你寄点土特产");
session.setAttribute("marong", "打野的,我也给你寄点土特产");
application.setAttribute("marong", "瞎子下盘双排否");
%>
${marong } <!-- 默认取pageContext域的 -->
${applicationScope.marong} <!-- 指定取application域的 -->
- 共有的方法
- setAttribute() 设置值
- getAttribute( ) 获取其值
- removeAttribute()删除值
servlet 常用的三个域对象:是由tomcat容器创建的 ServletRequest、ServletResponse ServletContext
Jsp动态标签
- 动态包含: < jsp:include page=“路径” > </ jsp:include>
- 网页跳转:< jsp:forwrad Page=” 具体的页面 ”></ jsp:forward> (和httpServlet 的 转发一样,地址同样不变,但是request作用域的值会一起传递过去。)
- 静态包含和动态包含的区别:
- 静态包含<%@include file =“路径”%>
- 静态包含最终生成一个servlet
- 动态包含生成2个Servlet
- 动态包含可以进行传参,静态包含不可以
- 传参案例:
<jsp:include page="/jsp/index_08.jsp">
<jsp:param value="one" name="username"/>
</jsp:include>
<!-- 获取:调用request.getParameter("username")获取 -->
<%=request.getParameter("username") %>
Jsp中的细节:
表单提交后自动输入框仍然显示上一次数据:
${param.id}//而是相当于 request.getParameter("id")。根据本页面表单的name值获得传递过来的值。
${param.name} == request.getParam("name")
${name} == request.getAttribute("name")
${pageContext.request.contextPath }//是获取当前项目名称路径
//jsp中:JSTL标签可以嵌套在html标签中:
<select name="state" >
<option value="0" <c:if test="${param.state==0 }">selected</c:if> >正常</option>
<option value="1" <c:if test="${param.state==1 }">selected</c:if> >热门</option>
<option value="2" <c:if test="${param.state==2 }">selected</c:if> >为你推荐</option>
<option value="3" <c:if test="${param.state==3 }">selected</c:if> >新品</option>
<option value="4" <c:if test="${param.state==4 }">selected</c:if> >小米明星单品</option>
</select>
关于文件上传两种方法:
第一种:
- 上传的步骤:
- 1.导入第三方的jar包,加入依赖
-
commons-fileupload-1.2.1.jar
-
commons-io-1.4.jar
- 注意:
- < form action="/MyDay17/file" method=“post” enctype=“multipart/form-data”>
- 表单的method=“post” enctype=“multipart/form-data”,必须是这两点
-
- 2.创建一个上传文件目录(文件夹)
- 3.检验提交的格式是否合法 ServletFileUpload.isMultipartContent(req); 为true 表示合法
- 4.实例化这个上传文件的核心类 ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
- 5.得到所有form 表单的fileItme 集合
- 6.得到每一个fileItem,然后判断每一个FileItem的类型 fileItem.isFormField() 如果是true 表示是文本类型,也就是不是文件
- 7.获取文件的名称,构建一个文件对象
- 8.构建一个完整的路径,写入到服务器,fileItem.write(f);
- 注意点:获取其文本的值:fileItem.getString(“UTF-8”),数据库保存是保存的图片的路径(一般相对路径或者是文件都可以)
- 1.导入第三方的jar包,加入依赖
<div align="center">
<form action="/MyDay16/file" method="post" enctype="multipart/form-data">
<input type="file" name="filename" />
<input type="submit" value="上传" onchange="javaScript:alert('老弟,上传中请耐心等候!');"/>
</form>
</div>
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
File file = new File("C:\\Users\\Administrator\\Desktop\\file");
if (!file.exists()) {
file.mkdirs();
}
boolean b = ServletFileUpload.isMultipartContent(request);
if (b) {
try {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> list = upload.parseRequest(request);
Iterator<FileItem> iter = list.iterator();
while (iter.hasNext()) {
FileItem fileItem = iter.next();
// 判断是否是文本类型
//是文本
if (fileItem.isFormField()) {
//获取标签name值
String val = fileItem.getFieldName();
System.out.println(val);
if ("某个值".equals(val)) {
//根据name获取其文本内容
System.out.println(fileItem.getString("UTF-8"));
}
}else {
//不是文本,是文件,然后执行写入
String name = fileItem.getName();
File file2 = new File(file, name);
fileItem.write(file2);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
//转发
request.getRequestDispatcher("/jsp/File.jsp").forward(request, response);
}
第二种:
基于Servlet3.0的文件上传@MultipartConfig
- 上传的步骤:
- 1、< form action="/MyDay17/file" method=“post” enctype=“multipart/form-data”>
- 表单的method=“post” enctype=“multipart/form-data”,必须是这两点
- 2、在类前面添加注解: @MultipartConfig
- 3、根据name属性获取Part对象 request.getPart(“filename”)
- 4、获取文件名 part.getSubmittedFileName();
- 5、创建一个上传文件目录(文件夹)
- 6、获取字节输入流:part.getInputStream();
- 7、创建一个字节输出流并指定路径用于输出到本地磁盘 new FileOutputStream(file2);
- 8、文件流的传输
- 9、资源关闭
- 1、< form action="/MyDay17/file" method=“post” enctype=“multipart/form-data”>
<div align="center">
<form action="/MyDay16/file2" method="post" enctype="multipart/form-data">
<input type="file" name="filename" />
<input type="submit" value="上传" />
</form>
</div>
package com.ujiuye.filedown;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
/**
* @作者: t c y
* @日期: 2019年11月24日
* @备注:
*/
@WebServlet("/file2")
@MultipartConfig
public class MyFileDown2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Part part = request.getPart("filename");
String fileName = part.getSubmittedFileName();
File file = new File("D:\\upload");
if (!file.exists()) {
file.mkdirs();
}
File file2 = new File(file, fileName);
InputStream is = part.getInputStream();
OutputStream os = new FileOutputStream(file2);
byte[] b = new byte[10240];
int len = -1;
while ((len = is.read(b)) != -1) {
os.write(b, 0, len);
}
os.close();
is.close();
System.out.println("over");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}