来源于从网页搭建入门Java Web
基础的servlet,jsp,以及正则知识
目录结构
对中文的支持
1
| new String(str.getBytes("ios-8859-1"), "utf-8")
|
1
| <%@page contentType="text/html;charset=utf-8"%>
|
1 2
| request.setCharacterEncoding("UTF-8") response.setContentType("text/html;charset=utf-8")
|
在配置文件server.xml中中为Connector添加属性URIEncoding=”UTF-8”(Tomcat8+不用)
上传文件的操作
对于前端,需要对form标签的 type
值修改为 multipart/form-data
,同时需要使用post方法
对于后端,需要使用第三方jar包 commons-fileupload
和 commons-io
对request进行处理
首先,需要生成一个唯一的文件名,这里使用到类 UUID
1 2 3 4 5
| private String getFileName(String filename) { int idx = filename.lastIndexOf("."); return UUID.randomUUID().toString().replace("-", "") + filename.substring(idx); }
|
之后就可以进行操作了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filePath = ""; try {
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
List<FileItem> fileItems = servletFileUpload.parseRequest(request);
for (FileItem fileItem : fileItems) { if (fileItem.isFormField()) { String name = fileItem.getFieldName(); String value = fileItem.getString("UTF-8"); System.out.println(name + " " + value); } else { String filename = fileItem.getName(); String uuidname = this.getFileName(filename);
InputStream inputStream = fileItem.getInputStream();
File file = new File(this.getServletContext().getRealPath("/upload") ,uuidname); System.out.println(file.getAbsolutePath()); file.createNewFile(); OutputStream os = new FileOutputStream(file); int len = 0; byte[] b = new byte[1024]; while ((len = inputStream.read(b)) != -1) { os.write(b, 0, len); } filePath = file.getAbsolutePath(); inputStream.close(); os.close(); } }
} catch (Exception e) { e.printStackTrace(); } finally { response.setContentType("text/html;charset=utf-8"); response.getWriter().write(filePath); } }
|
http相关
- 请求转发 一次请求
- 请求重定向 两次请求
- restful风格获取url最后一项
/api/user/1
1 2
| String url = request.getRequestURL().toStirng(); String id= url.substring(url.lastIndexOf("/") + 1)
|
三大作用域对象
- HttpServletRequest 请求对象
- HttpSession 用户回话对象
- ServletContext对象 全局的,只有一个
九大内置对象
exception
内置对象使用时,需要在页面的page指令下增加isErrorPage
属性
pageContext
是PageContext
类的实例,代表当前页面的上下文对象,它封装了相应的方法来访问page
,request
,session
,application
范围的变量;可以获得其他的内置对象
web.xml一些配置
1 2 3 4
| <context-param> <param-name></param-name> <param-value></param-value> </context-param>
|
使用 context.getInitParameter("");
获取
1 2 3 4
| <error-page> <error-code></error-code> <error-location></error-location> </error-page>
|
1
| <load-on-startup></load-on-startup>
|
EL表达式
- 获取setAttribute中的值
${}
用于替换out.print() 语句
- 简化parameter输出
- pageScope
- requestScope
- sessionScope
- applicationScope
- 本质上是调用toString方法
JSTL
核心标签库
页头引入
1
| <%@ taglib prefix="c" uri=".." %>
|
1 2
| <c:out value="" default=""></c:out> escapeXml 是否要转义
|
1 2 3 4 5 6
| <c:if test="${...}"></c:if> <c:choose> <c:when test="${...}"> ... </c:when> ... <c:otherwise> ... </c:otherwise> </c:choose>
|
1 2 3 4
| <c:forEach var="p" items="${collection}" varStatus="idx"> ${idx.index} ${p.name} </c:forEach>
|
fmt格式化输出 数字,日期
- yyyy 年
- MM 月
- dd 日
- HH 24h
- hh 12h
- mm 分钟
- ss 秒
- SSS 毫秒
1
| <fmt:formatDate value="..." pattern="..."/>
|
0.000 后三位
1
| <fmt:formatNumber value="..." pattern="..."/>
|
身份记录
- session
- 登陆成功后存在建议将登陆信息session中
- session 窗口当前回话 浏览器端,时效性为30min
- cookie中保存SessionId
在 web.xml
中设置session的失效时间
1 2 3 4
| <session-config> <session-timeout>1</session-timeout> </session-config>
|
1 2 3 4
| new Cookie(..., ...) cookie.setPath("/..) cookie.setMaxAge(....) response.addCookie(cookie)
|
正则表达式
没啥说的,就把几个关键词记得就行了