一、初识javaWeb
1、C/S框架
clientsrever 客户端服务器,需要安装下载软件才能使用
例如:杀毒软件(因为要扫描磁盘)、QQ
2、B/S框架
BrowserServer 浏览器服务器,比如淘宝,微信小程序
相对来讲B/S更有优势,降低了对用户本地设备环境的要求。降低了 程序的维护成本。
3、URL即网址
一个完整的URL由协议,主机地址(域名),资源位置,参数组成
4、Web服务器
5、tomcat部署Web应用
index.html写入前端内容,在eclipse启动tomcat,最终在网页显示
右键7.0—->add and remobved ——>双击web42——>finished——>右键7.0—->start(保持启动状态)—->打开浏览器,输入地址127.0.0.1:8080/web42
6、tomcat默认端口号8080
由于1个服务只用一个端口号,所以修改端口号有如下两种方法
(1)、
(2)、
二、使用jsp生成web界面
JSP9大内置对象
1、out输出对象 | 4、session会话对象 | 7、response响应对象 |
---|---|---|
2、page页面对象 | 5、application全局对象(应用程序对象) | 8、config配置对象 |
3、request请求对象 | 6、pageContext页面上下文对象 | 9、exception异常对象 |
:代表的是范围对象
1、JSP
jsp:java server page,运行在服务器端的java页面,使用HTML嵌套java代码
2、在网页上换行输出代码
<%
String s="沈阳";
for(int i=1;i<5;i++){
//+"<br/>"在网页显示换行输出
out.println(s+i+"<br/>");
}
%>
3、在网页显示当前时间
运用Sting类时的,时间对象SimpleDateFormat
<%
//显示当前的时间
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sd=sdf.format(date);
out.println(sd);
%>
4、JSP执行过程
(1)、JSP文件存储地址
E:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\web42
调用jsp文件中jsp文件存储地址
(2)、java文件存储地址
E:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\web42\org\apache\jsp\pages
jsp编译生成java文件和执行class文件
5、常见错误提示
404错误—-找不到访问的页面或资源
500错误——JSP页面代码有误
页面无法显示—— 未启动Tomcat
三、jsp获取注册信息
1、提交表单的两种方法get/post
获得单个参数的情况:
<form action="page1-success.jsp" method="post">
用户名:<input type="text" name="userName"><br/>
密码:<input type="passWord" name="pwd"><br/>
邮箱:<input type="text" name="email"><br/>
</form>
另一页
<!-- 获得page1的三个值 -->
<%
//处理中文乱码解决方案 设置request和response的编码格式
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String userName=request.getParameter("userName");
String pwd=request.getParameter("pwd");
String email=request.getParameter("email");
%>
用户名:<%=userName %><br/>
密码:<%=pwd %><br/>
邮箱:<%=email %><br/>
由测试看出get和post的区别:
get安全性低是因为,get方法显示的url可以随意修改;
2、获得多个参数的情况
<form action="page1-success.jsp" method="post">
用户名:<input type="text" name="userName"><br/>
密码:<input type="passWord" name="pwd"><br/>
邮箱:<input type="text" name="email"><br/>
<!-- 传递多个参数 -->
爱好:<input type="checkbox" name="likes" value="1">篮球
<input type="checkbox" name="likes" value="2">足球
<input type="checkbox" name="likes" value="3">排球
<input type="checkbox" name="likes" value="4">游泳
<input type="submit" value="注册">
</form>
另一页面
<%
//传递多个参数的情况
String[] likes=request.getParameterValues("likes");
%>
<%--多个参数时需要遍历 --%>
爱好:<%
//非空判断,以防出现空指针异常
if(likes!=null){
for(int i=0;i<likes.length;i++){
if(likes[i].equals("1")){
out.print("篮球、");
}else if(likes[i].equals("2")){
out.print("足球、");
}else if(likes[i].equals("3")){
out.print("排球、");
}else {
out.print("游泳");
}
%>
<%
} }
%>
3、转发
//转发——跳转界面到index,可以携带参数 /只能转发到本项目地址,地址栏不发生改变,可以传值
//request.getRequestDispatcher(“index.jsp”).forward(request, response);
4、重定向
//重定向方法/可以定位到任何地址,地址栏发生改变,不可以传值
//response.sendRedirect("index.jsp");
//response.sendRedirect("http://www.baidu.com");
可所以跳转到本项目地址或外部地址
//index.jsp中获得page1的参数
String userName=request.getParameter("userName");
out.print(userName+"<br/>");
5、转发和重定向的区别?
(1)、转发:URL不变,不会重新发送请求,自身携带请求,可以传值,地址只能是本项目地址;
(2)、重定向:URL变化,会重新发送请求,不携带请求,不能传值,但是可以重定向到任意地址上。
6、setAttribute/getAttrbute
如果用户名输入admin,则在index页面提示不能用admin作为用户名,入过输入其他,就在page1-success上正常显示
<%
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String userName=request.getParameter("userName");
String pwd=request.getParameter("pwd");
String email=request.getParameter("email");
//传递多个参数的情况
String[] likes=request.getParameterValues("likes");
if(userName.equals("admin")){
request.setAttribute("msg", "不能使用管理员admin作为用户名");
request.getRequestDispatcher("index.jsp").forward(request,response);
}
%>
用户名:<%=userName %><br/>
密码:<%=pwd %><br/>
邮箱:<%=email %><br/>
<%--多个参数时需要遍历 --%>
爱好:<%
//非空判断,以防出现空指针异常
if(likes!=null){
for(int i=0;i<likes.length;i++){
if(likes[i].equals("1")){
out.print("篮球、");
}else if(likes[i].equals("2")){
out.print("足球、");
}else if(likes[i].equals("3")){
out.print("排球、");
}else {
out.print("游泳");
}
%>
<%
} }
%>
index.jsp中
<%
String msg=(String)request.getAttribute("msg");
out.print(msg);
%>
四、会话session
1、登录信息存放到session中
<body>
<%
//判断回到登录界面登录失败字体显示红色
Object msg=request.getAttribute("msg");
if(msg != null){
%>
<p style="color:red"><%=msg %></p>
<%
}
%>
<form action="login-success.jsp" method="post">
用户名:<input type="text" name="userName"><br/>
密码:<input type="passWord" name="pwd"><br/>
<input type="submit" value="登录">
</form>
</body>
<body>
<%
//获得
String userName=request.getParameter("userName");
String pwd=request.getParameter("pwd");
if("tom".equals(userName) && "123456".equals(pwd)){
//登录成功--跳转到index,登录前将信息存到session
session.setAttribute("uName", userName);
request.getRequestDispatcher("index.jsp").forward(request, response);
}else{
//登录失败--返回登录界面
request.setAttribute("msg", "登录失败");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
%>
</body>
2、在页面显示欢迎,XXX
由于存到session中,在每个页面填入都可以显示,任何页面随时都可以取
session所用在服务器端,tomcat只要关闭,session清空
<body>
<%
//获得
String userName=request.getParameter("userName");
String pwd=request.getParameter("pwd");
if("tom".equals(userName) && "123456".equals(pwd)){
//登录成功--跳转到index,登录前将信息存到session
session.setAttribute("uName", userName);
request.getRequestDispatcher("index.jsp").forward(request, response);
}else{
//登录失败--返回登录界面
request.setAttribute("msg", "登录失败");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
%>
</body>
另一页
<body>
<%
//判断回到登录界面登录失败字体显示红色
Object msg=request.getAttribute("msg");
if(msg != null){
%>
<p style="color:red"><%=msg %></p>
<%
}
%>
<form action="login-success.jsp" method="post">
用户名:<input type="text" name="userName"><br/>
密码:<input type="passWord" name="pwd"><br/>
<input type="submit" value="登录">
</form>
</body>
跳转页
<%
//获得session值,目的是显示欢迎XXXX
Object uName=session.getAttribute("uName");
%>
<%--判断目的是显示欢迎XXX 并显示绿色--%>
<%if(uName != null){%>
<p style="color:green">欢迎,<%=uName %></p>
<% } %>
在page1页面
</head>
<% //放到page1中
//获得session值,目的是显示欢迎XXXX
Object uName=session.getAttribute("uName");
%>
<%--判断目的是显示欢迎XXX --%>
<%if(uName != null){%>
<p style="color:green">欢迎,<%=uName %></p>
<% } %>
<body>
3、清空session的方法
清空后,任何界面将看不到欢迎内容
<body>
<%
//清空session 任何界面都看不到欢迎内容
//第一种 //返回登录页--重定向
session.invalidate();
response.sendRedirect("login.jsp");
//第二种,删除指定的
//session.removeAttribute("uName");
%>
</body>
4、设置session有效期
五、cookie
在登录成功之前
判断条件里写入
//写入cookie 实现下次登录前,有默认用户名
Cookie cookie = new Cookie("cookieUser",userName);
response.addCookie(cookie);
在login页面中,写入
<body>
<%
//取出cookie
Cookie[] cookies=request.getCookies();
String userName="";
for(int i=0;i<cookies.length;i++){
//找到cookieUser这个值
if(cookies[i].getName().equals("cookieUser")){
userName = cookies[i].getValue();
}
}
六、面试题
1.get和post的区别
使用get方法,参数会显示在URL中,有长度限制,由于可以随意更改URL,所以安全性低,URL可以传播;
使用post方法,参数不会显示在URL中,没有长度限制,安全性高,URL不可以传播;
2.转发和重定向的区别
(1)、转发:URL不变,不会重新发送请求,自身携带请求,可以传值,地址只能是本项目地址;
(2)、重定向:URL变化,会重新发送请求,不携带请求,不能传值,但是可以重定向到任意地址上。
3.session和cookie区别
session作用在服务器端,保存的是对象,会话会随着tomcat的结束而失效,通常保存重要信息,内置对象
cookie作用在客户端,保存的是字符串,可长期保存在客户端。不是内置对象
七、application全局作用域
1、application可实现计数器的功能-
——-哪个页面的访问量高
<body>
<%
//实现计数器,哪个页面的访问次数
Object countObject=application.getAttribute("count");
if(countObject==null){
application.setAttribute("count", 1);
}else{
int count=(Integer)countObject;
application.setAttribute("count", count+1);
}
%>
<h2>页面被访问了多少次<%=application.getAttribute("count") %>次</h2>
</body>
2、作用域的对比
page< request
page:只在当前页面有效,一旦离开当前页面,则无法访问;
request:存储数据仅存在一个请求中可用,请求中有单个页面或者多个页面,请求失效才会失效;
session: 会话结束才会失效
application: 用户共享数据,所有人都可以请求,只要web停止才会终止;