javaweb复习
Java Web复习
软件架构模式
C/S,B/S
常用的Web服务器
Tomcat、JBoss、Apache、IIS、Nginx、WebLogic
HttpServletRequest、HttpServletResponse继承接口
- ServletRequest
- ServletResponse
上传文件表单的multipart/form-data
<form enctype="multipart/form-data"></form>
HttpSession接口的方法设置key - value的方法取值的方法名
setAttribute()、getAttribute()
通过web.xml设置会话的最大不活动时间单位为
-
为单个Web应用配置超时时间可以在web.xml中使用
<session-config>
元素,如<web-app> <!--filter.listener,servlet,and servlet-mapping等元素要在session-config之前--> <session-config> <session-timeout>15 </session-timeout> </session-config> ... </web-app>
这个时候的"15"单位是分钟
-
如果在配置Servlet是指定初始化参数决定超时时间 ,如
<servlet>
<servlet-name>Example</servlet-name>
<servlet-class>exa.mp.le.Example2</servlet-class>
<init-param>
<param-name>timeout</param-name>
<param-value>600</param-value>
</init-param>
...
</servlet>
这个时候的"600"单位是秒
JSESSIONID
用户访问服务器的时候服务器会为每一个用户设置一个JSESSIONID,JSESSIONID就是用来判断当前用户对应哪个session
JSESSIONID = request.getSession.getId()
JSP有几种类型的元素
JSP有三种类型的元素
- 指令元素
- 指令元素用于指定整个JSP页面的相关信息,并设置JSP页面的相关属性,如网页的编码方式等
- 行为元素
- 动作元素用于表示客户端请求JSP页面时被调用的组件
- 脚本元素
- 脚本元素用于在JSP页面中添加一段脚本代码,脚本代码必须用page指令所定义的脚本语言编写,通常是java代码
JSP中的注释
注释 | 用户浏览器右键查看源码能否看到 | 服务器端能否看到 | 注意 |
---|---|---|---|
能 | 能 | JSP动作元素放在这种注释里仍然有效 | |
<%-- JSP中的注释方式 --%> | 不能 | 不能 | |
/* java中的注释方式 */ | 不能 | 能 | 只能在JSP的脚本或者声明中使用 |
setCharactersEncoding
request.setCharacterEncoding(“utf-8”)
JavaBean可分为两种
- 有用户界面(UI,User Interface)的JavaBean
- 没有用户界面、主要负责业务逻辑(如数据运算、操纵数据库)的JavaBean(JSP通常访问这种)
EL(Expression Language)表达式
JSP的内置表达式语言,用来替代<%=…%>
作用
- 获取域中对象
- 执行运算
- 获取常见的Web对象
- 调用java的方法
格式
- ${键}
EL表达式取值顺序
- page—request—session—application
JSTL函数库用于循环遍历标签
<c:forEach>
-
集合成员迭代
<c:forEach items="data" [var="name"] [begin="start"] [end="finish"] [step="step"] [varStatus="statusName"]> ... </c:forEach>
在该语法中,items属性是必选属性,通常使用EL表达式指定,其他属性均为可选属性
-
数字索引迭代
<c:forEach begin="start" end="finish" [var="name"] [step="step"] [varStatus="statusName"]> ... </c:forEach>
在该语法中,begin和end属性是必选属性,其他属性均为可选属性
- items:用户指定被循环遍历的对象,多用于数组于集合类
- var:用于指定循环体的变量名
- begin:用于指定循环的起始位置
- end:用于指定循环的终止位置
- step:用于指定循环的步长
- varStatus:用于指定循环的状态变量
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>起始页</title> </head> <body> <% List<String> list = new ArrayList<String>(); list.add("简单是可靠的先决条件"); list.add("兴趣是最好的老师"); list.add("知识上的投资总能得到最好的回报"); request.setAttribute("list", list); %> <b>遍历List集合的全部元素:</b> <br> <c:forEach items="${requestScope.list}" var="keyword" varStatus="id"> ${id.index} ${keyword }<br> </c:forEach> <b>遍历List集合中第一个元素以后的元素(不包括第一个元素):</b> <br> <c:forEach items="${requestScope.list}" var="keyword" varStatus="id" begin="1"> ${id.index} ${keyword }<br> </c:forEach> </body> </html>
doFilter方法
package com.chenpeng.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
String encoding = servletRequest.getServletContext().getInitParameter("encoding");
servletRequest.setCharacterEncoding(encoding);
servletResponse.setContentType("text/html;charset="+encoding);
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
Model2模式
- Controller:应用程序中用户交互部分(Servlet)
- Model:应用程序中数据逻辑部分(JavaBeans)
- View:数据显示部分(JSP)
JQuery
动态网站的特征
- 动态网页一般以数据库技术为基础,可以大大降低网站维护的工作量;
- 用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、用户管理、订单管理等等;
- 动态网页实际上并不是独立存在于服务器上的网页文件,只有当用户请求时服务器才返回一个完整的网页;
- 动态网页中的“?”对搜索引擎检索存在一定的问题,搜索引擎一般不可能从一个网站的数据库中访问全部网页,或者出于技术方面的考虑,搜索之中不去抓取网址中“?”后面的内容,因此采用动态网页的网站在进行搜索引擎推广时需要做一定的技术处理才能适应搜索引擎的要求。
动态网站技术
- PHP
- ASP
- JSP
Java Web应用优势
Tomcat的安装目录下各子目录的功能
- bin:包含启动和终止Tomcat服务器的脚本,如startup.bat、shutdown.bat
- conf:包含服务器的配置文件,如server.xml
- lib:包含服务器和Web应用程序使用的类库
- logs:存放服务器的日志文件
- webapps:Web应用的发布目录,服务器课对此目录下的应用程序自动加载
- work:Web应用程序的临时工作目录,默认情况下编译JSP生成的Servlet类文件放在此目录下
- temp:存放Tomcat运行时的临时文件目录
GenericServlet类
- GenericServlet是Servlet接口的实现类,可以通过继承GenericServlet来编写自己的Servlet
- GenericServlet 的init()方法
- GenericServlet 实现了ServletConfig接口,可以直接调用getInitParameter()、getServletContext()
HttpServlet的处理请求方法编写
package com.chenpeng.servlet;
import com.chenpeng.domain.User;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/userServlet")
public class UserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
...
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
请求转发
request.getRequestDispatcher(request.getContextPath()+"/.jsp").forward(request,response);
实例化PrintWriter对象方法
PrintWriter out = new PrintWriter()
设置cookie的存活期正确方法
Cookie cookie = new Cookie();
cookie.setMaxAge();//单位为秒
response.addCookie(cookie);
- 如果MaxAge为负数,表示为临时性cookie,不会被持久化,关闭浏览器cookie就消失
- 如果MaxAge为0,则表示删除cookie
url重写的方法
//encodeURL方法用在链接地址、表单提交地址。
response.encodeURL(String url);
//encodeRedirectURL方法用于重定向地址。
response.encodeRedirectURL(String url);
重定向方法
response.sendRedirect("xxx.jsp");
创建Servlet在web.xml生成的映射地址
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.chenpeng.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/userServlet</url-pattern>
</servlet-mapping>
</web-app>
jsp中声明变量的表达方式
- <%! %>用来声明全局变量和方法
- <% %>用来声明局部变量
JSP中EL表达式获取User对象的age属性
<%@ page import="com.chenpeng.domain.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
User user1 = new User("小明",20);
pageContext.setAttribute("user1",user1);
User user2 = new User("小宇",20);
request.setAttribute("user2",user2);
User user3 = new User("小开",20);
session.setAttribute("user3",user3);
User user4 = new User("小亮",20);
application.setAttribute("user4",user4);
%>
<h1>对对象操作</h1>
<h3>pageContext取值</h3>
${user1.toString()}<br>
<h3>request取值</h3>
${user2.toString()}<br>
<h3>session取值</h3>
${user3.toString()}<br>
<h3>application取值</h3>
${user4.toString()}
JSP内置对象
对象名 | 真实类型 | 作用 |
---|---|---|
pageContext | PageContext | 当前页面共享数据,还可以获取其他八个内置对象 |
request | HttpServletRequest | 一次请求访问的多个资源(转发) |
session | HttpSession | 一次会话的多个请求间 |
application | ServletContext | 所有用户间共享数据 |
response | HttpServletResponse | 响应对象 |
page | Object | 当前页面(Servlet)的对象 this |
out | JspWriter | 输出对象,数据输出到页面上 |
config | ServletConfig | Servlet的配置对象 |
exception | Throwable | 异常对象 |
会话跟踪技术的解决方案
- Session
- Cookie
- URL地址重写
- 隐藏表单域
Servlet生命周期四个阶段
- 创建Servlet对象,通过服务器反射机制创建Servlet对象,第一次请求时才会创建
- 调用Servlet的init()方法,初始化Servlet的信息,init()方法只调用一次
- 响应请求,调用doGet()、doPost()或service()
- 在长时间没有被调用或者服务器关闭时,调用destroy()方法销毁Servlet对象
JSP基本结构包括类型元素
- 指令
- 注释
- 脚本
- 声明
- 表达式
- 静态内容
request请求对象获取页面数据的方法
-
request.getParameter(String key)
通过key获取值
-
request.getParameterMap()
获取表单所有对象的值,返回值是map集合
-
request.getParameterValues()
通过key获取value值(一般用于复选框获取值)
-
request.getParameterNames()
获取表单所有对象的值,返回值是枚举集合
JSP执行原理
- 当用户访问一个JSP页面时,会向一个Servlet容器(如Tomcat等)发出请求
- 如果页面有所改动,则Servlet容器首先要把JSP页面(如test.jsp)转化为Servlet代码(text.java),再将其转化为class文件(test.class),这些编译过程会耗费时间
- JSP容器负责调用从JSP转换来的Servlet,这些Servlet负责提供服务相应用户请求;如果用户有多个请求,则容器会建立多个线程处理多个请求
- 容器执行字节码文件,并将其结果返回到客户端
JSP的全称
Java Server Page
HttpSession接口的方法设置key value的方法名称
setAttribute()、getAttribute()
form表单的文件上传
enctype=“multipart/form-data”
setContentType
response.setContentType(“text/html;charset=utf-8”)
cookie可能被禁用
- 在URL后面手动拼接jsessionid
- 使用响应对象HttpServletRequest中的encodeURL(String path)方法实现jsessionid的自动拼接
HttpSession对象什么时候创建
- 对于JSP
- 若当前的 JSP 是客户端访问的当前 WEB 应用的第一个资源,且 JSP 的 page 指定的 session 属性值为 false, 则服务器就不会为 JSP 创建一个 HttpSession 对象;
- 若当前 JSP 不是客户端访问的当前 WEB 应用的第一个资源,且其他页面已经创建一个 HttpSession 对象,则服务器也不会为当前 JSP 页面创建一个 HttpSession 对象,而会把和当前会话关联的那个 HttpSession 对象返回给当前的 JSP 页面
- 对于Servlet
- 只用调用了request.getSession()或request.getSession(true)才会创建HttpSession对象
page指令
- <%@page language=“java”%>设置jsp中用到的语言,用到的是java,也是目前唯一有效的设定
- <%@page extends=“mypackage.myclass”%>设置目前jsp要继承的父类,一般不需要设置,在默认情况下,jsp页面默认的父类是HttpJspBase
- <%@page import=“java.sql.*”% > jsp页面所用到的类
- <%@page errorPage=“error.jsp”%> 设置该jsp页面出现异常时所要转到的页面,如果没设定,容器将使用当前的页面显示错误信息
- <%@page isErrorPage=“true”%> 设置该jsp页面是否作为错误显示页面,默认是false,如果设置为true,容器则会在当前页面生成一个exception对象,和4搭配使用
- <%@page contentType=“text/html;charset=gb2312”%> 设置页面文件格式和编码方式
- <%@page isThreadSafe=“true”% > 设置容器以多线程还是单线程运行该jsp页面,默认是true,是多线程。设置为false,则以单线程的方式运行该jsp页面
- <%@page session=“true”% > 设置该jsp页面是否可以用到session对象(jsp内置对象,为web容器创建),默认是true,能用到session.设置为false,则用不到
在JSP的EL表达式中requestScope
requestScope是EL表达式的隐藏对象,包含request作用域内变量的Map
requestScope主要用于数据的展示,从request隐藏对象中取出对象或变量来显示
<c:if>
标签test用于
test用于判断
过滤器实现了哪个接口
Filter
POST请求参数乱码问题
request.setCharacterEncoding(“UTF-8”)
<c:if>
标签判断session作用域的值不为空
<c:if test="${empty sessionScope}">
</c:if>
ServletConfig接口的主要方法
方法说明 | 功能描述 |
---|---|
String getInitParameters(String name) | 根据初始化参数名返回对应的初始化参数值 |
Enumeration getInitParameterNames() | 返回一个 Enumeration 对象,其中包含了所有的初始化参数名 |
ServletContext getServletContext() | 返回一个代表当前 Web 应用的 ServletContext 对象 |
String getServletName() | 返回 Servlet 的名字,即 web.xml 中 元素的值 |
request.getCookies()返回对象类型
返回一个cookie数组
会话影藏表单域的类型是
<input type="hidden"/>
上传功能可以使用哪个jar
commons-fileupload.jar和commons-io.jar
MVC模式结构的三个组成部分
- Controller:应用程序中用户交互部分(Servlet)
- Model:应用程序中数据逻辑部分(JavaBeans)
- View:数据显示部分(JSP)
下一篇: Android蓝牙连接状态检测