使用Eclipse开发Web项目(JSP)——简单登录、无sql
1.使用Eclipse开发Web项目(JSP) tomcat
2.在Eclipse中创建的Web项目:
浏览器可以直接访问webContent中的文件
例如http://localhost:8080/MyJspProject/index1.jsp
其中的index1.jsp就在WebContent目录中;
但是WEB-INF中的文件 无法通过客户端(浏览器)直接访问,只能通过请求转发来访问
注意:并不是任何的内部跳转都能访问WEB-INF;原因是跳转有两种方式:请求转发、重定向
3.配置tomcat运行时环境
jsp <->Servlet
a.将tomcat/lib中的servlet-api.jar加入项目的构建路径(只加一个)
b.右键项目 -> Build Path -> Add library - Server Runtime(加一堆jar)【推荐】
4.部署tomcat
在servers面板新建一个tomcat实例,再在该实例中部署项目(右键-add)
注意:一般建议将eclipse中的tomcat与本地tomcat保持一致;
将eclipse中的tomcat设置为托管模式:【第一次】创建tomcat实例之后,双击,选择Server Location的第二个
5.统一字符集编码
a.编码分类:
设计jsp文件的编码(jsp文件中的pageEncodeing属性):jsp -> java
设置浏览器读取jsp文件的编码(jsp文件中content属性)
一般将上述设置成一致的编码,推荐使用UTF-8
b.文本编码:
i.将整个Eclipse中的文件统一设置(以后的jsp编码都会utf-8)【推荐】
ii.设置某一项目(右键文件-properties)
iii.设置单独文件
6.JSP的页面元素
HTML java代码(脚本Scriptlet) 指令 注释
a.脚本Scriptlet
i.
<%
局部变量、java语句
%>
ii.
<%!
全局变量、定义方法
%>
iii.
<%=
输出表达式
%>
修改web.xml、配置文件、java需要重启tomcat服务,但是如果修改Jsp/html/js/css代码不需要重启
注意:out.println()不能回车;要想回车:<br\>,即out.print() <%= %>可以直接解析html代码
b.指令
page指令
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.Date"%>
属性:
language:jsp页面使用的脚本语言
import:导入类
pageEnconding:jsp文件自身编码 jsp -> java
contentType:浏览器解析自身的编码
c.注释
html注释
<!--可以被客户通过浏览器查看源码所观察到-->
java注释
//
/*...*/
jsp注释
<%-- --%>
7.JSP九大内置对象
(自带,无需new也能使用的对象)
out:输出对象,向客户端输出内容
request:请求对象;存储“客户端向服务端发送的请求消息“
request对象的常见方法:
String getParameter(String name); 根据请求的字段名key(input标签的name属性),返回字段值value(input标签的value属性)
String[] getParameterValues(String name); 根据请求的字段名key,返回多个字段值value(checkbox)
void setCharacterEncoding("编码格式utf-8"); 设置post请求编码(tomcat7以前默认iso-8859-1,tomcat8以后改成了utf-8)
getRequestDispartcher("b.jsp").forward(request,response); 请求转发的方式跳转页面 A -> B
ServletContext getServerContext(); 获取项目的ServletContext对象
示例:注册
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">
用户名:<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>
<%
//设置编码
request.setCharacterEncoding("utf-8");
String name = request.getParameter("uname");
int age = Integer.parseInt(request.getParameter("uage"));
String pwd = request.getParameter("upwd"); String[] hobbies = request.getParameterValues("uhobbies");
%>
注册成功,信息如下:<br/>
姓名:<%=name %><br/>
年龄:<%=age %><br/>
密码:<%=pwd %><br/>
<%
if(hobbies !=null){ //控制没有爱好则不显示
out.print("爱好:");
for(String hobby:hobbies){
out.print(hobby + " ");
}
}
%>
</body>
</html>
连接/文件?参数名1=参数值1&参数名2=参数值2&参数名3=参数值3
get提交方式:method="get"和地址栏、超链接(<a href="xx">)请求方式默认都属于get提交方式
get与post请求方式的区别:
a.get方式在地址栏显示请求信息(但是地址栏能够容纳的信息有限,4-5KB;如果请求数据存在大文件)
b.文件上传操作,必须是post【推荐】
response:响应对象
提供的方法:
void addCookie(Cookie cookie); 服务端向客户端增加cookie对象
void sendRedirect(String location) throws IOException; 页面跳转的一种方式(重定向)
void setContentType(String type);设置服务端响应的代码(设置服务端的contentType类型)
示例:登录
login.jsp -> check.jsp -> success.jsp
login.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="check.jsp" method="post">
用户名:<input type="text" name="uname"><br/>
密码:<input type="password" name="upwd"><br/>
<input type="submit" value="登录"><br/>
</form>
</body>
</html>
check.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>
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("uname");
String pwd = request.getParameter("upwd");
if(name.equals("zs")&&pwd.equals("abc")){
//通过重定向跳转,结果导致数据丢失
//response.sendRedirect("success.jsp");
//请求转发跳转:可以获取到数据,并且地址栏没有改变(仍然保留转发时的页面)
request.getRequestDispatcher("success.jsp").forward(request, response);
}else{
//登录失败
out.print("用户名或密码错误!");
}
%>
</body>
</html>
success.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>
登陆成功!<br/>
欢迎您:
<%
String name = request.getParameter("uname");
out.print(name);
%>
</body>
</html>
请求转发和重定向的区别
| 请求转发 | 重定向 | |
|---|---|---|
| 地址栏是否改变 | 不变(check.jsp) | 改变(success.jsp) |
| 是否保留第一次请求时的数据 | 保留 | 不保留 --4种范围对象 |
| 请求的次数 | 1 | 2 |
| 跳转发生的位置 | 服务端 | 客户端发起的第二次跳转 |
转发、重定向:
转发:张三(客户端) -> 【服务窗口A(服务器) -> 服务窗口B】
重定向:张三(客户端) -> 服务窗口A(服务端) -> 去找B
张三(客户端) ->服务窗口B(服务端) -> 结束
session(服务端,内置对象)
Cookie(客户端,不是内置对象):
Cookie是由服务端生成的,再发给客户端保存
相当于本地缓存的作用:客户端(hello.jsp)->服务端(hello.mp4;zs/abc)
作用:提高访问服务器的效率,但是安全性较差。
Cookie:key=value
javax.servlet.http.Cookie
public Cookie(String name,String value)
String getName() 获取name
String getValue() 获取value
void setMaxAge(int expiry); 最大有效期(s)
服务器准备Cookie:
response.addCookie(Cookie cookie)
页面跳转(转发、重定向)
客户端获取Cookie:request.getCookies();
a.服务端增加Cookie:response对象;客户端获取对象:request对象
b.不能直接获取某一个单独对象,只能一次性将全部的Cookie拿到
通过F12可以发现,除了自己设置的Cookie对象外,还有一个name为JSESSIONID的cookie
建议cookie中只保存英文、数字,否则需要进行编码、解码处理
使用Cookie实现记住用户名操作
login.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>
<%!
String uname;
%>
<%
Cookie[] cookies = request.getCookies();
for(Cookie cookie:cookies){
if(cookie.getName().equals("uname")){
uname = cookie.getValue();
}
}
%>
<form action="check.jsp" method="post">
用户名:<input type="text" name="uname" value="<%=(uname==null?"":uname)%>"><br/>
密码:<input type="password" name="upwd"><br/>
<input type="submit" value="登录"><br/>
</form>
</body>
</html>
check.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>
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("uname");
String pwd = request.getParameter("upwd"); //将用户名加入到Cookie中
//Cookie cookie = new Cookie("key","value");
Cookie cookie = new Cookie("uname",name);
response.addCookie(cookie); response.sendRedirect("result.jsp"); /* if(name.equals("zs")&&pwd.equals("abc")){
//通过重定向跳转,结果导致数据丢失
//response.sendRedirect("success.jsp");
//请求转发跳转:可以获取到数据,并且地址栏没有改变(仍然保留转发时的页面)
request.getRequestDispatcher("success.jsp").forward(request, response);
}else{
//登录失败
out.print("用户名或密码错误!");
} */
%>
</body>
</html>
result.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>
仅供测试使用
</body>
</html>
pageContext(后面讲)
application(后面讲)
config(后面讲)
page(后面讲)
exception(后面讲)
8.统一请求的编码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方式的编码
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
<!--添加URIEncoding="UTF-8"以后所有的get方式都是utf-8-->
post方式请求
<%
//设置编码
request.setCharacterEncoding("utf-8");
%>
tomcat7(iso-8859-1)
tomcat8(utf-8)
使用Eclipse开发Web项目(JSP)——简单登录、无sql的更多相关文章
- Eclipse开发Web项目连接MySQL时找不到驱动的解决办法
当我们使用Eclipse开发Web项目连接MySQL时后台报找不到驱动的错误,如下:解决办法: 1.这时我们首先要检查我们是否导入了连接MySQL数据库的jar包,如图,是否已经将jar包复制到项目下 ...
- Eclipse 开发WEB项目所遇问题 WebContent WebRoot
原文:http://blog.sina.com.cn/s/blog_525960510100jo0j.html 最近在做Web 项目时,新建了一个WEB 项目,如webdemo,eclipse默认的b ...
- eclipse 开发web 项目,使用gradle 需要安装的插件
1.Buildship Gradle 扩展 eclipse IDE 以支持使用 Gradle 构建软件.此解决方案由 Eclipse 基金会提供 2.EGradle Editor (主要用来编写gra ...
- Maven(九)Eclipse创建Web项目(简单方式)
1. 创建Maven项目(以简单方式) 2. 勾选WAR 3. 选择properties->projectFacts 此处的错误可忽略,配置好会会消失,主要缺失web.xml文件 4. 将框中选 ...
- (转)Eclipse开发Web项目
1. 建立最简单的JSP和servlet http://wenku.baidu.com/link?url=bcf8iwB3E5_gjl46WfZAekQUWsps0-G3MAbbKz5totQcvmS ...
- eclipse中web项目部署以后jsp的java文件找不到问题(Tomcat配置serverlocations)
我的开发环境:eclipse kepler (4.3)+tomcat7.0.42. 在我想看eclipse中web项目jsp文件被tomcat转换成java以后的java源文件的位置,发现正常情况下的 ...
- Spring Boot 的Maven多模块开发web项目使用外部容器进行部署
Spring Boot中自带有Tomcat容器,因此Spring Boot项目只需要运行main函数,就可以运行,但是以往的web项目,我们习惯于使用自己安装的Tomcat运行或者使用Tomcat.J ...
- spring boot + Thymeleaf开发web项目
"Spring boot非常适合Web应用程序开发.您可以轻松创建自包含的HTTP应用.web服务器采用嵌入式Tomcat,或者Jetty等.大多数情况下Web应用程序将使用 spring- ...
- 使用Spring Boot开发Web项目(二)之添加HTTPS支持
上篇博客使用Spring Boot开发Web项目我们简单介绍了使用如何使用Spring Boot创建一个使用了Thymeleaf模板引擎的Web项目,当然这还远远不够.今天我们再来看看如何给我们的We ...
随机推荐
- HDU-3339 IN ACTION(Dijkstra +01背包)
Since 1945, when the first nuclear bomb was exploded by the Manhattan Project team in the US, the ...
- UESTC-1963咸鱼咕咕咕(二分图匹配)
咸鱼咕咕咕 Time Limit: 1000 MS Memory Limit: 64 MB Submit Status 咸鱼有个咕咕笼. 咕咕笼可以划分成m×nm×n个格子,每个小格子可以放下 ...
- 免费PPT模板
第1PPT网站:第1PPT网站链接,大量PPT免费模板,可免费下载,而且模板大多质量挺高的,亲测可用~~
- 2019百度阿里Java面试题(基础+框架+数据库+分布式+JVM+多线程)
前言 很多朋友对面试不够了解,不知道如何准备,对面试环节的设置以及目的不够了解,因此成功率不高.通常情况下校招生面试的成功率低于1%,而社招的面试成功率也低于5%,所以对于候选人一定要知道设立面试的初 ...
- 备战“金九银十”10道String高频面试题解析
前言 String 是我们实际开发中使用频率非常高的类,Java 可以通过 String 类来创建和操作字符串,使用频率越高的类,我们就越容易忽视它,因为见的多所以熟悉,因为熟悉所以认为它很简单,其实 ...
- 使用Portainer集中管理多地域内网运行的Docker实例
1. 单机运行的Docker 容器化部署是现在进行时,开源应用大多数支持容器化部署 在少量机器的场景下往往采用docker cli 和 docker-compose管理,进行"单机式管理&q ...
- JSON在线解析及格式化校验工具 jsonin.com
JSON在线解析及格式化校验工具 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.它是基 ...
- HttpRunner学习7--引用CSV文件数据
前言 在之前的文章中,我们已经学习了 parameters 参数化,是在测试脚本中直接指定参数列表.这种方法简单易用,但如果我们的参数列表数据比较多,这种方法可能就不太适合了. 当数据量比较大的时候, ...
- 流分析 Stream Analytics-实时数据流式处理,可处理来自数百万台 IoT 设备的数据
典型的物联网架构中,有实时数据分析的需求,在Azure中,流分析(stream analytics)就是这样的服务,它可以存在云中或者部署到边缘设备上. 流分析的基本概念: https://v.qq. ...
- Winform中使用Timer实现滚动字幕效果(附代码下载)
场景 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建一个Fo ...