JavaWeb项目代码

零散知识

  1. 查看系统:window+r -> dxdiag
  2. 卸载时:先卸载eclipse或myeclipse,在卸载jdk

快捷键

  1. 快速查找Java文件:选中类名 -> ctrl+shift+h

零、 服务器

0.1 服务器

0.2 tomcat服务器与eclipse整合

  1. eclipse环境配置:
    window -> preferences -> -> Java -> Instatlled JREs -> 如果有问题 -> add -> Standart VM
  2. 取消校验:
    window -> preferences General -> Validation -> 应该默认全选,现在改为只选第2个

0.3 tomcat的目录结构

  1. bin目录:可执行命令
  2. conf:配置
  3. lib:jar包
  4. logs:日志
  5. temp:临时文件
  6. webapps:开发好的web程序
  7. work:将jsp翻译成servlet后的文件

一、 基础

  1. 新建项目:new -> Dynamic Web Project -> 起名 -> next -> next -> 有个框,勾选以下
  2. 项目想要被浏览器访问到,必须继承HttpServlet类 -> 重写doGet和doPost方法 -> 在class上写“@WebServlet(“名字”)”

1.1 HttpServlet类

  1. 如果某个类继承HttpServlet类,那么这个类就是servlet。浏览器可直接访问servlet
  1. 重写HttpServlet中的doget和doPost方法。get请求传输的参数直接在导航栏中显示。一般默认通过地址栏访问用get请求。
  2. servlet类的包名为cn.java.servlet,同时给类命名时在类名后加servlet。

虚拟路径的配置方式

  1. 第一种方式:通过@webserviet(“虚拟路径”),虚拟路径前一定有“/”
  2. 第二种方式,在WebContent -> WEB-INF -> web.xml -> 上方写
<servlet>
            <servlet-name>别名</servlet-name>
            <servlet-class>指定的一个servlet的路径</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>上面的别名</servlet-name>
            <url-pattern>对外虚拟路径<url-pattern>
        </servlet-mapping>

1.2 为工程配置默认的访问路径

  1. 第一步:写一个html,放在WebContent下,
  2. 第二步:在WebContent -> WEB-INF -> web.xml -> -> -> 删除之前所有的 -> 写第一步的html

1.3 request

  1. 接受参数:request.getParameter(),该方法的返回值一定是字符串
  2. 修改编码:request.setCharacterEncoding(“utf-8”)。该方法只能修改post提交方式,get提交不能修改。
    get修改编码:修改tomcat服务器的编码:P57
  3. 获取访问协议:request.getScheme()。http——超文本传输协议
  4. 获取端口号:request.getServerPort()
  5. 获取服务器名:request.getServerName()
  6. 获取工程名:request.getContextPath()
  7. 获取访问者的IP:request.getRemoteaddr()

二、 jsp

jsp与html文件类似,html中能使用的标签在jsp中都能使用,但是jsp中可以写Java代码。jsp本质是servlet

修改jsp默认编码:

1. 点击window
2. 点击preferences
3. 搜索jsp
4. 找到jsp files点击
5. 右边有一个Encoding,点击、下拉找到utf-8
6. 一路ok

jsp执行流程:请求jsp引擎,将文件生成java文件,将Java文件编译为class文件,class常见对象,给用户相应

组成:静态内容、指令、表达式、小脚本、声明区、注释

2.1 jsp组成

2.1.1 jsp指令(面试)

  1. 指令是给服务器看的。
  2. 语法:<%@ 指令名 属性名=属性值 %>
  1. page指令:<%@ page 属性名=属性值 %>。设置整个jsp页面的相关属性。
如:<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8">

属性有:

  1. language=“java”:指定jsp页面使用的脚本语言。现在已经沦为摆设,没有实用性
  2. contentType=“text/html; charset=utf-8”:告诉服务器以html的方式来解析jsp文件,同时采用utf-8编码
  3. import:引用脚本语言中使用到的类文件
  4. extends:可以指定jsp生成时继承的Servlet类
  5. session:是否可以使用session
  6. errorPage:产生错误后,跳转的错误处理页面
  7. contentType:描述网页内容类型与编码格式
  1. taglib指令:使用标签库定义的新的自定义标签
