B/S架构:浏览器/服务器
- 程序完全部署在服务器上
- 使用浏览器访问服务器
- 无需单独安装客户端软件
URL
Uniform Resource Locator:统一资源定位符
GET | POST |
---|---|
/test/index.jsp?name1=value1&name2=value2 | POST /test/index.jsp HTTP/1.1数据库包 |
传送数据量较小 | 传送数据量无限制 |
传输数据在URL可见 | 传输数据在URL不可见 |
安全性低 | 安全性高 |
能被缓存 | 不能被缓存 |
HTTP状态码
浏览器向服务器发出请求后,服务器会返回响应信息
状态码 | 消息 | 描述 |
---|---|---|
200 | OK | 请求成功 |
302 | Found | 所请求的页面已经转移至新的url |
400 | Bad Request | 服务器未能理解请求 |
404 | Not Found | 服务器无法找到被请求的页面 |
500 | Internet Server Error | 服务器错误 |
Tomcat 服务器
Tomcat 目录结构
Tomcat 目录结构 | |
---|---|
目录 | 说明 |
/bin | 存放各种平台下用于启动和停止Tomcat的脚本文件 |
/conf | 存放Tomcat服务器的各种配置文件 |
/lib | 存放Tomcat服务器所需的各种JAR文件 |
/logs | 存放Tomcat的日志文件 |
/temp | Tomcat运行时用于存放临时文件 |
/webapps | 当发布Web应用时,默认情况下会将Web应用的文件存放于此目录中 |
/work | Tomcat把由JSP生成的Servlet放于此目录下 |
配置Tomcat
Tomcat官网:https://tomcat.apache.org/
默认端口号:8080
修改默认端口号
- 修改conf目录下的server.xml文件
- 找到<Connector>节点,修改port属性值
修改前代码
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
修改后代码
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
启动Tomcat
binstartup.bat
访问Tomcat主页:http://localhost:8080
停止Tomcat
Ctrl+C 快速停止服务器
binshutdown.bat
部署应用程序到Tomcat的webapps目录
生成war包
直接拷贝Web根目录下所有文件
JSP(Java Server Pages)
运行在服务器端的Java页面
再HTML嵌套Java代码实现
JSP 执行过程
Web容器处理JSP文件请求需要经过3个阶段:
- 翻译阶段:JSP文件会被Web容器中的JSP引擎转换成Java源码
- 编译阶段:Java源码会被编译成可执行的字节码
- 执行阶段:容器接受了客户端的请求后,执行编译成字节码的JSP文件;处理完请求后,容器把生成的页面反馈给客户端进行显示
JSP真身存放目录
JSP生成的Servlet存放在${CATALANA}/work目录下
Page指令
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
import属性值可以重复出现,多个import属性值之间使用逗号:
<%@page import="java.net.*,java.util.*,java.sql.*"%>
include指令
include指令表示静态包含,即目的是把多个JSP合并成一个JSP文件
静态包含:当hel.jsp页面包含了lo.jsp页面后,在编译hel.jsp页面时,需要把hel.jsp和lo.jsp页面合并成一个文件,然后再编译成Servlet(Java文件)
JSP九大内置对象
- out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;
- config(ServletConfig):对应“真身”中的ServletConfig;
- page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象;
- pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象;
- exception(Throwable):只有在错误页面中可以使用这个对象;
- request(HttpServletRequest):即HttpServletRequest类的对象;
- response(HttpServletResponse):即HttpServletResponse类的对象;
- application(ServletContext):即ServletContext类的对象;
- session(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session。
请求对象 request
requset对象获取数据的常用方法 | |
---|---|
getParameter(String name) | 返回指定名称参数的值,返回值类型为String类型,若无对应名称的参数,返回NULL |
getParameterValues(String name) | 返回一组具有相同名称的参数的值,返回类型为String类型的数组 |
//HTML代码:
<input type="text" name="userName" />
//JSP代码:
String userName = request.getParameter("userName");
//获取同名的多个参数
String[] mailIds=request.getParameterValues("mailId");
if(mailIds!=null&&mailIds.length!=0){
//循环mailIds访问提交的数据
}else{
//未提交与参数mailId相关的数据
}
request对象常用方法
方法名称 | 说明 |
---|---|
String getParameter(String name) | 根据表单组件名称获取提交数据 |
String[ ] getParameterValues(String name) | 获取表单组件对应多个值时的请求数据 |
void setCharacterEncoding(String charset) | 指定每个请求的编码 |
RequestDispatcher getRequestDispatcher(String path) | 返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求 |
设置请求和响应的编码方式
//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" );
治本的方法:配置tomcatconfserver.xml文件
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
在请求request中存取属性
存值:setAttribute()方法的语法格式如下:
public void setAttribute(String name,Object o);
该方法没有返回值,参数name表示属性名称,参数o表示属性的值,为Object类型.
//直接使用request对象调用
request.setAttribute("mess", "注册失败");
取值:getAttribute()方法的语法格式如下:
public Object getAttribute(String name);
1、在使用属性值的时候要做非空判断,否则会出现空指针异常
2、它的返回值类型是Object类型,需要做数据类型的转换
String mess=(String)request.getAttribute("mess");
if(mess!=null){
//在请求中取到"mess"属性对应的属性值,正常使用mess数据
}else{
//在请求中没有取到"mess"属性对应的属性值,使用备选方案
}
四大作用域
所谓“作用域”就是“信息共享的范围”,也就是说一个信息能够在多大的范围内有效。4个JSP内置对象的作用域分别为:application、session、request、page 。JSP内置对象作用域表如下:
名称 | 作用域 |
---|---|
application | 在所有应用程序中有效 |
session | 在当前会话中有效 |
request | 在当前请求中有效 |
page | 在当前页面有效 |
重定向
重定向:服务器要求客户端重新向服务器请求一个新的地址
使用重定向时,当页面跳转到指定页面后,本次请求的数据将会丢失.
由response对象实现,语法格式如下
response.sendRedirect("URL");
//request.getContextPath() 获得上下文路径
response.sendRedirect(request.getContextPath()+"/index.jsp");
转发
使用转发可以实现同一个请求的信息在多个页面中共享
request.getRequestDispatcher("path").forward(request,response);
path表示将要跳转的页面名称或者路径.
request.getRequestDispatcher("index.jsp").forward(request,response);
转发与重定向的区别 | ||
---|---|---|
比较项 | 转发 | 重定向 |
URL变化 | 否 | 是 |
重新发出请求 | 不会 | 会 |
是否携带请求 | 是 | 否 |
目标URL要求 | 仅本Web应用 | 任意URL |
重定向是客户端行为,转发是服务器行为 |
1 条评论
哇塞