使用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 ...
随机推荐
- Java_输入整数求阶乘
import java.util.Scanner;public class Work4{ public static void main(String[] args){ // 创建Scanner对象 ...
- OPPO R11刷机初体验
刷机目的 最初打算是用旧手机搭一个服务器,首先想到的是刷一个Linux系统,但这太难了,我搞不定,然后就想着可以用一些软件比如KSWEB之类的来代替,但是想要访问80端口的话还是需要root,但是普通 ...
- 计算机二级Python
概述 计算机二级在近两年新加了python的选择,趁机考了一下,顺便记录一下学习的一些所获 第一章 程序设计语言概述 考纲考点: 这一部分主要是介绍计算机语言的公共常识,一些尝试我就按照自己的理解方式 ...
- nginx代理grafana
希望通过Nginx为服务器上的grafana进行代理,实现通过在当前域名后加/grafana在公网进行访问,开始按照百度的方法弄了几个小时都不行,后面仔细看了官方的文档才弄好,Mark一下. Ngin ...
- HPS端如何通过AXI Bridge控制FPGA端口的GPIO
该笔记主要记录HPS端如何通过AXI Bridge控制FPGA端口的GPIO,主要是如何操作FPGA侧的Led 1.AXI Bridge AXIB主要包括H2FB.F2HB.LWH2F ...
- SpringBoot集成Swagger2在线文档
目录 SpringBoot集成Swagger2在线文档 前言 集成SpringBoot 登录接口文档示例 代码 效果 注解说明 总结 SpringBoot集成Swagger2在线文档 前言 不得不说, ...
- CSP-S 2019 游记
目录 CSP-S 2019 游记 DAY -1 Day 0 Day 1 Day 2 后记 CSP-S 2019 游记 机房段子: zr(老师):yyx我看你最近不错哦(此人外号拳皇 yyx:运气好运气 ...
- 线程提供了一个方法:void join() ,join可以协调线程之间的同步运行。
package seday09; /** * @author xingsir * 线程提供了一个方法:void join() ,join可以协调线程之间的同步运行. * 此方法允许执行这个方法的线程在 ...
- SpringCloud-使用路由网关统一访问接口(附代码下载)
场景 SpringCloud-使用熔断器仪表盘监控熔断: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102673599 Spr ...
- 渗透测试初学者的靶场实战 3--墨者学院SQL注入—宽字节盲注
墨者SQL注入-MYSQL数据库实战环境 实践步骤 1. 决断注入点 输入单引号,提示错误信息: 输入and 1=1 返回页面正常: 输入 and 1=2 返回正常 输入-1,返回异常: 2. 带入s ...