开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
环境搭建及入门
tomcat解压后目录:
bin:可执行文件(startup.bat shutdown.bat)
conf:配置文件
lib:tomcat依赖的jar文件
log:日志文件
webapps:可执行的项目(将我们开发的项目放入该目录)
work:存放由jsp翻译成的
编码问题、JSP页面元素以及request对象
JSP的页面元素:HTML、java代码(脚本Scriptlet)、指令、注释
a.脚本Scriplet
i.
<%
局部变量、Java语句
%>
ii.
<%!
全部变量、方法
%>
iii.
<%=输出表达式%>
等价于<%out.print("");%>
一般而言,修改web.xml、配置文件、java需要重启tomcat服务器,但是如果修改Jsp/html/css/js,不需要重启
out.print()和out.println()都不能回车,要想回车必需加 ,out.print和<%=%>可以直接解析html代码
b.指令
| 指令 | 描述 |
|---|---|
| <%@ page ... %> | 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等 |
| <%@ include ... %> | 包含其他文件 |
| <%@ taglib ... %> | 引入标签库的定义,可以是自定义标签 |
page指令
<%@page....%>
page指定的属性:
language:jsp页面使用的脚本语言
import:导入类
pageEncoding:jsp文件自身编码 jsp->java时用的编码
contentType:浏览器解析jsp的编码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<%!String bookName;
public void init(){
Date today=new Date();
bookName="java书"+today;
}
%>
<%init();
out.print(bookName);
%>
</body>
</html>
c.注释
html注释
<!--...-->
java注释
<%
//......
/*......*/
%>
jsp注释
<%--......--%>
JSP九大内置对象(自带的,不需要new也能使用的对象)
out:输出对象,向客户端输出内容
request:请求对象,存储“客户端向服务端发送的请求信息”
request对象的常见方法:
String getParameter(String name):根据请求的字段名key(input标签的name属性),返回字段值value
String[] getParameterValues(String name):根据请求的字段名key,返回多个字段值value(常见checkbox)
void setCharacterEncoding("编码格式utf-8"):设置post方式的请求编码(tomcat7以前默认iso-8859-1,tomcat8以后改为了utf-8)
getRequestDispatcher("b.jsp").forward(request,response);:请求转发的方式跳转页面A->B
get ServerContext():获取项目的ServletContext对象
response 响应对象
pageContext JSP页面容器
session 会话对象
application 全局对象
config 配置对象(服务器配置信息)
page 当前JSP页面对象(相当于java中的this)
exception 异常对象
使用request对象实现注册示例,请求方式的编码问题
request只对同一次请求有效
示例:
register.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="show.jsp" method="post">
用户名:<input type="text" name="uname" /><br />
密码:<input type="password" name="upwd" /><br />
年龄:<input type="text" name="uage" /><br />
爱好<br />: <input type="checkbox" name="uhobbies" value="足球" />足球 <input type="checkbox"
name="uhobbies" value="篮球" />篮球 <input type="checkbox"
name="uhobbies" value="排球" />排球<br /> <input type="submit"
value="注册" />
</form>
</body>
</html>
show.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//统一编码
request.setCharacterEncoding("utf-8");
String name = new String(request.getParameter("uname").getBytes("iso-8859-1"), "utf-8");
int age = Integer.parseInt(request.getParameter("uage"));
String pwd = request.getParameter("upwd");
String[] hobbies = request.getParameterValues("uhobbies");
%>
注册成功,信息如下:
<br /> 姓名:<%=name%><br /> 年龄:<%=age%><br /> 爱好:
<br />
<%
if (hobbies != null) {
for (String i : hobbies) {
out.print(new String(i.getBytes("iso-8859-1"),"utf-8") + " ");
}
}
%>
</body>
</html>
http://localhost:8080/hhh/show.jsp?uname=%E4%BD%A9%E5%A5%87&upwd=eojrfjew&uage=19
连接/文件?参数名1=参数值1 & 参数名2=参数值2 & 参数名3=参数值3
get提交方式:method="get"和 地址栏、超链接(a href="xx") 请求方式默认都属于get提交方式
get与post请求方式区别:
a. get方式 在地址栏显示 请求信息(但是地址栏能够容纳的信息有限,4-5KB,如果请求数据存在大文件,图片等,会出现地址栏无法容纳全部的数据而出错);post不会显示
b.文件上传操作必须是post
统一请求的编码request
get方式请求 如果出现乱码,解决:
a.统一每一个变量的编码(不推荐)
new String(旧编码,新编码);
name = new String(name.getBytes("iso-8859-1"),"utf-8");
b.修改server.xml,一次性的更改tomcat默认get提交方式的编码(UTF-8)
建议使用tomcat时,首先在server.xml中统一get方式的编码:URIEncoding="UTF-8"
tomcat7(iso-8859-1)
tomcat8(utf-8)
post
request.setCharacterEncoding("utf-8");