B/S架构
程序架构
设计通过远程访问服务器的架构时,有两种程序架构:C/S和B/S。
C/S的典型使用是PC端上的QQ软件。B/S的典型例子是使用浏览器访问淘宝页面。
工作原理
URL
计算机通过统一资源定位符URL(Uniform Resource Locator)实现资源访问。它是唯一能识别Internet上具体的计算机、目录或文件夹位置的命名约定。
URL从左到右分为四个部分:协议部分,主机地址,目标资源地址,传递的参数。
Web服务器
Web服务器是可以向发出请求的浏览器提供文档的程序,它提供网上的信息浏览服务。
- 常用的Web服务器
- Microsoft:IIS
- Apache:Tomcat
- Oracle:WebLogic
- IBM:WebSphere
- Nginx
jsp概述
jsp简介
JSP(Java Server Pages)是运行在服务器端的Java页面,它是用HTML嵌套Java代码实现。
工作原理
使用jsp实现输出
- 使用<%@ %>来设置一个jsp页面的属性
⚫可以通过import来导入java包
⚫可以设置字符编码集 - <%out.print();%>或<%out.println(); %>和<%= %>实现页面输出。
- JSP可以添加的注释:
⚫ HTML注释:<!–HTML注释-- >
⚫JSP注释:<%–JSP注释–%>
⚫JSP脚本中注释:<%//单行注释%>、 <%/多行注释/%>
jsp输出的理解
一个jsp中的文件代码可以先被看做在主函数中的java代码,这些代码在控制台上打印的内容再被视为html处理。
Java和html混写
<html>
<head>
<meta charset="UTF-8">
<title></title>
<%
List names=new ArrayList();
names.add("jack");
names.add("rose");
names.add("tom");
List ages=new ArrayList();
ages.add(20);
ages.add(19);
ages.add(18);
%>
</head>
<body>
<!-- 项目页面中输出一个表格 -->
<!-- java 代码中输出html标签 -->
<%
out.print("<table>");
out.print("<tr><td>编号</td><td>姓名</td><td>年龄</td></tr>");
for(int i=0;i<names.size();i++){
out.print("<tr><td>"+i+"</td><td>"+names.get(i)+"</td><td>"+ages.get(i)+"</td></tr>");
}
out.print("</table>");
%>
<hr />
<!-- 上面是使用Java来输出html标签 -->
<!-- 一般情况下推荐将Java代码和html标签分离 -->
<table>
<tr><td>编号</td><td>姓名</td><td>年龄</td></tr>
<%
for(int i=0;i<names.size();i++){
%>
<tr><td><%=i %></td><td><%=names.get(i) %></td><td><%=ages.get(i) %></td></tr>
<%} %>
</table>
<%
Map<Integer,String> cts = new HashMap<Integer,String>();
cts.put(1, "玩具");
cts.put(2, "文具");
cts.put(3, "书籍");
%>
</body>
</html>
Web程序常见错误:
- 404错误—找不到访问的页面或资源
⚫运行时,URL输入错误
⚫将页面放在WEB-INF下
⚫外部启动Tomcat,未部署项目 - 500错误----JSP页面代码有误
⚫JSP页面代码有错误 - 页面无法显示
⚫未启动Tomcat
jsp页面之间实现数据的传递
表单提交数据
表单提交数据的简单例子
<form action="/web02/login1.jsp" method="get">
用户名称:<input type="text" name="cu_name" /><br />
用户电话:<input type="password" name="cu_phone" /><br />
<!-- checkbox后面怎么拿 -->
兴趣爱好:
<input type="checkbox" name="happy" value="1" />足球
<input type="checkbox" name="happy" value="2" />篮球
<input type="checkbox" name="happy" value="3" />网球
<input type="checkbox" name="happy" value="4" />排球
<br />
<input type="submit" value="登录" />
</form>
注意: 无论是action根据绝对路径还是相对路径跳转,均可以跳转成功。
提交数据的方式
比较项 | get | post |
---|---|---|
参数出现在URL中 | 是 | 否 |
长度限制 | 有 | 无 |
安全性 | 低 | 高 |
URL可传播 | 是 | 否 |
request和response
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<%
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String cu_name=request.getParameter("cu_name");
String cu_phone=request.getParameter("cu_phone");
// 假设 用户名是刘德华 密码是9999
// 正确 跳转至欢迎页面,如果不正确 则返回登录页面
if("刘德华".equals(cu_name) && "9999".equals(cu_phone)){
// 跳转到欢迎界面
//System.out.println(cu_name);
//response.sendRedirect("/web02/welcome.jsp?cu_name="+cu_name); //显示的将用户名传递
//.getRequestDispatcher("")将页面跳转 里面接受页面的跳转地址
//.forward(request, response) 将当前页面中的 req和resp两个对象 直接传递给下一个页面
request.getRequestDispatcher("welcome.jsp").forward(request, response);
// 注意 对于服务器的跳转 是相对路径 相对当前页面(login1.jsp)
/*
response跳转
http://localhost:8080/web02/welcome.jsp?cu_name=???
request跳转
http://localhost:8080/web02/login1.jsp?cu_name=刘德华&cu_phone=9999
response属于客户端行为 是由客户端(是浏览器行为)来发起跳转请求的
request属于服务器端的行为 是由服务器内部来进行跳转的 如果服务器跳转了页面的地址 浏览器不知道 所以浏览器的地址还停留在上一个页面的地址上
*/
}else{
// 返回登录界面
//response.sendRedirect(""); 接收1个字符串的参数 为需要跳转网页的地址
response.sendRedirect("/web02");
// 另外的方法 用的比较少 不推荐这么做
//out.print("<script type='text/javascript'>location.href='/web02'</script>");
}
%>
</head>
<body>
</body>
</html>