如:

 <%@ taglib uri="tagliburi" prefix="别名"%>



 uri:用来匹配引入的标签库描述文件,对应标签库中的uri

 prefix:标签库引入时的别名,再使用标签中需要加入 别名:前缀

 有时我们在一个jsp文件中引入多个标签,prefix是用来区别不同标签库的!





 jstl标签库:

 使用:

     1. 引入相关jar包,jstl标签 standard.jar和jstl.jar两个jar包 

     2. 在jsp页面通过taglib指令引入核心标签库

     3. 常用标签:

         <c: if test="${条件 }"></c:if> 



         <c: forEach items=“被循环的信息” begin=“开始的元素” step=“迭代步长” var=“当前变量名” varStatus=“循环状态的变量名”></c:forEach>

             如:<C:forEach var="i" begin="1" step="2" end="5"> ${i } </c:forEach>



         <c: choose>

             <c: when test=""></c:when>

             <c: otherwise></c:otherwise>

         </c:choose>
  1. include指令:<%@ include file=“引入页面所在路径” %>将一个外部文件嵌入到另一个jsp或html文件,同时解析这个页面中的jsp语句

2.1.2 jsp脚本片段

  1. 可以在脚本片段中书写Java代码
  2. 语法:在中写<% 代码 %>,将<% %>看为Java方法中的大括号,所以不能定义方法
  3. 注释:
  1. html注释
  2. jsp注释:<%-- --%>

2.1.3 脚本表达式

  1. 语法: <%= 表达式 %>
  2. 作用:
  1. 向浏览器打印数据:out.print()
  2. 取值

2.1.4 注释

  1. html注释:
  2. jsp注释:<%-- --%>
  3. jsp脚本注释://或/**/

2.1.5 声明(区)

  1. 定义:指的是Java中的成员位置,可以用来声明成员变量,声明成员方法
  2. 格式:
    <%!
    声明区
    %>

2.2 内置对象

2.2.1 九大内置对象

内置对象(隐含对象),就是在jsp中,不需要创建(由服务器<容器>创建),可以直接使用的对象

  1. out:out对象时JSPWriter类的实例,是向客户端输出内容常用的对象
    类型:JSPWriter
    作用:向客户端输出内容
  2. request:
    类型:HttpServletRequest
    作用:请求对象,包含了请求的信息
    getParameter(“key”):获取用户提交的表单信息
    setCharacterEncoding(“编码集”):设置请求编码,放置乱码
    setAttribute(“key”,“value”):将数据保存到request范围内的变量
    forward(String url):转发
    getParameterValues(String name):返回包含参数name的所有值的数值
  3. response:
    类型:HttpServletResponse
    作用:相应对象,用来给用户进行相应
    addCookie():将一个cookie对象发送到客户端
    sendRedirect(String url):重定向
  4. session:
    类型:HttpSession
    作用:会话对象,用来进行数据的共享和会话的跟踪
    setMaxInactiveInterVal(int num):设置session对象的有效活动的时间
    invalidate():销毁当前的session
  5. application:
    类型:ServletContext
    作用:全局的Servlet上下文对象,每个应用只有一个,从应用启动,就创建,指导应用消亡,对象才被释放
  6. config:
    类型:ServletConfig
    作用:Servlet配置对象,较少使用
  7. page:
    类型:Object
    作用:指的是当前jsp页面对象
  8. pageContext:
    类型:PageContext
    作用:页面的上下文,用来在一个页面中进行数据的共享和通讯
  9. exception:
    类型:Throwable
    作用:用于错误处理页面,用来收集其他页面产生的错误信息,只有isErrorPage='true’时才产生这个对象

2.2.2 四大作用域

为了在页面、请求、用户之间传递和共享数据,jsp提供了四个作用域,这些作用域规定了数据可以传递和共享的范围,以及数据存活时间

  1. pageContext:页面作用域
  2. request:请求作用域
  3. session:会话作用域
  4. application:应用程序作用域

常用方法:

1. setAttribute(key,value):

2. Object value = getAttribute(key):

3. removeAttribute(key):

4. 作用域取值方式:

    1. 脚本表达式:<%=request.getAttribute() %>

    2. EL表达式:${key }
2.2.2.1 作用域取值方式:
  1. 脚本表达式:<%=request.getAttribute() %>
  2. EL表达式:${key }
2.2.2.2 转发和重定向
  1. 转发:request.getRequestDispatcher(“页面”).forward(request, response)
  2. 重定向:response.sendRedirect("")
  3. 区别:
  1. 请求重定向:客户端行为。从本质上将等同于两次请求,前一次的请求对象不会保存,地址栏的url会改变
  2. 请求转发:服务器行为。是以此请求,转发后请求对象不变,地址栏和url不变

