Offer 收割机!阿里 P7 大神甩出 JSP 实战笔记,网友:信息量过大
Hello,今天给各位童鞋们分享 JSP,赶紧拿出小本子记下来吧!
使用 eclipse 开发 JavaWeb 项目
为新建 Javaweb_yq 工作站增加 Server 实例
window > preference>server>Runtime Environment > add 添加本地 tomcat 所在安装目录
为项目 MyJspProject 添加 tomcat 和 jdk 支持
创建好 MyJspProject 项目
为该项目添加 tomcat 和 jdk 支持。项目右键 build path add library 加入以下支持:JRE System Library 和 APache Tomcat
添加 jdk 是因为 tomcat 的字节码文件需要在 JVM 上运行,而 jsp 需要 tomcat/lib 中的 servlet-api.jar。该 jar 可将 jsp 转为 servlet
3.部署 tomcat
**注意:**一般建议 将 eclipse 中的 tomcat 与 本地 tomcat 的配置信息保持同步:即 将 eclipse 中的 tomcat 设置为托管模式。
操作方式是:【第一次】创建 tomcat 实例之后, 双击,选择 Server Location 的第二项
否则默认是将 tomcat 备份到项目中,配置信息是与 tomcat 独立的。
Jsp
统一字符编码
设置 jsp 文件的编码,该编码用于 Jsp 编译成 Java 文件时,通过 jsp 文件中的 pageEncoding 属性设置。
设置浏览器读取 jsp 文件编码,通过 jsp 文件中的 content 属性设置。
一般将上述设置成一致的编码,推荐使用 utf-8
文本编码,jsp 文件以什么编码形式保存。可有以下三种方式设置:
eclipse 全工作站设置。如下:
2.设置某个项目
3.设置单独文件
Jsp 的页面元素
Jsp 页面元素包括:HTML、Java 代码(也就是嵌套在脚本中的 javadiamante)、指令、注释
脚本
<%
局部变量、java 语句
%>
2.
<%!
全局变量、定义方法
%>
3.
<%= 输出表达式>
源代码:
f12 所看到的:
注意,out.println()不能回车; 要想回车:“”,即 out.print()、 <%= %> 可以直接解析 html 代码。
指令
page 指令
language 属性:jsp 页面使用的脚本语言
import : 导入类
pageEncoding: Jsp 文件翻译成 java 文件时的编码
contentType:浏览器解析 jsp 时的编码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.Date" %>
注释
html 注释<!-- --> ,可以被客户 通过浏览器查看源码 所观察到
java 注释// /*...*/
jsp 注释<%-- --%>
Jsp 九大内置对象
内置对象即不需要 new 也能使用的对象。
out 对象
输出对象,向客户端输出内容
request 对象
请求对象;存储“客户端向服务端发送的请求信息”
request 对象常见方法:
response 对象
session 对象
由于 HTTP 是无状态连接,每一次请求的数据都是相互独立且不会被保存的。为解决诸如购物车的问题。引入了 cookie 和 session 对象。
application 对象
<%="虚拟路径:" + application.getContextPath() +"</br>"%>
<%="绝对路径:" +application.getRealPath("/MyJspProject")+"</br>" %>
打印结果:
虚拟路径:/MyJspProject
绝对路径:
E:\studydemo\JavaWeb_yq\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\MyJspProject\MyJspProject
config 对象
配置独享,服务器配置信息
page
当前 JSP 页面对象,相当于 Java 中的 this
exception 异常对象
四种范围对象
范围由小到大
以上四种对象共有的方法:
注意
以上 4 个范围 对象,通过 setAttribute() 赋值,通过 getAttribute() 获取值
尽量使用范围小的对象,因为对象范围越大,造成的性能损耗越大。
请求转发与请求重定向
两种请求方式
请求主要有两种方式,一种是 get 另一种是 post。get 方式情形有:表单指定 method=“get”、超链接形式(< a href > </ a >)、以及通过地址栏构造包含请求参数的链接的方式都属于 get 方式请求。
区别
get 方式的在地址栏显示请求信息,但地址栏显能够容纳的内容优先,只有 4-5KB。Post 请求不会显示在地址栏,其将请求信息放置在请求体中。
文件上传操作必须使用 post 请求。
注册小项目
register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//设置 post 请求编码
request.setCharacterEncoding("utf-8") ;
String name = request.getParameter("uname") ;
//name = new String( name.getBytes("gbk") , "utf-8"); get 方式修改编码
int age = Integer.parseInt( request.getParameter("uage") ) ;
String pwd = request.getParameter("upwd") ;
String[] hobbies = request.getParameterValues("uhobbies") ;
%>
注册成功,信息如下:<br/>
姓名:<%=name %><br/>
年龄:<%=age %><br/>
密码:<%=pwd %><br/>
爱好:<br/>
<%
if(hobbies !=null){
for(String hobby :hobbies)
{
out.print(hobby +" ");
}
}
%>
</body>
</html>
注册结果:
若不使用 request.setCharacterEncoding(“utf-8”) ,则在输入中文时会出现乱码。
乱码问题的解决
首先统一请求的编码。
如果是 get 请求,则可以通过以下方式:
1、修改 server.xml。修改 tomcat 安装目录下的 server.xml,添加 URIEncoding=“UTF-8”,如下
此种方法一劳永逸。
2、 还有一种比较鸡肋的方式就是每个变量都通过 getBytes 获得对应字节流,然后再转为对应编码。
如果是 post 请求则直接使用:
好啦,今天的文章就到这里,希望能帮助到屏幕前迷茫的你们!
评论