学习JavaWeb第十六天

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
<%
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”),数据库保存是保存的图片的路径(一般相对路径或者是文件都可以)
<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、资源关闭
<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);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值