2.3 EL表达式

EL表达式,用于快速的从域对象中取出信息,并输出至网页.从小往大找值

  1. 取出字符串或基本数据类型的格式:$(key)
  2. 取出对象的属性:

2.4 EL运算符

  1. 算数运算
  2. 关系运算
  1. > gt
  2. >= ge
  3. < lt
  4. <= le
  5. == eq
  6. != ne
  1. 逻辑运算
  1. && and
  2. || or
  3. ! not
  1. 三元运算
  2. 特殊运算
  1. empty:判断EL表达式中的表达式是否成立

2.5 jsp六大动作

  1. include
  1. <jsp:include page=“引用文件的地址” flush=“false”></jsp:include>
  2. 作用:引入jsp文件,在转换时期没有被引入,只有当执行到include代码位置的时候,才会动态编译载入
  1. useBean
  1. <jsp:useBean id=“别名” class=“包名.类名” scope=“作用域”></jsp:useBean>。指向java对象,需要先创建类对象
  1. setProperty
  1. <jsp:setProperty property=“属性名称” name=“别名” value=""/>
  1. getProperty
  1. <jsp:getProperty property=“属性名称” name=“别名”/>
  1. forward
  1. <jsp:forward page=“转发”></jsp:forward>
  1. param
  1. <jsp:param value=“转发参数” name=""/>
<jsp:forward page="转发">

     <jsp:param value="转发参数" name=""/>

 </jsp:forward>



 在转发页面获取值

 ${param.name }

2.6 include指令与include动作的区别

  1. include动作在转换为Java文件时,引入的文件不会被编译,只有客户端请求到生成的servlet文件时,才会被动态编译载入
  2. include指令是在jsp程序的转换时期,将引入的文件内容嵌入,然后统一进行编译

三、 Servlet

3.1 简介

  1. Servlet就是运行在服务器Tomcat上的Java程序
  2. Serlvet用来处理客户端的请求,以及负责对客户端的响应
  3. Servlet默认是单例模式,每次用户访问都是开启一个新线程,调用service方法处理。

3.2 使用Servlet

  1. 先引入servlet-api.jar
  2. 编写Java类,继承HttpServlet
  3. 重写service(request, response)方法
  4. 在service方法中处理请求,以及进行响应

3.3 Servlet配置到web.xml

配置到web.xml的作用:让tomcat帮我们创建对象,并映射地址,当地址匹配,由tomcat调用这个对象的service方法进行处理

  1. 将servlet配置到web.xml并起别名
<servlet>

     <servlet-name>任意标识符</servlet-name>

     <servlet-class>类的全称(包名+类名)</servlet-class>

 </servlet>
  1. 根据别名,映射一个网址
