首先,今天是博主生日!
我们于2021/08/12 的学习目标是:Servlet和JSP,核心任务为:
1、学习技术:
1)、Servlet实现文件上传与下载
2)、Servlet中Cookie的实现
3)、JSP的基础语法
4)、JSP中的注释
5)、Scriptlet
6)、JSP的指令标签
7)、JSP的四大域对象
8)、EL表达式的使用
2、文档总结
1)、Servlet实现文件上传与下载
文件上传
注意:
需要表单做输入
请求方式为POST
form标签的enctype属性必须设为"multipart/form-data"
前端JSP页面设计:
<form method="post" action="uploadServlet" enctype="multipart/form-data">
<input type="file" name="myfile">
<button type="submit">提交</button>
</form>
后台Servlet实现:
使用注解 @MultipartConfig 将一个Servlet标识为支持文件上传。Servlet将multipart/form-data的POST请求封装成Part,通过Part对上传文件进行操作
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;
import java.io.IOException;
@WebServlet("/upload")
@MultipartConfig
public class up extends HttpServlet {
@Override
public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//获取参数
Part part = req.getPart("myFile");//获取文件上传对象
//通过part对象,获取上传文件名
String fileName = part.getSubmittedFileName();
//获取文件的绝对路径
String realPath = req.getServletContext().getRealPath("upload");
part.write(realPath+fileName);
}
}
文件下载
可以通过a标签定义文件的路径实现下载
<!-- 当超链接遇到浏览器不识别的资源时,会自动下载 -->
<a href="CompressedPackage.zip">超链接下载</a>
指定 download 属性下载
<!-- 当超链接遇到浏览器识别的资源时,默认不会下载。通过添加download属性可进行下载 -->
<a href="MVI_1068.MP4" download>超链接下载</a>
添加了download属性后,在浏览器点击链接会直接下载文件而不是在浏览器中打开。
download属性可不赋值,会自动使用默认文件名。
如果设置了download属性的值,则使用设置的值作文件名。
2)、Servlet中Cookie的实现
添加cookie:
package com.sdf.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/cookie_test")
public class HelloCookie extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//创建Cookie
Cookie cookie=new Cookie("name","content");
//持久化
//持续时间以秒为单位
//负数代表跟随浏览器会话,浏览器关闭即删除
//0代表删除cookie
cookie.setMaxAge(7*24*60*60);
//和项目根目录绑定
cookie.setPath("/");
//响应到浏览器
resp.addCookie(cookie);
}
}
3)、JSP基础
JSP,即Java Server Page SUN公司提供的动态网页编程技术,是Java Web服务器端的动态资源。
JSP允许在页面中嵌套Java代码,同时使用HTML语言进行网页设计。
其实JSP就是一个Servlet,当我们第一次访问JSP时,JSP引擎都会将这个JSP翻译成一个Servlet,这个文件存放在tomcat(源码目录)中的work目录中。
4)、JSP中的注释
在JSP中支持两种注释的语法操作
显性注释:客户端能看见
从HTML风格继承而来
<!-- HTML风格的注释 -->
隐式注释:客户端无法看见
//单行注释
/*
多行注释
*/
<%-- JSP注释 --%>
5)、Scriptlet
在JSP中最重要的部分就是Scriptlet(脚本小程序),所有嵌入在HTML代码中的Java程序
在JSP中一共有三种Scriptlet方法:
<% %>
Java脚本段,可以定义局部变量、编写语句
<%! %>
声明,可以定义全局(成员)变量、方法、类
<%= %>
表达式,数据的一个变量或具体内容Scriptlet
6)、JSP的指令标签
使用包含操作,可以将一些重复的代码包含进来继续使用,从正常的页面组成来看,有时可能分为几个区域。而其中的一些区域可能是一直不需要改变的,改变的就其中的一个具体内容区域。现在有两种方法可以实现上述功能。
方法一:在每个 JSP 页面(HTML)都包含工具栏、头部信息、尾部信息、具体内容
方法二:将工具栏、头部信息、尾部信息都分成各个独立的文件,使用的时候直接导入
很明显,第二种方法比第一种更好,第一种会存在很多重复的代码,并且修改很不方便,在 JSP 中如果要想实现包含的操作,有两种做法:静态包含、动态包含,静态包含使用 include 指令即可,动态包含则需要使用 include 动作标签。
7)、JSP的四大域对象
四种属性范围:
pageContext 只在一个页面中保存属性,跳转之后无效
request 只在一次请求中保存,服务器跳转后依然有效
session 在一次会话范围中,无论何种跳转都可以使用
application 在整个服务器上保存
8)、EL表达式的使用
${expression}