一、初识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,登录前将信息存到sessionsession.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,登录前将信息存到sessionsession.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值,目的是显示欢迎XXXXObject uName=session.getAttribute("uName");%><%--判断目的是显示欢迎XXX 并显示绿色--%><%if(uName != null){%><p style="color:green">欢迎,<%=uName %></p><% } %>在page1页面</head><% //放到page1中//获得session值,目的是显示欢迎XXXXObject 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><%//取出cookieCookie[] 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停止才会终止;