<servlet-mapping>

     <servlet-name>与第一步标识一致</servlet-name>

     <url-pattern>/地址</url-pattern>

 </servlet-mapping>



 “/地址的替换”

 1. /:拦截没有后缀的请求

 2. /*:拦截所有请求

 3. *.do:拦截所有以.do结尾的请求

3.4 常用方法

  1. request.setCharcterEncoding(“UTF-8”)
  2. request.getParameter("")
  3. request.getParameterMap():请求接受参数,封装到map中,通过map.get(key)获取
  4. request.setAttribute(“key”,value):将数据设置到request作用域中
  5. request.getRequestDispatcher().forward():转发
  6. request.getSession()
  7. request.getServletPath():获取servlet请求路径
  8. response.setCharacterEncoding(“utf-8”)
  9. response.sendRedirect():重定向
  10. response.getWriter()
  11. response.setContentType(“text/html;charset=UTF-8”):设置响应类型
  12. response.getWriter()

3.4 servlet生命周期

  1. init:初始化
  2. service:服务
  3. destroy:销毁
  4. GC回收

3.5 get和post

  1. get请求
  1. 请求地址在url中以键值对的形式拼接
  2. 传输数据量小
  3. 不安全
  1. post请求
  1. 请求的数据存在于请求体中
  2. 传输数据量大,如视频
  3. 较安全
  1. get乱码:
    new String(username.getBytes(“ISO-8859-1”),“utf-8”);

四、 session

4.1 什么是session

服务器端为了保存用户的状态而创建的一个特殊对象

4.2 获取session对象

  1. request.getSession(boolean flg)

4.3 常用方法

  1. session.setArrtribute(String name, Object obj)
  2. session.getArrtribute(String name)
  3. session.removeAttribute(String name)
  4. session.invalidate():将session设置为失效,一般在退出时使用,但要注意的是:session失效的同时 浏览器会立即创建一个新的session的,你第一个session已经失效了 所以调用它的getAttribute方法时候一定会抛出NullPointerException的

五、 cookie

5.2 cookie使用

Cookie uname = new Cookie();

cookie如果存中文必须设置编码,因为cookie不能存储中文,否则报错

URLEncoder.encode(值,编码)

5.3 cookie和session的区别

  1. cookie数据存放在客户的浏览器上,session数据放在服务器上
  2. cookie不是很安全,别人可以分析存放在本地cookie并允许cookie欺骗
  3. session会在一定时间内保存在服务器上
  4. 单个cookie保存数据不超过4k,很多浏览器限制一个站点最多保存20个cookie
  5. 建议:登录信息放在session其他信息如果需要保留放在cookie中

六、 过滤器 Filter

七、 监听器

八、 web项目

8.1 错误码

  1. 200:成功,客户端请求成功
  2. 404:找不到资源
  3. 500:浏览器请求服务器,服务器处理错误(代码书写错误)
  4. 505:http版本版本不受支持

8.2 Javaweb项目读取properties配置文件

  1. 方式一:

8.3 web三大组件

Servlet、Filter(过滤器)、Listener(监听器)

  1. 过滤器
  1. 通过过滤器技术,对web服务器管理所有web资源:如jsp、servlet、静态图片、文件、静态html进行拦截,从而实现一些特殊的功能,如使用url级别的权限访问控制、过滤敏感词汇、压缩相应信息等一些高级功能
  2. 使用:
  1. 编写一个类,实现filter接口
  2. 在web.xml中进行配置拦截地址
<filter>
                    <filter-name> </filter-name>
                    <filter-class> </filter-class>
                </filter>
                
                <filter-mapping>
                    <filter-name> </filter-name>
                    <url-pattern> </url-pattern>
                </filter-mapping>
  1. 监听器
  1. web监听器是servlet中特殊的类,能帮助开发者监听者监听web中的特定事件,如:ServletContext、HttpSession、ServletRequest的创建和销毁、变量的创建和销毁和修改,可以在某些动作前后增加处理,实现监控
  2. 用途:
  1. 统计在线人数 利用HttpSessionListener
  2. 加载初始化信息 利用ServletContextListener
  3. 统计网站访问量 利用ServletContext
ServletContext监控:实现ServletContextListener接口

 HttpSession监控:实现HttpSessionLinstener接口

 ServletRequest:实现ServletRequestLinstener接口
  1. 使用监听器
  1. 创建监听器,实现某种接口
  2. web.xml配置监听器
<listener>
            <listener-class> <listener-class>
        </listener>
  1. 在jsp中添加操作

九、 xml

  1. web.xml文件是用来初始化配置信息:
    比如welcome页面、servlet、filter、listener、servlet-mapping、启动加载级别等

十、 Ajax

10.1 Ajax概念和原理

  1. Ajax是一组原有技术的综合运用,涉及如下技术:
  1. 以XMLHttpRequest为核心发送请求和接受响应
  2. 以JavaScript为基础使用XMLHttpRequest
  3. 以XML或JSON作为数据交互格式
  4. 以HTML和CSS作为数据展现(渲染)

10.2 Ajax作用和优点

  1. Ajax交互(异步)和传统交互(同步)区别
  1. 请求的发送和接受:
    传统:浏览器直接发送HTTP请求,然后由浏览器直接接受服务器返回的结果,直接呈现在浏览器页面上
    Ajax:浏览器利用js调用XMLHpptRequest对象发送HTTP请求,然后利用XMLHpptRequest接受服务器的返回结果,然后需要利用js将结果显示到浏览器页面
  2. 区分Ajax请求和传统请求:
    请求的Header格式不同,Ajax请求会在请求Header部分多一组参数值“x-requested-with:XMLHttpRequest”,如果存储该参数就可以认为是Ajax
  3. 服务器响应结果不同:
    传统:服务器一般会调用Servlet或JSP生成一个HTML界面给浏览器,然后浏览器显示
    Ajax:服务器一般调用Servlet处理,然后生成一个JSON或者xml字符串给XMLHttpRequest
  4. 页面刷新:
    传统:整个页面刷新
    Ajax:局部刷新
  5. 同步和异步
    传统:同步交互- 请求1–>响应1–>请求2–>响应2
    Ajax:异步交互- 请求1–>请求2–>响应1–>响应2

10.2.1 Ajax作用和优点

  1. 作用:
  1. 页面局部刷新处理
  2. 页面不改变,异步请求和响应
  1. 优点:
  1. 用户操作更连续,提高用户体验
  2. Ajax交互传输数据量较小,提升程序性能
  3. 异步处理,可以进行异步加载和请求处理
  4. 减少整个页面刷新率

10.2.2 Ajax使用

  1. 创建XMLHttpRequest对象,发送请求(客户端js编程)
function sendRequest(){    
            //创建XMLHttpRequest对象
            var xhr = null;
            if(window.XMLHttpRequest){
                xhr = new XMLHttpRequest(); //支持chrom,IE7、8、9
            }else{
                xhr = new ActiveXObject("Microsoft.XMLHTTP"); //支持IE5、6
            }           
            //创建http请求
            xhr.open("get","hello.do",true);
            //发送Ajax请求
            xhr.send(null);
        }
  1. 服务器端处理Servlet/JSP(服务端Java编程)
  2. 解析服务器返回数据结果,显示到页面(客户端js编程)
//创建http请求
        xhr.open("get","hello.do",true);
        //设置回调处理函数
        xhr.onreadystatechange = function(){
            if(xhr.readyState == 4 && xhr.status == 200){ //判断请求成功
                var msg = xhr.responseText; //获取服务器返回的字符串信息
                //操作
            }
        }
        //发送Ajax请求
        xhr.send(null);

10.3 jQuery的Ajax

十一、 JSON

11.1 JSON概念和基本使用

  1. JavaScript Object Nitation是JavaScript对象格式,属于JavaScript语言数据格式
  2. 格式:{“key”:value,“key”:value}
    key是字符串,value是任意类型
    访问value可以使用变量.key获取

11.2 JSON字符串转化为json对象

  1. 方法一:JSON.parse(字符串)
  2. 方法二:var obj_data = eval("("+data+")");

11.3 将Java对象转换为JSON字符串

  1. 方法一:使用gson.jar工具包
Gson gson = new Gson();

 String data = gson.toJson(obj);
  1. 方法二:使用json-lib.jar工具包
  1. 单个Java对象
JSONObject json = JSONObject.fromObject(obj);

 String strng = json.toString();
  1. Java集合
JSONArray fromObject = JSONArray.fromObject(list);

 String strng = fromObject.toString();

十三、 文件上传

项目一:员工管理系统(仿)

项目二:图书管理系统(按上例流程独立完成)–问题解决

1. 步骤

参考上个案例总结

  1. 页面信息分析(功能、内容)(不是真页面,只是看有什么)
  2. 数据库设计
  3. 项目分析
  1. 使用技术
  2. 需要jar包
  3. 规划包
  1. 规划web.xml
  1. 创建servlet,规划请求
  1. 在需要的时候编写工具类
  2. 实现之前规划的各请求

2. 页面(http为模板)

1.1 http/jsp

  1. span:对元素进行分组
  2. section:定义文档中的节
  3. nav:用来作为页面导航的连接组,其中的导航元素连接到其他页面或当前页面的其他部分,并不是所有的连接组都要别放进nav元素
  4. strong:和标签一样,用于强调文本,但它的强调程度更强
  5. label:为input元素定义标注,不会向用户呈现任何特殊效果,不过,为鼠标用户改进了可用性:在label元素内点击文本,就会触发次控件,就是说,当用户选择改标签时,浏览器会自动将焦点转到和标签相关的表单控件上。
  1. for属性可把label绑定到另一个元素。请把for属性的值设置为相关元素的id属性值。
  1. form表单:
  1. enctype="multipart/form-data"属性:只对要上传文件的表单有效,通过实例化对象获取文件和表单提交数据;当表单中没有文件时使用该属性,则所有表单提交数据为null

1.2. js

3. servlet

  1. 登陆时为什么要session参数?
    答:session作用域为一次会话有效,通过session的参数可以在登陆后实现jsp页面“xxx,您好”功能