B/S架构:浏览器/服务器

  • 程序完全部署在服务器上
  • 使用浏览器访问服务器
  • 无需单独安装客户端软件

BS架构

URL

Uniform Resource Locator:统一资源定位符

URL

GETPOST
/test/index.jsp?name1=value1&name2=value2POST /test/index.jsp HTTP/1.1数据库包
传送数据量较小传送数据量无限制
传输数据在URL可见传输数据在URL不可见
安全性低安全性高
能被缓存不能被缓存

HTTP状态码

浏览器向服务器发出请求后,服务器会返回响应信息

状态消息描述
200OK请求成功
302Found所请求的页面已经转移至新的url
400Bad Request服务器未能理解请求
404Not Found服务器无法找到被请求的页面
500Internet Server Error服务器错误

Tomcat 服务器

Tomcat 目录结构

Tomcat 目录结构
目录说明
/bin存放各种平台下用于启动和停止Tomcat的脚本文件
/conf存放Tomcat服务器的各种配置文件
/lib存放Tomcat服务器所需的各种JAR文件
/logs存放Tomcat的日志文件
/tempTomcat运行时用于存放临时文件
/webapps当发布Web应用时,默认情况下会将Web应用的文件存放于此目录中
/workTomcat把由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根目录下所有文件

部署应用程序到Tomcat的webapps目录

JSP(Java Server Pages)

运行在服务器端的Java页面

再HTML嵌套Java代码实现

JSP页面元素

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文件)

Servlet

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
重定向是客户端行为,转发是服务器行为
最后修改:2022 年 12 月 09 日
如果觉得我的文章对你有用,请随意赞赏