本帖最后由 小石姐姐 于 2018-2-8 14:49 编辑
笔记节选
浏览器向服务器携带中文?
get方式
get的参数都藏在请求行中,请求行中编码是固定ISO8859-1
解决方案: 通过String的构造方式来解决 例如: 文件名是filename---> new String(filename.getByte("ISO8859-1"),"UTF-8");
post方式
post的方式参数藏在请求体中,将请求体中的编码改成UTF-8就行了
request.setCharacherEnconding("UTF-8");
服务器向浏览器输出中文的时候乱码解决???
设置响应头
响应头的编码是固定的ISO-8859-1,所有我们需要给浏览器能看懂的东西
if(header.contains("Firefox")){
filename = base64EncodeFileName(filename);
}else{
filename = URLEncoder.encode(filename, "UTF-8");
}
public static String base64EncodeFileName(String fileName) {
BASE64Encoder base64Encoder = new BASE64Encoder();
try {
return "=?UTF-8?B?"
+ new String(base64Encoder.encode(fileName
.getBytes("UTF-8"))) + "?=";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
设置响应体
getOutputStream
getWriter
setContextType("text/html;charset=UTF-8")---> setHeader("Context-Type","text/html;charset=UTF-8 ") setCharaterEnconding("UTF-8");
————————————————————————————————
路径问题
1.浏览器端如果想直接访问Servlet的话
路径的编写:使用: /工程名/servlet的虚拟路径
2.浏览器如果想要直接访问.html.jsp或者其他静态资源
路径的编写:使用: /工程名/资源所在的路径
3.servlet A想要跳转其他servlet B
1.重定向
路径的编写:使用: /工程名/B对应的虚拟路径
2.请求转发
路径的编写:使用: /B对应的虚拟路径
4.servlet A想要跳转到 .html或者.jsp
1.重定向
路径的编写:使用: /工程名/.jsp或者.html所在的子路径
2.请求转发
路径的编写:使用: /.jsp或者.html所在的子路径
5.servlet想要读取项目下文件
1.需要用ServletContext的对象来读取
1.ServletContext.getResouceAsStream("资源路径(不用再加工程名)")
2.ServletContext.getRealPath("资源路径(不用再加工程名)")
EL表达式:
概述:表达式语言,为了使JSP写起来更加简单
为什么学习EL:
简化JSP代码,减少<%%>
使用EL表达式:
语法:${EL表达式}
EL功能:
获取数据:(JSP的四个域)
执行运算:
操作WEB开发的常用的对象:
调用Java中方法:--很少用
获取数据:
${域名.值名}如果没找到返回“ 空”,不会返回null。
类似findAttribute("name") 先从page域中查找,没找到去request域中查询,没有找到去session域中找,没有找到就去application域中找
获取数组数据:${arr[索引值]}
获取List集合的数据:${listzh[索引值]}
获取Map集合的数据:${map.key值}可以获取集合的value的值
点.和[]的区别:
[]用于有下标的数据(数组,list集合) .用于有属性的数据(map,对象)
如果属性名中包含有特殊的字符.必须使用[];且[] 中的值必须用" 引号"括起来
获取对象的数据:$[对象名.属性]可以拿到属性值
获取对象集合的数据:${userList[0].id-userList[0].name}
file:///C:/Users/%E9%99%88%E6%B4%8B/AppData/Local/Temp/msohtmlclip1/01/clip_image012.gif
JSTL常用标签的用法--forEach
<c:forEach>标签有两种语法格式:
语法1,在集合对象中迭代:
<c:forEach[var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"][step="step"]> body content
</c:forEach>
语法2,迭代固定的次数:
<c:forEach[var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]> body content
</c:forEach>
<c:forEach>标签的属性说明如表8.6所示。
表8.6 <c:forEach>标签的属性 属性名
| 是否支持EL
| 属性类型
| 属 性 描 述
| var
| false
| String
| 指定将当前迭代到的元素保存到page这个Web域中的属性名称
| items
| true
| 任何支持的类型
| 将要迭代的集合对象
| varStatus
| false
| String
| 指定将代表当前迭代状态信息的对象保存到page这个Web域中的属性名称
| begin
| true
| int
| 如果指定items属性,就从集合中的第begin个元素开始进行迭代,begin的索引值从0开始编号;如果没有指定items属性,就从begin指定的值开始迭代,直到end值时结束迭代
| end
| true
| int
| 参看begin属性的描述
| step
| true
| int
| 指定迭代的步长,即迭代因子的迭代增量
| 在使用<c:forEach>标签时,需要注意如下几点说明:
l如果指定begin属性,其值必须大于或等于零;
l如果指定步长(step属性),其值必须大于或等于1;
l如果items属性的值为null,则要处理的集合对象为空,这时不执行迭代操作;
l如果指定的begin属性的值大于或等于集合对象的长度,不执行迭代操作;
l如果指定的end属性的值小于begin属性的值,不执行迭代操作;
JSTL提供的EL函数库
${fn:函数名()}
<h1>JSTL提供的EL的函数库</h1>
${fn:contains("Hello World","Hello") }
${fn:length("HelloWorld") }
${ fn:toLowerCase("ABCDE")}
<c:forEachvar="i" items='${ fn:split("a-b-c-d","-") }'>
${ i }
</c:forEach>
MVC设置模式
JSP的开发模式一:
JSP+JavaBean的模式,JSP显示数据,使用JavaBean封装和处理数据
JSP的开发模式二:
优点:JSP用于显示数据,使用JavaBean封装和处理数据,Servlet控制
也被称为MVC的设计模式
MVC:M:Model:模型层。V:voew:视图层。C:Controller:控制层 Servlet
|