使用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 ...
随机推荐
- 第4节:Java基础 - 必知必会(中)
第4节:Java基础 - 必知必会(中) 本小节是Java基础篇章的第二小节,主要讲述抽象类与接口的区别,注解以及反射等知识点. 一.抽象类和接口有什么区别 抽象类和接口的主要区别可以总结如下: 抽象 ...
- BZOJ 1861书架
小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下一本.由于这些书太有吸引 ...
- 洛谷 题解 P2296 【寻找道路】
Problem P2296 [寻找道路] solution 首先声明,这题我用了spfa,而: 关于spfa:它死了. 杀手: NOI 2018−T1 出题人 感谢出题人,没有卡spfa 用时: 20 ...
- scikit-learn与数据预处理
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- 基于RT-Thread的人体健康监测系统
随着生活质量的提高和生活节奏的加快,人们愈加需要关注自己的健康状况,本项目意在设计一种基于云平台+APP+设备端的身体参数测试系统,利用脉搏传感器.红外传感器.微弱信号检测电路等实现人体参数的采集,数 ...
- mini_magick上传图片
rails上传图片需要用到的gem: gem 'carrierwave'gem 'mini_magick' 在项目Gemfil中添加上面的两个gem,然后bundle install 然后创建modl ...
- Elasticsearch系列---初识搜索
概要 本篇主要介绍搜索的报文结构含义.搜索超时时间的处理过程,提及了一下多索引搜索和轻量搜索,最后将精确搜索与全文搜索做了简单的对比. 空搜索 搜索API最简单的形式是不指定索引和类型的空搜索,它将返 ...
- ssh jail
useradd -s /sbin/nologin -M updateuserpasswd updateusermkdir /home/updatechown root:root /home/updat ...
- 京东云携手HashiCorp,宣布推出Terraform Provider
2019年4月23日消息,京东云携手云基础设施自动化软件的领导者HashiCorp,宣布推出Terraform Provider for JD Cloud,这意味着用户能够在京东云上轻松使用简单模板语 ...
- Spring Boot 部署浅析(jar or war)
对于传统的 ssm 或者 ssh 项目的部署,一般会打包成war包,或者是一个编译好的文件夹,再放到 tomcat 的 webapps 目录下,如果是 war 包,会自动解压出来.而 Spring B ...