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. 第4节:Java基础 - 必知必会(中)

    第4节:Java基础 - 必知必会(中) 本小节是Java基础篇章的第二小节,主要讲述抽象类与接口的区别,注解以及反射等知识点. 一.抽象类和接口有什么区别 抽象类和接口的主要区别可以总结如下: 抽象 ...

  2. BZOJ 1861书架

    小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下一本.由于这些书太有吸引 ...

  3. 洛谷 题解 P2296 【寻找道路】

    Problem P2296 [寻找道路] solution 首先声明,这题我用了spfa,而: 关于spfa:它死了. 杀手: NOI 2018−T1 出题人 感谢出题人,没有卡spfa 用时: 20 ...

  4. scikit-learn与数据预处理

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  5. 基于RT-Thread的人体健康监测系统

    随着生活质量的提高和生活节奏的加快,人们愈加需要关注自己的健康状况,本项目意在设计一种基于云平台+APP+设备端的身体参数测试系统,利用脉搏传感器.红外传感器.微弱信号检测电路等实现人体参数的采集,数 ...

  6. mini_magick上传图片

    rails上传图片需要用到的gem: gem 'carrierwave'gem 'mini_magick' 在项目Gemfil中添加上面的两个gem,然后bundle install 然后创建modl ...

  7. Elasticsearch系列---初识搜索

    概要 本篇主要介绍搜索的报文结构含义.搜索超时时间的处理过程,提及了一下多索引搜索和轻量搜索,最后将精确搜索与全文搜索做了简单的对比. 空搜索 搜索API最简单的形式是不指定索引和类型的空搜索,它将返 ...

  8. ssh jail

    useradd -s /sbin/nologin -M updateuserpasswd updateusermkdir /home/updatechown root:root /home/updat ...

  9. 京东云携手HashiCorp,宣布推出Terraform Provider

    2019年4月23日消息,京东云携手云基础设施自动化软件的领导者HashiCorp,宣布推出Terraform Provider for JD Cloud,这意味着用户能够在京东云上轻松使用简单模板语 ...

  10. Spring Boot 部署浅析(jar or war)

    对于传统的 ssm 或者 ssh 项目的部署,一般会打包成war包,或者是一个编译好的文件夹,再放到 tomcat 的 webapps 目录下,如果是 war 包,会自动解压出来.而 Spring B ...