JSP学习入门1

108 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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") + "&nbsp");
         }
     }
     %>
 </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");