目录
Java基础
Web前端:
页面结构:html
Servlet、jsp(Java Server Page)=html+java
页面样式:css(Cascading Style Sheet,层叠样式表)
页面交互:js(javascript)、jQuery、AJAX
XML文件
MySQL数据库
JDBC(Java DataBase Connectivty)
JavaWeb项目:
一、Http协议:
1.1 概述
1、定义:
对浏览器端和服务器端之间的数据传输的格式规范。
2、查看http协议的工具:
(1)谷歌浏览器:直接右键“检查”(审查元素)->Network
(2)QQ浏览器:
3、Http协议的内容:
请求:从浏览器端发送到服务器端的一个操作。
响应:从服务器端到浏览器端返回一个操作结果。
1.2 请求:
1、请求行:
URL:统一资源定位符;http://localhost:8080/Day29_Demo/hello.do,只能定位网络资源。是URI的子集。
URI:统一资源标记符;用于标记任何资源,可以是本地资源,可以是局域网资源,还可以是互联网资源。
Method(请求方式)——get、post
get:地址栏会自动拼接参数,以?开头,多个参数直接使用&分割;
get请求方式不安全,不适合提交敏感数据;
get请求方式提交参数有限制,不能超过1kB;
如果直接使用浏览器请求,默认提交方式就是get。
post:地址栏不会拼接参数,参数跟在请求的实体内容中;
post提交方式适合提交敏感数据;
post提交的参数没有大小限制。
2、请求头:
3、请求内容:
只有post提交的参数才会放在实体中。
4、HttpServletRequest:
作用在于获取请求数据。
请求行:
request.getMethod() 获取请求方式
request.getRequestURI() 获取请求资源
request.getProtocol 获取http请求的版本
请求头:
request.getHeader(“名称”) 根据请求名称获取请求值
request.getHeaderNames();
实体内容:
request.getParameter(“name”) 根据名称获取请求值
request.getInputStream() 获取请求IO流
1.3 响应:
1、响应行:
状态码:
200:表示请求处理完成并正确返回。
302:表示请求需要进一步的细化。
404:表示用户访问的资源找不到(不存在,存在但无访问权限)。
500:表示服务器的资源发送错误(服务器内部错误)
2、响应头:
3、响应实体:
4、HttpServletResponse:
响应行:
response.setStatus() 设置响应码Status Code
响应头:
response.setHeader(“name”,”value”)
response.setContentType(“text/html;charset=utf-8”)
实体内容:
response.getWriter.write() 发送字符实体内容
response.getOutputStream.write() 发送字节实体内容
二、Servlet转发和重定向:
2.1 转发:
this.getServletContext().getRequestDispatcher("/index.html")
.forward(request, response);
1、地址栏不会发生变化;
2、转发只能转发到当前web应用内的资源;
3、在转发的过程中,可以把数据保存在request域对象中。转发属于浏览器端的一个操作。
2.2 重定向:
response.sendRedirect("index.html");
1、地址栏会发生变化,变成了重定向指定的地址;
2、重定向可以跳转到当前的web应用的地址,也可以外部网站域名,还可以是另外一个web应用。重定向属于服务器端的一个处理。
3、在重定向的过程中,不能通过request域对象保存数据的。
if (dbAdmin == null) { // 账号不存在 // System.out.println("账号不存在!"); // 1.转发: // this.getServletContext().getRequestDispatcher("/error.html") // .forward(request, response); // 重定向: response.sendRedirect("error.html"); } else { if (password.equals(dbAdmin.getPassword())) {// 账号存在,并且密码正确 // System.out.println("登录成功!"); // 转发 // this.getServletContext().getRequestDispatcher("/index.html") // .forward(request, response); // 重定向: response.sendRedirect("index.html"); } else { // System.out.println("密码错误!!!"); // 转发: // this.getServletContext().getRequestDispatcher("/error.html") // .forward(request, response); // 重定向: response.sendRedirect("http://www.baidu.com"); } } |
三、Servlet路径问题:
3.1 映射路径:
<servlet> <servlet-name>AdminServlet</servlet-name> <servlet-class>com.bw.servlet.AdminServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AdminServlet</servlet-name> <url-pattern>/login.do</url-pattern> </servlet-mapping> |
url-pattern:浏览器url中出现
精准匹配:http://localhost:8080/Day29_Demo/login.do
模糊匹配:/* http://localhost:8080/Day29_Demo/任意路径
/xxxx/* http://localhost:8080/Day29_Demo/xxxx/任意路径
*.后缀名 意味着使用该特定的后缀名即可访问该servlet。
*.do
*.action
*.html(伪静态)
注意:
1、url-pattern要么以/开头,要么以*开头;
2、不能同时使用两种模糊匹配,比如/servlet/*.do是非法的。
3、当输入的url有多个servlet同时被匹配的情况下,
精准匹配优先(长得最像优先被匹配)
以后缀结尾的模糊url-pattern优先级最低
3.2 缺省路径:
<url-pattern>/</url-pattern>
是Tomcat服务器内置的一个路径,该路径对应的是DefaultServlet(缺省Servlet),用于解析web应用的静态资源文件。
http://localhost:8080/Day29_Demo/login1.html 如何读取文件?
1、到当前的web应用的web.xml文件中查找是否有匹配的url-pattern
2、如果没有匹配的url-pattern,则交给Tomcat内置的DefaultServlet处理
3、DefaultServlet会到web应用根目录找login1.html文件
4、如果能够找到,则读取该文件内容返回给浏览器现实
5、如果找不到,返回404页面错误。
先找动态资源,后找静态资源。
四、会话管理技术:
4.1 软件中会话:
打开浏览器->浏览登录页面->访问一些服务器的内容->关闭浏览器
登录场景:
打开浏览器->进入登录页面->输入登录信息->访问到用户主页(显示用户名)
修改密码
下订单
删除订单
修改收货地址
->关闭浏览器
问题:登录会话过程中产生的数据是如何保存的?
域对象:实现资源之间数据共享。request、Cookie、Session
4.2 会话技术:
Cookie技术:会话数据保存在浏览器端
Session技术:会话数据保存在服务器端。
五、Cookie技术:
5.1 Cookie技术的核心:
Cookie类:
1、构造方法
Cookie(String name,String value)
2、Cookie的设置:
设置Cookie的有效时间(单位是秒):void setMaxAge(int expiry)
设置Cookie的有效访问路径:void setPath(String path)
设置Cookie的值:void setValue(String newValue)
3、发送Cookie到浏览器保存
void response.addCookie(Cookie cookie)
4、浏览器接收Cookie
Cookie[] request.getCookies()
5.2 Cookie技术的原理:
1、服务器创建Cookie对象,把会话数据保存到Cookie对象
2、服务器发送Cookie对象给浏览器
3、浏览器得到服务器发送的Cookie对象后保存在浏览器的缓存
4、下次访问的时候会带着Cookie对象
5、服务器接收从浏览器带来的Cookie信息。
5.3 案例——显示用户上次访问时间:
public class HistoryServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String currentTime = sdf.format(new Date()); // 取得Cookie数据 Cookie[] cookies = request.getCookies(); String lastTime = ""; if (cookies != null && cookies.length > 0) { for (Cookie c : cookies) { if ("lastTime".equals(c.getName())) { lastTime = c.getValue(); response.getWriter().write( "欢迎回来,您上次的访问时间为:" + lastTime + ",当前时间为:" + currentTime); c.setValue(currentTime); c.setMaxAge(24 * 3600); response.addCookie(c); break; } } } if (cookies == null || lastTime == null || lastTime == "") { response.getWriter().write("您是首次访问本网站,当前时间为:" + currentTime); Cookie cookie = new Cookie("lastTime", currentTime); cookie.setMaxAge(24 * 3600); response.addCookie(cookie); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } |