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/>
密&nbsp;&nbsp;&nbsp;码:<input type="password" name="upwd"/><br/>
年&nbsp;&nbsp;&nbsp;龄:<input type="text" name="uage"/><br/>
爱&nbsp;&nbsp;&nbsp;好:<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 + "&nbsp;");
}
}
%>
</body>
</html>

http://localhost:8080/MyJspProject/show.jsp?uname=zs&upwd=abc&uage=22&uhobbies=%E7%AF%AE%E7%90%83&uhobbies=%E4%B9%92%E4%B9%93%E7%90%83

连接/文件?参数名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的更多相关文章

  1. Eclipse开发Web项目连接MySQL时找不到驱动的解决办法

    当我们使用Eclipse开发Web项目连接MySQL时后台报找不到驱动的错误,如下:解决办法: 1.这时我们首先要检查我们是否导入了连接MySQL数据库的jar包,如图,是否已经将jar包复制到项目下 ...

  2. Eclipse 开发WEB项目所遇问题 WebContent WebRoot

    原文:http://blog.sina.com.cn/s/blog_525960510100jo0j.html 最近在做Web 项目时,新建了一个WEB 项目,如webdemo,eclipse默认的b ...

  3. eclipse 开发web 项目,使用gradle 需要安装的插件

    1.Buildship Gradle 扩展 eclipse IDE 以支持使用 Gradle 构建软件.此解决方案由 Eclipse 基金会提供 2.EGradle Editor (主要用来编写gra ...

  4. Maven(九)Eclipse创建Web项目(简单方式)

    1. 创建Maven项目(以简单方式) 2. 勾选WAR 3. 选择properties->projectFacts 此处的错误可忽略,配置好会会消失,主要缺失web.xml文件 4. 将框中选 ...

  5. (转)Eclipse开发Web项目

    1. 建立最简单的JSP和servlet http://wenku.baidu.com/link?url=bcf8iwB3E5_gjl46WfZAekQUWsps0-G3MAbbKz5totQcvmS ...

  6. eclipse中web项目部署以后jsp的java文件找不到问题(Tomcat配置serverlocations)

    我的开发环境:eclipse kepler (4.3)+tomcat7.0.42. 在我想看eclipse中web项目jsp文件被tomcat转换成java以后的java源文件的位置,发现正常情况下的 ...

  7. Spring Boot 的Maven多模块开发web项目使用外部容器进行部署

    Spring Boot中自带有Tomcat容器,因此Spring Boot项目只需要运行main函数,就可以运行,但是以往的web项目,我们习惯于使用自己安装的Tomcat运行或者使用Tomcat.J ...

  8. spring boot + Thymeleaf开发web项目

    "Spring boot非常适合Web应用程序开发.您可以轻松创建自包含的HTTP应用.web服务器采用嵌入式Tomcat,或者Jetty等.大多数情况下Web应用程序将使用 spring- ...

  9. 使用Spring Boot开发Web项目(二)之添加HTTPS支持

    上篇博客使用Spring Boot开发Web项目我们简单介绍了使用如何使用Spring Boot创建一个使用了Thymeleaf模板引擎的Web项目,当然这还远远不够.今天我们再来看看如何给我们的We ...

随机推荐

  1. ceph 网络配置

    ceph 网络配置 9. 分离 public network 和 cluster network 9.1 分离的好处 (1)提高性能:消除副本创建.数据恢复和再平衡对 public network 的 ...

  2. 踩坑了!使用 @Autowired 注入成功,GetBean 方法却获取不到?!

    本文首发于个人微信公众号:Coder小黑 踩坑了?! 之前推文已经讲过 当@Transactional遇到@CacheEvict,你的代码是不是有bug! 现在要在事务提交之后清除缓存.在Spring ...

  3. FPGA之驱动sdram控制兼容性移植实验

    cb早在2012年就推出了VIP 视频开发板 V1.4  这套开发板是ep2的,摄像头是ov7670,虽然不如当前的vip20强大,但也算是其雏形. 在vip20后期,cb对sdram以及其他模块进行 ...

  4. vue 双语言切换中,data内翻译文字不正常切换的解决方案

    背景 有这么一个登录页面,相关功能如下: 支持双语言,点击切换语言 表单内部有一个自定义的select,里面option的label.value都是的名字由外部提供:其中预设的option的label ...

  5. 让外部的开发机直接访问Kubernetes群集内的服务!

    让外部的开发机直接访问Kubernetes群集内的服务! 1.场景 容器化+K8s编排已经是现在进行时把网站的多个项目设计为云原生(Cloud Native)或老项改造为云原生可以获得诸多能力例如无云 ...

  6. CSS中的变量使用,var()语法

    参考博客:https://blog.csdn.net/qq_34206361/article/details/53690414

  7. django----Sweetalert bulk_create批量插入数据 自定义分页器

    目录 一.Sweetalert使用AJAX操作 二.bulk_create 三.分页器 divmod 分页器组件 自定义分页器的使用 一.Sweetalert使用AJAX操作 ​ sweetalert ...

  8. php5.4.16执行shell脚本

    因为要用到Python脚本,所以打算直接在PHP中直接调用系统命令system(). 要注意两点: 一.PHP5.3以上不存在安全模式,即要直接执行脚本不需要作任何其他配置. 二.system函数格式 ...

  9. 表达式和运算符知识总结(js)

    文章目录: 一. 表达式和语句的区别 二. 自增自减运算符的运算规则 一. 表达式和语句的区别 表达式(expression)是JavaScript中的一个短语,JavaScript解释器会将其计算( ...

  10. Nginx安装(我觉得我这篇可能是全网最清晰的一篇安装步骤了)

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/46aadb8f-5 ...