程序架构分类
B/S:浏览器--服务器
C/S:客户端--服务器![](https://i-blog.csdnimg.cn/direct/437d690502b843b3be7c4ee44bf6787f.png)
Client/Server架构,即客户端/服务器架构。是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,需要安装客户端才可进行管理操作。
比如: QQ 微信 等 他们属于C/S默认,Client 需要再自己电脑上安装QQ软件,通过网络可以QQ的服务器
Web服务器Tomcat
目录 | 说明 |
---|---|
/bin | 存放各种平台下用于启动和停止Tomcat的脚本文件 |
/conf | 存放Tomcat服务器的各种配置文件 |
/lib | 存放Tomcat服务器所需的各种JAR文件 |
/logs | 存放Tomcat的日志文件 |
/temp | Tomcat运行时用于存放临时文件 |
/webapps | 当发布Web应用时,默认情况下会将Web应用的文件存放于此目录中 |
/work | Tomcat把由JSP生成的Servlet放于此目录下 |
修改web项目初始化启动页面
在web.xml中添加:
<welcome-file-list>
<welcome-file>/index.html</welcome-file>
</welcome-file-list>
JSP页面
Java Server Pages(HTML+JS+CSS+Java):运行在服务器端的Java页面。
使用HTML嵌套Java代码实现,工作原理:
脚本语言
\<%@page%>
用来设置一个JSP页面的属性
<%out.print();%>
或 <%out.println();%>
实现页面输出
使用<%out.print();%>
输出时,显示数据来自于数据库。
JSP可以添加的注释
HTML注释:<!--HTML注释-->
JSP注释:<%--JSP注释--%>
JSP脚本中注释:<%//单行注释%><%/多行注释/%>
page指令通过属性定义了JSP的特性,实现与JSP容器的通信
<%@ page language="属性值" import="属性值" contentType="属性值"%>
属性 | 说明 |
---|---|
language | 指定JSP页面使用的脚本语言 |
import | 通过该属性来引用脚本语言中使用到的类文件 |
contentType | 用来指定页面的MIME类型,以及字符编码方式 |
page指令 contentType文档类型和编码 language使用语言
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
引入Java包
<%@ import="StudentServer" %>
注释
<%-- 注释 --%>
向页面输出
<% out.print(name); %>
方法定义
<%! 方法 %>
out对象是JSP的内置对象,无需实例化即可使用
属性 | 说明 |
---|---|
向页面输出显示 | |
println | 向页面输出显示,在结尾处添加换行 |
Web程序常见错误
jsp运行到网页后出现404报错
404 not found
运行时,URL输入错误 将页面放在WEB-INF下(路径原因)
外部启动Tomcat,未部署项目
500 错误:JSP页面代码有误
页面无法显示:未启动Tomcat
错误替换
在web.xml下:
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.html</location>
</error-page>
JSP数据传递保存
获取表单
请求对象:request
public String getParameter(String name)
String userName= request.getParameter("userName");
//存入值
request.setAttribute("name","张三");
//获取值
String name = request.getAttribute("name").toString();
get与post区别
比较项 | GET | POST |
---|---|---|
参数出现在URL中 | 是 | 否 |
长度限制 | 有 | 无 |
安全性 | 低 | 高 |
URL可传播 | 是 | 否 |
request对象
方法名称 | 说明 |
---|---|
String getParameter(String name) | 根据表单组件名称获取提交数据 |
String[ ] getParameterValues(String name) | 获取表单组件对应多个值时的请求数据 |
void setCharacterEncoding(Stringcharset) | 指定每个请求的编码 |
RequestDispatcher getRequestDispatcher(String path) | 返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求 |
JSP九个内置对象
1、request对象
request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
2、response对象
response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。
3、session对象
session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为“Key/value”。 session对象的value可以使用复杂的对象类型,而不仅仅局限于字符串类型。
4、application对象
application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。
5、out 对象
out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
6、pagecontext 对象
pageContext 对象的作用是取得任何范围的参数,通过它可以获取JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在]SP页面中可以直接使用 pageContext对象。
7、config 对象
config对象的主要作用是取得服务器的配置信息。通过 pageconext对象的 getServletConfig() 方法可以获取一个 config对象。当一个Servlet初始化时,容器把某些信息通过 config对象传递给这个 Servlet。开发者可以在web.xml文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
8、page 对象
page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于java编程中的 this 指针。
9、exception对象
exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true"的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和java的所有对象一样,都具有系统提供的继承结构。 exception 对象几乎定义了所有异常情况。在java程序中,可以使用try/catch关键字来处理异常情况;如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。
JSP四个作用域
1.pageContext是当前页面;
2.request/response是当前请求周期:request是一次请求(客户端向服务器),response是一次响应(服务器向客户端);
3.session是一次会话(一次请求,一次响应);
4.application是全局范围,只要app存在就有作用。
中文乱码
JSP中默认使用的字符编码方式:iso-8859-1,不支持中文
常见的支持中文的编码方式
编码方式 | 收录的字符 |
---|---|
gb2312 | 常用简体汉字 |
gbk | 简体和繁体汉字 |
utf-8 | 所有国家需要的字符 |
解决中文乱码
设置请求和响应的编码方式
post请求出现乱码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
<%@ page language="java" contentType="text/html; charset=utf-8"%>
get请求出现乱码
-
治标的方法:new String( s.getBytes("iso-8859-1"), "utf-8" );
-
治本的方法:配置tomcat\conf\server.xml文件
-
URIEncoding="UTF-8"
-
useBodyEncodingForURI="true"
-
转发与重定向
request转发
RequestDispatcher对象
forward()方法
1、request.getRequestDispatcher("url").forward(request, response)
2、<jsp:forward page="url" />
response重定向
将用户请求重新定位到一个新的URL
response.sendRedirect("url")
区别
//转发
request.getRequestDispatcher(B页面路径).forward(request, response);
//重定向
response.sendRedirect("url");
转发url没有发生变化,而重定向会
转发不会重新发送请求,重定向会
转发可以携带参数,而重定向不可以
转发只可跳转当前项目路径,而重定向可以跳转任意url
重定向是客户端行为,转发是服务器行为
比较项 | 转发 | 重定向 |
---|---|---|
URL变化 | 否 | 是 |
重新发出请求 | 不会 | 会 |
是否携带请求 | 是 | 否 |
目标URL要求 | 仅本Web应用 | 任意URL |
session
作用域是当前会话,关闭浏览器就结束当前会话,不关闭就不结束。每个会话都有一个会话id:sessionid
//存入值
session.setAttribute("name","张三");
//输出sessionID
out.print(session.getID());
//获取值
String name = session.getAttribute("name").toString();
//清空session中name键的值
session.removeAttribute("name");
//设置60s非session活动时间后清除session中的值
session.setMaxInactiveInterval(60);
application
作用于整个app,只有服务器关闭的时候会结束。
//存入值
application.setAttribute("name","张三");
//获取值
String name = application.getAttribute("name").toString();
servlet中获取:
ServletContext application = this.getServletContext();
cookie
cookie以文件方式保存数据,如记住密码
//cookie的使用
//如果有中文
username = URLEncoder.encode(username,"utf-8");
Cookie cookie = new Cookie("username",username);
//设置路径,这个路径即该工程下都可以访问该Cookie 如果不设置路径,那么只有设置该Cookie路径及其子路径可以访问
cookie.setPath("/");
//设置cookie生命周期
cookie.setMaxAge(60*60);
response.addCookie(cookie);
//获取cookie
Cookie[] cookies = request.getCookies();
if(cookies!=null && cookies.length!=0){
for(int i=0;i<cookies.length;i++){
System.out.println(cookies[i].getName());
if(cookies[i].getName().equals("username")){
username = cookies[i].getValue();
username = URLEncoder.decode(username,"utf-8");
}
}
}