使用Eclipse开发Web项目(JSP)——简单登录无sql
Posted Neumann97
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Eclipse开发Web项目(JSP)——简单登录无sql相关的知识,希望对你有一定的参考价值。
2.在Eclipse中创建的Web项目:
浏览器可以直接访问webContent中的文件
其中的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.
1 <% 2 局部变量、java语句 3 %>
ii.
1 <%! 2 全局变量、定义方法 3 %>
iii.
1 <%= 2 输出表达式 3 %>
修改web.xml、配置文件、java需要重启tomcat服务,但是如果修改Jsp/html/js/css代码不需要重启
注意:out.println()不能回车;要想回车:<br>
,即out.print() <%= %>
可以直接解析html代码
b.指令
page指令
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" import="java.util.Date"%>
属性:
language:jsp页面使用的脚本语言
import:导入类
pageEnconding:jsp文件自身编码 jsp -> java
contentType:浏览器解析自身的编码
c.注释
html注释
1 <!--可以被客户通过浏览器查看源码所观察到-->
java注释
1 // 2 /*...*/
jsp注释
1 <%-- --%>
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
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <form action="show.jsp"> 11 用户名:<input type="text" name="uname"/><br/> 12 密 码:<input type="password" name="upwd"/><br/> 13 年 龄:<input type="text" name="uage"/><br/> 14 爱 好:<br/> 15 <input type="checkbox" name="uhobbies" value="足球"/>足球 16 <input type="checkbox" name="uhobbies" value="篮球"/>篮球 17 <input type="checkbox" name="uhobbies" value="乒乓球"/>乒乓球<br/> 18 <input type="submit" value="注册"> 19 </form> 20 </body> 21 </html>
show.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <% 11 //设置编码 12 request.setCharacterEncoding("utf-8"); 13 String name = request.getParameter("uname"); 14 int age = Integer.parseInt(request.getParameter("uage")); 15 String pwd = request.getParameter("upwd"); 16 17 String[] hobbies = request.getParameterValues("uhobbies"); 18 %> 19 注册成功,信息如下:<br/> 20 姓名:<%=name %><br/> 21 年龄:<%=age %><br/> 22 密码:<%=pwd %><br/> 23 <% 24 if(hobbies !=null){ //控制没有爱好则不显示 25 out.print("爱好:"); 26 for(String hobby:hobbies){ 27 out.print(hobby + " "); 28 } 29 } 30 %> 31 </body> 32 </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
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <form action="check.jsp" method="post"> 11 用户名:<input type="text" name="uname"><br/> 12 密码:<input type="password" name="upwd"><br/> 13 <input type="submit" value="登录"><br/> 14 </form> 15 </body> 16 </html>
check.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <% 11 request.setCharacterEncoding("utf-8"); 12 String name = request.getParameter("uname"); 13 String pwd = request.getParameter("upwd"); 14 if(name.equals("zs")&&pwd.equals("abc")){ 15 //通过重定向跳转,结果导致数据丢失 16 //response.sendRedirect("success.jsp"); 17 //请求转发跳转:可以获取到数据,并且地址栏没有改变(仍然保留转发时的页面) 18 request.getRequestDispatcher("success.jsp").forward(request, response); 19 }else{ 20 //登录失败 21 out.print("用户名或密码错误!"); 22 } 23 %> 24 </body> 25 </html>
success.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 登陆成功!<br/> 11 欢迎您: 12 <% 13 String name = request.getParameter("uname"); 14 out.print(name); 15 %> 16 </body> 17 </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
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <%! 11 String uname; 12 %> 13 <% 14 Cookie[] cookies = request.getCookies(); 15 for(Cookie cookie:cookies){ 16 if(cookie.getName().equals("uname")){ 17 uname = cookie.getValue(); 18 } 19 } 20 %> 21 <form action="check.jsp" method="post"> 22 用户名:<input type="text" name="uname" value="<%=(uname==null?"":uname)%>"><br/> 23 密码:<input type="password" name="upwd"><br/> 24 <input type="submit" value="登录"><br/> 25 </form> 26 </body> 27 </html>
check.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <% 11 request.setCharacterEncoding("utf-8"); 12 String name = request.getParameter("uname"); 13 String pwd = request.getParameter("upwd"); 14 15 //将用户名加入到Cookie中 16 //Cookie cookie = new Cookie("key","value"); 17 Cookie cookie = new Cookie("uname",name); 18 response.addCookie(cookie); 19 20 response.sendRedirect("result.jsp"); 21 22 /* if(name.equals("zs")&&pwd.equals("abc")){ 23 //通过重定向跳转,结果导致数据丢失 24 //response.sendRedirect("success.jsp"); 25 //请求转发跳转:可以获取到数据,并且地址栏没有改变(仍然保留转发时的页面) 26 request.getRequestDispatcher("success.jsp").forward(request, response); 27 }else{ 28 //登录失败 29 out.print("用户名或密码错误!"); 30 } */ 31 %> 32 </body> 33 </html>
result.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 仅供测试使用 11 </body> 12 </html>
pageContext(后面讲)
application(后面讲)
config(后面讲)
page(后面讲)
exception(后面讲)
8.统一请求的编码request
get方式请求
如果出现乱码的解决方法:
a.统一改每一个变量的编码
new String(旧编码,新编码)
1 name = new String(name.getBytes("iso-8859-1"),"utf-8")
b.修改server.xml,一次性的更改tomcat默认get提交方式的编码(utf-8)
建议使用tomcat时,首先在server.xml中统一get方式的编码
1 <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/> 2 <!--添加URIEncoding="UTF-8"以后所有的get方式都是utf-8-->
post方式请求
1 <% 2 //设置编码 3 request.setCharacterEncoding("utf-8"); 4 %>
tomcat7(iso-8859-1)
tomcat8(utf-8)
以上是关于使用Eclipse开发Web项目(JSP)——简单登录无sql的主要内容,如果未能解决你的问题,请参考以下文章