java web_java web开发 - CSDN
java web 订阅
Java Web,是用Java技术来解决相关web互联网领域的技术栈。web包括:web服务端和web客户端两部分。Java在客户端的应用有java applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP和第三方框架等等。Java技术对Web领域的发展注入了强大的动力。 展开全文
Java Web,是用Java技术来解决相关web互联网领域的技术栈。web包括:web服务端和web客户端两部分。Java在客户端的应用有java applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP和第三方框架等等。Java技术对Web领域的发展注入了强大的动力。
信息
优    点
上手快速并且相对容易
主要框架
使用Servlet或者Filter拦截请求
包    括
web服务器和web客户端
中文名
java web
应    用
Servlet,JSP
java web主要框架
Java的Web框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向对象实现请求和响应的流程,支持Jsp,Freemarker,Velocity等视图。Java EE标准,这意味着有很大的市场需求和更多的工作机会上手快速并且相对容易有大量可用的组件库大量的JSP标签对REST和安全支持不好没有一个统一的实现。既有SUN的实现,又有Apache的实现——MyFaces。对Spring MVC覆盖绑定(overriding binding)、验证(validation)等提供生命周期管理与许多表示层技术/框架无缝集成:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF 等便于测试——归功于IoC大量的XML配置文件太过灵活——没有公共的父控制器没有内置的Ajax支持不需要书写XML配置文件良好的学习文档社区成员很热心社区比较小不如其他的项目活跃ActionBean里面的URL是硬编码的架构简单——易于扩展标记库很容易利用FreeMarker或者Velocity来定制基于控制器或者基于页面的导航文档组织得很差对新特征过分关注一旦学会它,将极大地提高生产率HTML模板——对页面设计师非常有利每出一个新版本,都会有大量的创新文档过于概念性,不够实用学习曲线陡峭发行周期长——每年都有较大的升级对Java开发者有利(不是Web开发者)页面和显示绑定紧密社区活跃——有来自创建者的支持HTML模板和Java代码紧挨着需要对OO有较好的理解Wicket逻辑——什么都用Java搞定
收起全文
精华内容
参与话题
  • JavaWeb项目实战之点餐系统后台

    千人学习 2020-10-21 17:49:30
    JavaWeb项目主要涉及到的技术有:JSP,JavaScript,jQuery,servlet,JDBC,Mysql。JDK版本为1.8,Tomcat8.0. 项目涉及的功能大致有:餐桌管理,菜品类型管理,菜品管理,订单管理,用户登录及记住密码,...
  • JavaWeb快速入门(一)——新建JavaWeb项目

    万次阅读 多人点赞 2020-10-08 16:22:32
    下午开始将JavaWeb服务器端程序开发,包含:处理请求和展示返回回来的数据。其中,处理请求分为四步:1、创建javaweb工程,2、开启服务器,3、编写处理请求的代码,4、运行。(一)创建javaweb工程 在创建之前,电脑...

        今天是暑期实训的第三天,上午继续昨天未讲完的任务java,比如:java的异常处理、java的集合等其它java常用知识,具体讲解链接如下。下午开始将JavaWeb服务器端程序开发,包含:处理请求和展示返回回来的数据。其中,处理请求分为四步:1、创建javaweb工程,2、开启服务器,3、编写处理请求的代码,4、运行。

    (一)创建javaweb工程

        在创建之前,电脑需要有myeclipse或者eclipse,在这里我用了myeclipse。具体的下载和安装请自行百度。

        除此以外,需要用到apache-tomcat,链接:链接:https://pan.baidu.com/s/1IHx29L2k3xikgNDvhGGfJg 密码:r3t9

        准备工作完成后,现在就可以开始创建javaweb工程了。

        启动myeclipse,点击Browse以选择自己的即将所建工程的工作空间。选择完成后,点击ok。

     

     
     
        导航栏File->New->Project,在wizards中输入web来搜索Web选项,以选中Dynamic Web Project。
    然后点击next,在1处输入自己的工程名,2处选择存储位置,
    3处点击New Runtime,选择Apache Tomcat v8.0.。然后点击next
    1处选择在准备工作时,保存的apache tomcat的文件夹。2处,我选择了默认的JRE。然后点击finish。

        现在,又回到了这个对话框。不要急于点击这里的finish,必须选择点击next两次。

       两次next后,到达下图, 一定要选择Generate web.xml deployment descriptor。现在就可以点击finish。

        现在,我们就可以在myeclipse工作空间看到我们新建的javaweb项目了。

        我们可以知道,在WebRoot文件夹下为html页面,即前端的内容;而在src中为java后台的内容。在WebRoot文件夹下我们可以看到一个index.jsp,其中body部分内容为 <body>This is my JSP page. <br> </body>,我们可以猜测当运行该工程后,应该在页面上显示This is my JSP page.

        下面,我们需要部署一个服务器。在如下地方选择Servers,

     

     
     
     
     
     
     
        在空白处右键,点击New->Server,按照如下选择
        点击next,选中刚才新建的项目名,点击中间的ADD,然后点击finish。
        现在,我们可以在下图看到新建的项目服务器部署成功。

        选中下图所示,点击运行

        在控制台下,我们可以看到,运行成功。

     

     
        现在可以在浏览器中,输入网址http://localhost:8088/JavaWebDemo/。其中8088为端口号,默认为8080,JavaWebDemo为所建项目的项目名称。我们可以看到现在在页面上显示的内容与我们预期的内容一致,证明新建JavaWeb项目成功。                                                                                                                                                                             

     

     

    展开全文
  • JavaWeb是什么?总结一下JavaWeb的体系

    万次阅读 多人点赞 2018-10-23 10:12:56
    JavaWeb是什么?通过最近在尚硅谷上学习,分享一下Java WEB前言JavaWeb的技术体系登录页面的开发涉及的技术知识点HTML是什么?登录功能实现-环境的搭建涉及的技术知识点Web服务器Tomcat服务器的安装及配置在eclipse中...

    Java WEB

    前言

    Java Web 其实就是一个技术的总和,把Web看成一个容器而已主要使用JavaEE技术来实现.在加上各种中间件。整个javaWeb阶段的内容通过实际的案例贯穿学习, 所涉及到的技术知识点会在案例中根据不同的需求引入。首先了解javaWEB的整个技术体系,掌握常用的技术知识点。

    JavaWeb的技术体系

    体系
    下面我们以登录功能的实现来讲讲JavaWeb

    登录页面的开发

    涉及的技术知识点

    • HTML

    HTML是什么?

    1. HTML指的超文本标记语言(Hyper Text Markup Language),是一种用来描述网页的语言。超文本指的是除了可以包含文字之外,还可以包含图片、链接、音乐、视频、程序等内容。

    2. HTML网页的组成:
      html

    3. 常用的HTML标签
      ①html 根标记
      ②head 头标记
      ③body 体标记
      ④a 超链接
      ⑤form 表单
      ⑥table 表格

    4. 一个基本结构的HTML页面
      html

    5. 登录页面的示例
      login.html

    登录功能实现-环境的搭建

    涉及的技术知识点

    • WEB服务器
      • 动态的web工程

    Web服务器

    • 1. Web服务器主要用来接收客户端发送的请求和响应客户端请求。
    • 2. Tomcat(Apache)( 我们主要撸这只猫 ):当前应用最广的JavaWeb服务器;
    • 3. JBoss(Redhat红帽):支持JavaEE,应用比较广EJB容器 –> SSH轻量级的框架代替
    • 4. GlassFish(Orcale):Oracle开发JavaWeb服务器,应用不是很广;
    • 5. Resin(Caucho):支持JavaEE,应用越来越广;
    • 6. Weblogic(Orcale):要钱的!支持JavaEE,适合大型项目;
    • 7. Websphere(IBM):要钱的!支持JavaEE,适合大型项目

    Tomcat服务器的安装及配置

    1. 将Tomcat的安装包解压到磁盘的任意位(非中文无空格)
    2. Tomcat服务的目录结构
      Tomcat
    3. 配置环境变量,方便Tomcat的启动关闭(可选)
      ①新建环境变量CATALINA_HOME=解压目录
      home
      在Path环境变量中加入Tomcat解压目录\bin目录
      在这里插入图片描述
      ③在命令行中运行catalina run或者 startup启动Tomcat服务器,在浏览器地址栏访问如下地址进行测试
      http://localhost:8080
      tomcat

    在eclipse中配置tomcat

    1. 在Eclipse中配置运行环境
      在这里插入图片描述
    2. 在Eclipse中创建新的Server
      在这里插入图片描述
      在这里插入图片描述

    创建动态的web工程

    1. 在Eclipse中点击File ->New->Dynamic Web Project
      在这里插入图片描述
      Dynamic web module version我们学习阶段就选2.5通过配置编程,到后期我们再选3.0通过注解编程
      在这里插入图片描述

    记得一定要勾选

    登录功能实现-LoginServlet

    涉及的技术知识点

    1. Servlet
    2. Request请求对象
    3. Response响应对象

    什么是Servlet?

    1. Servlet是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案。而具体的Servlet容器负责提供标准的实现。
    2. Servlet作为服务器端的一个组件,它的本意是“服务器端的小程序”。Servlet的实例对象由Servlet容器负责创建;Servlet的方法由容器在特定情况下调用;Servlet容器会在Web应用卸载时销毁Servlet对象的实例。
    3. 简单可以理解为 Servlet就是用来处理客户端的请求的.
    4. 狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

    Servlet开发规则

    实际编码通过继承HttpServlet来完成Servlet的开发

    public class LoginServlet extends HttpServlet{
    }
    

    Servlet类的相关方法:

    doGet Servlet中用于处理get请求的方法

    @Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		super.doGet(req, resp);
    	}
    

    doPost Servlet中用于处理post请求的方法

    @Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	super.doPost(req, resp);
    }
    

    service
    ①在Servlet的顶层实现中,在service方法中调用的具体的doGet或者是doPost
    ②在实际开发Servlet的过程中,可以选择重写doGet以及doPost 或者 直接重写service方法来处理请求。

    Servlet在web.xml中的配置

    Servlet

    获取请求参数值

    HttpServletRequest
    ①该接口是ServletRequest接口的子接口,封装了HTTP请求的相关信息,由Servlet容器创建其实现类对象并传入service(ServletRequest req, ServletResponse res)方法中。以下我们所说的HttpServletRequest对象指的是容器提供的HttpServletRequest实现类对象。
    ②HttpServletRequest对象的主要功能有

    • 获取请求参数
    • 在请求域中绑定数据
    • 将请求转发给另外一个URL地址 [转发]

    响应结果

    HttpServletResponse
    ①该接口是ServletResponse接口的子接口,封装了HTTP响应的相关信息,由Servlet容器创建其实现类对象并传入service(ServletRequest req, ServletResponse res)方法中。以下我们所说的HttpServletResponse对象指的是容器提供的HttpServletResponse实现类对象
    ②主要功能

    • 使用PrintWriter对象向浏览器输出数据
    • 实现请求的重定向[重定向]

    具体登录功能的实现步骤

    1. 在登录页面中录入用户名和密码,点击登录按钮提交登录请求
      在这里插入图片描述
    2. 在LoginServlet中通过request对象获取到页面表单提交的用户名和密码
    3. 调用Dao对象,将用户提交的用户名和密码与数据库的用户表的数据进行匹配
    4. 得出结果,完成响应.
    package com.atguigu.login.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.atguigu.login.beans.User;
    import com.atguigu.login.dao.UserDao;
    import com.atguigu.login.dao.UserDaoImpl;
    
    /*
     * 处理登录请求的Servlet
     * 
     * Servlet是sun公司制定的标准。Tomcat(web应用服务器、Servlet容器)实现了这些标准。
     * 
     * HttpServlet
     */
    public class LoginServlet extends HttpServlet{
    	/**
    	 * 常用的方法:doGet doPost service
    	 * 
    	 * 第一种方法  重写
    	 *  doGet:处理客户端的get方式的请求
    	 *  doPost:处理客户端的post方式的请求
    	 *  
    	 *  第二种方法  重写
    	 *  service:根据具体的请求方法去调用对应的doGet、doPost方法
    	 *  
    	 */
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		doPost(req, resp);
    	}
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		//登录功能的实现。
    		System.out.println("登录请求来了~~~~~~~~~~~");
    		//获取到用户输入的用户名的密码,进行登录业务的处理
    		/*
    		 * HttpServletRequest: 请求对象。Servlet容器会在请求到达后,创建出一个request对象,将
    		 * 							Http请求相关的信息全部都封装到该对象中。
    		 */
    		//获取用户输入的用户名和密码
    		String username =  req.getParameter("username");
    		String password =  req.getParameter("password");
    		//调用Dao对象,将用户提交的用户名和密码与数据库的用户表的数据进行匹配
    		UserDao dao = new UserDaoJdbcImpl();
    		User user = dao.findUserByUsernameAndPassword(username, password);
    		//设置响应头信息
    		resp.setContentType("text/html;charset=utf-8");
    		//获取输出流
    		PrintWriter  out = resp.getWriter();
    		if(user == null ) {
    			//登录失败
    			out.println("登录失败!!!!");
    		}else {
    			//登录成功
    			out.println("登录成功!!!!");
    			}
    		out.close();
    

    登录功能实现-页面中错误提示

    涉及的技术知识点

    • 请求重定向
    • 请求转发
    • Jsp页面
    • EL表达式
    • JS简单应用

    请求重定向 redirect

    • Servlet接收到浏览器端请求并处理完成后,给浏览器端一个特殊的响应,这个特殊的响应要求浏览器去请求一个新的资源,整个过程中浏览器端会发出两次请求,且浏览器地址栏会改变为新资源的地址。
    • 重定向的情况下,原Servlet和目标资源之间就不能共享请求域数据了
    • 实现重定向的API
      在这里插入图片描述

    请求转发

    • Servlet接收到浏览器端请求后,进行一定的处理,先不进行响应,而是在服务器端内部“转发”给其他Servlet程序继续处理。在这种情况下浏览器端只发出了一次请求,浏览器地址栏不会发生变化,用户也感知不到请求被转发了。
    • 转发请求的Servlet和目标Servlet共享同一个request对象。
    • 实现转发的API
      在这里插入图片描述

    重定向与转发的区别

    转发 重定向
    浏览器地址栏 不改变 改变
    发送请求次数
    能否共享request对象数据
    目标资源:WEB-INF下的资源 能访问 不能访问
    Request中绑定的数据是否可以传递 不能

    JSP页面

    1. JSP全称Java Server Pages,顾名思义就是运行在java服务器中的页面,也就是在我们JavaWeb中的动态页面,其本质就是一个Servlet。

    2. 其本身是一个动态网页技术标准,它的主要构成有HTML网页代码、Java代码片段、JSP标签几部分组成,后缀是.jsp

    3. 相比于Servlet,JSP更加善于处理显示页面,而Servlet跟擅长处理业务逻辑,两种技术各有专长,所以一般我们会将Servlet和JSP结合使用,Servlet负责业务,JSP负责显示。

    4. 一般情况下, 都是Servlet处理完的数据,转发到JSP,JSP负责显示数据的工作

    5. JSP的基本语法:
      jsp

    6. JSP的脚本元素
      脚本片段是嵌入到JSP中Java代码段,格式以<%开头,%>结尾,两个%号之间就可以编写Java代码了
      jsp

    7. JSP的表达式
      ①JSP表达式用来直接将Java变量输出到页面中,格式以<%=开头,以%>结尾,中间是我们要输出的内容
      jsp

    8. JSP的隐含对象
      ①out(JspWriter):相当于response.getWriter()获取的对象,用于在页面中显示信息。
      ②config(ServletConfig):对应Servlet中的ServletConfig对象。
      ③page(Object):对应当前Servlet对象,实际上就是this。
      ④pageContext(PageContext):当前页面的上下文,也是一个域对象。
      ⑤exception(Throwable):错误页面中异常对象
      ⑥request(HttpServletRequest):HttpServletRequest对象
      ⑦response(HttpServletResponse):HttpServletResponse对象
      ⑧application(ServletContext):ServletContext对象
      ⑨session(HttpSession):HttpSession对象

    9. EL表达式
      ①EL是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。
      ②EL表达式用于代替JSP表达式(<%= %>)在页面中做输出操作。
      ③EL表达式仅仅用来读取数据,而不能对数据进行修改。
      ④使用EL表达式输出数据时,如果有则输出数据,如果为null则什么也不输出。
      ⑤EL表达式的语法:
      EL
      ⑥EL取值的四个域:
      pageScope
      requestScope
      sessionScope
      applicationScope

                         <%=5>3?"大于":"小于" %>
    

    页面中错误提示的功能效果

    在这里插入图片描述

    JavaScript

    1. 在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。Netscape在最初将其脚本语言命名为LiveScript,因为Netscape与Sun合作,网景公司管理层希望它外观看起来像Java,因此取名为JavaScript。
    2. 特性
      ①脚本语言。JavaScript是一种解释型的脚本语言,C、C++、Java等语言先编译后执行, 而JavaScript是在程序的运行过程中逐行进行解释。
      ②基于对象。JavaScript是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象。
      ③简单。JavaScript语言中采用的是弱类型的变量类型,对使用的数据类型未做出严格的要求,是基于Java基本语句和控制的脚本语言。
      ④动态性。JavaScript是一种采用事件驱动的脚本语言,它不需要经过Web服务器就可以对用户的输入做出响应。
      ⑤跨平台性。JavaScript脚本语言不依赖于操作系统,仅需要浏览器的支持。因此一个JavaScript脚本在编写后可以带到任意机器上使用,前提是机器上的浏览器支 持JavaScript脚本语言,目前JavaScript已被大多数的浏览器所支持。
    3. 编写位置
      ①编写到HTML中
    • onload
    • onclick
    • onblur
    • onfocus
    • onmouseover
    • onmouseout
    1. BOM
      ①Borwser Object Model 浏览器对象模型
      ②浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。BOM由多个对象组成,其中代表浏览器窗口的Window对象是BOM的顶层对象,其他对象都是该对象的子对象
      ③常用的对象(window的子对象)
      document history location screen navigator frames
    2. DOM
      ①Document Object Model 文档对象模型
      ②document对象: window对象的一个属性,代表当前HTML文档,包含了整个文档的树形结构。获 取document对象的本质方法是:window.document,而“window.”可以省略。
      ③DOM树
      DOM
      ④元素查询
    功能 API 返回值
    根据id值查询 document.getElementById(“id值”) 一个具体的元素节点
    根据标签名查询 document.getElementsByTagName(“标签名”) 元素节点数组
    根据name属性值查询 document.getElementsByName(“name值”) 元素节点数组

    注册功能实现-异步的表单校验

    涉及的技术知识点

    • Ajax

    Ajax

    1. AJAX 是 Asynchronous JavaScript And XML 的简称。直译为,异步的JS和XML。
    2. AJAX的实际意义是,不发生页面跳转、异步载入内容并改写页面内容的技术。
    3. AJAX也可以简单的理解为通过JS向服务器发送请求。

    异步处理

    1. 同步处理
      AJAX出现之前,我们访问互联网时一般都是同步请求,也就是当我们通过一个页面向服务器发送一个请求时,在服务器响应结束之前,我们的整个页面是不能操作的,也就是直观上来看他是卡主不动的。
      这就带来了非常糟糕的用户体验。首先,同步请求时,用户只能等待服务器的响应,而 不能做任何操作。其次,如果请求时间过长可能会给用户一个卡死的感觉。最后,同步请求的最大缺点就是即使整个页面中只有一小部分内容发生改变我们也要刷新整个页面。
    2. 异步处理
      而异步处理指的是我们在浏览网页的同时,通过AJAX向服务器发送请求,发送请求的过程中我们浏览网页的行为并不会收到任何影响,甚至主观上感知不到在向服务器发送请求。当服务器正常响应请求后,响应信息会直接发送到AJAX中,AJAX可以根据服务器响应的内容做一些操作。
      使用AJAX的异步请求基本上完美的解决了同步请求带来的问题。首先,发送请求时不会影响到用户的正常访问。其次,即使请求时间过长,用户不会有任何感知。最后,AJAX可以根据服务器的响应信息局部的修改页面,而不需要整个页面刷新。

    异步请求对象

    1. XMLHttpRequest对象是AJAX中非常重要的对象,所有的AJAX操作都是基于该对象的。
      XMLHttpRequest对象用来封装请求报文,我们向服务器发送的请求信息全部都需要封装到该对象中。
      这里需要稍微注意一下,XMLHttpRequest对象并没有成为标准,但是现在的主流浏览器都支持该对象,而一些如IE6的老版本浏览器中的创建方式有一些区别,但是问题不大。
    • Xhr对象的获取
      xhr
    • Xhr对象的方法
      ①open(method,url,async)
      open()用于设置请求的基本信息,接收三个参数。
      ①method
      请求的方法:get或post
      接收一个字符串
      ②url
      请求的地址,接收一个字符串
      ③Assync
      发送的请求是否为异步请求,接收一个布尔值。
      true 是异步请求
      false 不是异步请求(同步请求)
      ②send(string)
      send()用于将请求发送给服务器,可以接收一个参数
      ①string参数
      该参数只在发送post请求时需要。
      string参数用于设置请求体
      ③setRequestHeader(header,value)
      用于设置请求头
      ①header参数
      字符串类型,要设置的请求头的名字
      ②value参数
      字符串类型,要设置的请求头的值
    • XMLHttpRequest对象的属性
    1. readyState
      ①描述XMLHttpRequest的状态
      ②一共有五种状态分别对应了五个数字:
      0 :请求尚未初始化,open()尚未被调用
      1 :服务器连接已建立,send()尚未被调用
      2 :请求已接收,服务器尚未响应
      3 :请求已处理,正在接收服务器发送的响应
      4 :请求已处理完毕,且响应已就绪。
      2)status
      ①请求的响应码
      200 响应成功
      404 页面为找到
      500 服务器内部错误
      … … … …
      3)onreadystatechange
      ①该属性需要指向一个函数
      ②该函数会在readyState属性发生改变时被调用
      4)responseText
      ①获得字符串形式的响应数据。
      5)responseXML(用的比较少)
      ①获得 XML 形式的响应数据。
      6)示例代码
      在这里插入图片描述

    在这里插入图片描述

    • 使用JQuery框架来发送异步请求
    1. JQuery是当前比较主流的 JavaScript 库,封装了很多预定义的对象和实现函数,帮助使用者建立有高难度交互的页面,并且兼容大部分主流
      的浏览器.
      JQuery对同样提供了对Ajax的支持,可以更加方便快速的进行Ajax的开发,相关的方法有$.get $.post $.ajax等.
      JQuery的对象的本质就是dom对象的数组/集合

    2. JQuery对象与dom对象的相互转换
      JS转JQuery: var jObj = $(dObj);
      JQuery转JS: var dObj = jObj[0] 或者 var dObj = jObj.get(0)

    3. $.get方法
      在这里插入图片描述

    4. $.post方法
      在这里插入图片描述

    5. $.ajax方法
      jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, .post.post 等。.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该函数,除非你需要操作不常用的选项,以获得更多的灵活性。最简单的情况下,$.ajax()可以不带任何参数直接使用。
      $.ajax方法的参数
      在这里插入图片描述
      对于settings请求设置来说,所有选项都是可选的,详见jQuery手册

    6. 具体的示例代码
      在这里插入图片描述

    登录功能实现-登录成功跳转主页面

    涉及的技术知识点

    • Session会话
    • Cookie
    • JSTL标签

    Cookie

    1. HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出。这样的设计严重阻碍的Web程序的设计。如:在我们进行网购时,买了一条裤子,又买了一个手机。由于http协议是无状态的,如果不通过其他手段,服务器是不能知道用户到底买了什么。而Cookie就是解决方案之一。

    2. Cookie实际上就是服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就可以根据该信息处理请求。

    3. Cookie的用途
      网上商城购物车
      用户登录状态的保持

    4. Cookie的限制性
      ①Cookie作为请求或响应报文发送,无形中增加了网络流量。
      ②Cookie是明文传送的安全性差。
      ③各个浏览器对Cookie有限制,使用上有局限

    5. Cookie的具体使用
      ①创建cookie
      在这里插入图片描述
      ②读取cookie
      在这里插入图片描述

    Session

    1. 使用Cookie有一个非常大的局限,就是如果Cookie很多,则无形的增加了客户端与服务端的数据传输量。而且由于浏览器对Cookie数量的限制,注定我们不能再Cookie中保存过多的信息,于是Session出现。
    2. Session的作用就是在服务器端保存一些用户的数据,然后传递给用户一个名字为JSESSIONID的Cookie,这个JESSIONID对应这个服务器中的一个Session对象,通过它就可以获取到保存用户信息的Session。
    3. Session的工作原理
      ①Session的创建时机是在request.getSession()方法第一次被调用时。
      ②Session被创建后,同时还会有一个名为JSESSIONID的Cookie被创建。
      ③这个Cookie的默认时效就是当前会话。
      ④简单来说,Session机制也是依赖于Cookie来实现的
    4. Session的具体使用
      在这里插入图片描述
    5. Session的时效问题
      Session默认有效时间为30分钟,可以在服务器的web.xml配置中修改.
      在这里插入图片描述

    URL重写

    1. 整个会话控制技术体系中,保持JSESSIONID的值主要通过Cookie实现。但Cookie在浏览器端可能会被禁用,所以我们还需要一些备用的技术手段,例如:URL重写。
    2. URL重写其实就是将JSESSIONID的值以固定格式附着在URL地址后面,以实现保持JSESSIONID,进而保持会话状态。这个固定格式是:URL;jsessionid=xxxxxxxxx
    3. 实现方式
      在这里插入图片描述

    具体功能展示

    在这里插入图片描述

    主页面访问权限控制

    涉及的技术知识点

    • 过滤器

    过滤器

    1. 对于WEB应用来说,过滤器是一个驻留在服务器中的WEB组件,他可以截取客户端和WEB资源之间的请求和响应信息。WEB资源可能包括Servlet、JSP、HTML页面等
    2. 当服务器收到特定的请求后,会先将请求交给过滤器,程序员可以在过滤器中对请求信息进行读取修改等操作,然后将请求信息再发送给目标资源。目标资源作出响应后,服务器会再次将响应转交给过滤器,在过滤器中同样可以对响应信息做一些操作,然后再将响应发送给服务器。
    3. 也就是说过滤器可以在WEB资源收到请求之前,浏览器收到响应之前,对请求和响应信息做一些相应的操作。
    4. 在一个WEB应用中可以部署多个过滤器,多个过滤器就组成了一个过滤器链,请求和响应必须在经过多个过滤器后才能到达目标
      在这里插入图片描述

    过滤器的使用

    1. 通过实现Filter接口完成过滤器的开发
      在这里插入图片描述
    2. Filter在web.xml中的配置
      在这里插入图片描述

    主页面访问权限控制要求

    1. 在进入主页面必须进行登录状态的判断,如果未登录状态不允许进入主界面。
    2. 登录状态的判断再过滤器中实现,更为通用,而且可拔插。

    在线人数统计

    涉及的技术知识点

    • 监听器

    监听器

    1. Listener用于监听JavaWeb程序中的事件。
    2. 例如:ServletContext、HttpSession、ServletRequest的创建、修改和删除。
    3. 监听器的类型分为
      ①生命周期
      ②数据绑定
      在这里插入图片描述

    在线人数统计功能展示

    在这里插入图片描述

    xml

    xml简介

    1. XML–可扩展标记语言eXtensible Markup Language
    2. 由W3C组织发布,目前推荐遵守的是W3C组织于2000年发布的XML1.0规范
    3. XML的使命,就是以一个统一的格式,组织有关系的数据,为不同平台下的应用程序服务
    4. XML用来传输和存储数据,HTML用来显示数据
    5. XML没有预定义标签,均为自定义标签

    xml用途

    1. 配置文件
      JavaWeb中的web.xml
      C3P0中的c3p0-config.xml
    2. 数据交换格式
      Ajax
      WebService
    3. 数据存储
      保存关系型数据

    在这里插入图片描述

    xml基本语法

    1. XML文档组成
      ①XML声明
      version属性指定XML版本,固定值是1.0
      encoding指定的字符集,是告诉解析器使用什么字符集进行解码,而编码是由文本 编辑器决定的
      ②CDATA区
      当XML文档中需要写一些程序代码、SQL语句或其他不希望XML解析器进行解析 的内容时,就可以写在CDATA区中
      XML解析器会将CDATA区中的内容原封不动的输出
      CDATA区的定义格式:<![CDATA[…]]>
    2. 语法规则
      ①XML声明要么不写,要写就写在第一行,并且前面没有任何其他字符
      ②只能有一个根标签
      ③标签必须正确结束
      ④标签不能交叉嵌
      ⑤严格区分大小写
      ⑥属性必须有值,且必须加引号
      ⑦标签不能以数字开头
      ⑧注释不能嵌套

    xml解析

    1. XML解析是指通过解析器读取XML文档,解释语法,并将文档转化成对象
    2. 常用的解析方式
      DOM(Document Object Model)
      SAX(Simple API for XML)
    3. DOM 和SAX解析的对比
      在这里插入图片描述
    4. Dom4j解析示例
      解析
    //1.创建解析器对象
    SAXReader saxReader = new SAXReader();
    //2.解析xml文件获取document对象
    Document document = saxReader.read("students.xml");
    //3.得到根元素
    Element root = document.getRootElement();
    

    JSON

    JSON 简介

    1. AJAX一开始使用的时XML的数据格式,XML的数据格式非常简单清晰,容易编写,但是由于XML中包含了过多的标签,以及十分复杂的结构,解析起来也相对复杂,所以目前来讲,AJAX中已经几乎不使用XML来发送数据了。取而代之的是一项新的技术JSON。
    2. JSON是JavaScript Object Notation 的缩写,是JS提供的一种数据交换格式。
    3. JSON对象本质上就是一个JS对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言中进行传递,通过工具又可以转换为其他语言中的对象。
    4. 例,有如下一个JSON对象:
      ①{“name”:”sunwukong” , ”age”:18 , ”address”:”beijing” }
      ②这个对象中有三个属性name、age和address
      ③如果将该对象使用单引号引起了,那么他就变成了一个字符串
      ④‘{“name”:”sunwukong” , ”age”:18 , ”address”:”beijing” }’
      ⑤变成字符串后有一个好处,就是可以在不同语言之间传递。
      ⑥比如,将JSON作为一个字符串发送给Servlet,在Java中就可以把JSON字符串转换为一个Java对象。

    JSON通过6种数据类型来表示

    1. 字符串
    • 例子:”字符串”
    • 注意:不能使用单引号
    1. 数字:
    • 例子:123.4
    1. 布尔值:
    • 例子:true、false
    1. null值:
    • 例子:null
    1. 对象
    • 例子:{“name”:”sunwukong”, ”age”:18}
      6.数组
    • 例子:[1,”str”,true]

    在JS中操作JSON

    1. 创建JSON对象
    • var json = {“name1”:”value1”,”name2”:”value2” , “name3”:[1,”str”,true]};
    • var json = [{“name1”:”value1”},{“name2”:”value2”}];
    1. JSON对象转换为JSON字符串
    • JSON.stringify(JSON对象)
    1. JSON字符串转换为JSON对象
    • JSON.parse(JSON字符串)

    在Java中操作JSON

    1. 在Java中可以从文件中读取JSON字符串,也可以是客户端发送的JSON字符串,所以第一个问题,我们先来看如何将一个JSON字符串转换成一个Java对象。
    2. 首先解析JSON字符串我们需要导入第三方的工具,目前主流的解析JSON的工具大概有三种json-lib、jackson、gson。三种解析工具相比较json-lib的使用复杂,且效率较差。而Jackson和gson解析效率较高。使用简单,这里我们以gson为例讲解。
    3. Gson是Google公司出品的解析JSON工具,使用简单,解析性能好。
    4. Gson中解析JSON的核心是Gson的类,解析操作都是通过该类实例进行。
    5. JSON字符串转换为对象
    String json = "{\"name\":\"张三\",\"age\":18}";
    Gson gson = new Gson();
    //转换为集合
    Map<String,Object> stuMap = gson.fromJson(json, Map.class);
    //如果编写了相应的类也可以转换为指定对象
    Student fromJson = gson.fromJson(json, Student.class);
    
    1. 对象转换为JSON字符串
    Student stu = new Student("李四", 23);
    Gson gson = new Gson();
    //{"name":"李四","age":23}
    String json = gson.toJson(stu);
    		
    Map<String , Object> map = new HashMap<String, Object>();
    map.put("name", "孙悟空");
    map.put("age", 30);
    //{"age":30,"name":"孙悟空"}
    String json2 = gson.toJson(map);
    		
    List<Student> list = new ArrayList<Student>();
    list.add(new Student("八戒", 18));
    list.add(new Student("沙僧", 28));
    list.add(new Student("唐僧", 38));
    //[{"name":"八戒","age":18},{"name":"沙僧","age":28},
    {"name":"唐僧","age":38}]
    String json3 = gson.toJson(list);		
         // 如果将一个数组格式的json字符串转换成java对象需要用到
         //Gson提供的一个匿名内部类: TypeToken
    	TypeToken tk= new TypeToken<List<User>>(){};
    	List<User> list2 = gson.fromJson(json,tk.getType());
    	System.out.println(list2.get(0));
    

    JQuery 异步请求返回JSON数据

    1. Servlet 返回json数据
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    		List<Employee> emps = new EmployeeDaoJdbcImpl().getAllEmps();
    		Gson gson = new Gson();
    		String jsonStr = gson.toJson(emps);
    		response.setContentType("text/html;charset=utf-8");
    		PrintWriter out = response.getWriter();
    		out.println(jsonStr);
    		out.close();
    }
    
    1. 页面中处理 json数据
    function getJsonStr(){
    		//通过JQuery发送异步请求, 将所有的员工信息通过json的格式返回
     $.ajax({
    	url:"getEmpsJsonStr",
    	type:"post",
    	dataType:"json",
    	success:function(data){  // 会直接将后台返回的json字符串转换成js对象
    		var str = "<tr><th>Id</th><th>LastName</th><th>Email</th><th>Gender</th></tr>";
    		for(var i= 0 ;i <data.length;i++){
    			var emp = data[i];
    			str+="<tr align='center'><td>"
                     +emp.id+
                     "</td><td>"
                     +emp.lastName+
                     "</td><td>"
                     +emp.email+
                     "</td><td>"
                     +emp.gender+
                     "</td></tr>"	
    		}	
    				$("#tb").html(str);
    			}
    		});
    	}
    
    <body>
    	<input type="button" value="getJsonStr" onclick="getJsonStr();"/>
    	<table id="tb" border="1px"  align="center" width="60%" cellspacing="0px" >	
    	</table>
    </body>
    
    OctoberMon 08Mon 15Mon 22Mon 29Mon 05Mon 12Mon 19Mon 26已完成 进行中 计划一 计划二 现有任务大数据学习计划
    展开全文
  • Java WEB开发基础知识

    万次阅读 多人点赞 2018-05-30 20:49:39
    一、WEB应用程序B/S ( browser/server ,浏览器/服务器)架构基于HTTP传输协议(超文本传输协议,回忆HTML的名字:超文本标记语言)WEB程序必须要运行在web容器上,如Tomcat /Jboss/WebLogic等二、HTTP协议HTTP使用...

    一、WEB应用程序

    B/S ( browser/server ,浏览器/服务器)架构

    基于HTTP传输协议(超文本传输协议,回忆HTML的名字:超文本标记语言)

    WEB程序必须要运行在web容器上,如Tomcat /Jboss/WebLogic等

    二、HTTP协议

    HTTP使用TCP作为它的支撑运输层协议,默认的端口是80(缺省端口)。

    超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议。HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息。 

    HTTP 请求报文HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成,如下图所示:

    wKioL1THNfahGAkDAAFu--59S3M173.jpg

    HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成下面对请求报文格式进行简单的分析:

    请求行:请求行由方法字段、URL 字段 和HTTP 协议版本字段 3 个部分组成,他们之间使用空格隔开。常用的 HTTP 请求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;

    GET:当客户端要从服务器中读取某个资源时,使用GET 方法。GET 方法要求服务器将URL 定位的资源放在响应报文的数据部分,回送给客户端,即向服务器请求某个资源。使用GET 方法时,请求参数和对应的值附加在 URL 后面,利用一个问号(“?”)代表URL 的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。

    POST:当客户端给服务器提供信息较多时可以使用POST 方法,POST 方法向服务器提交数据,比如完成表单数据的提交,将数据提交给服务器处理。GET 一般用于获取/查询资源信息,POST 会附带用户数据,一般用于更新资源信息。POST 方法将请求参数封装在HTTP 请求数据中,以名称/值的形式出现,可以传输大量数据;请求头部:请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。

    请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

    User-Agent:产生请求的浏览器类型;

    Accept:客户端可识别的响应内容类型列表;星号 “ * ” 用于按范围将类型分组,用 “ */* ” 指示可接受全部类型,用“ type/* ”指示可接受 type 类型的所有子类型;

    Accept-Language:客户端可接受的自然语言;

    Accept-Encoding:客户端可接受的编码压缩格式;

    Accept-Charset:可接受的应答的字符集;

    Host:请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机;

    connection:连接方式(close 或 keepalive);

     Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie;

    空行:最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头;

    请求包体:请求包体不在 GET 方法中使用,而是在POST 方法中使用。POST 方法适用于需要客户填写表单的场合。与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length。

    HTTP 响应报文HTTP 响应报文由状态行、响应头部、空行 和 响应包体 4 个部分组成,如下图所示:

    20150126110634828.png

    下面对响应报文格式进行简单的分析:

    状态行:状态行由 HTTP 协议版本字段、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开; 状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:

    1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;

    2xx:表示服务器已成功接收到请求并进行处理;

    3xx:表示服务器要求客户端重定向;

    4xx:表示客户端的请求有非法内容; 

    5xx:表示服务器未能正常处理客户端的请求而出现意外错误;

    状态码描述文本有如下取值:

    200 OK:表示客户端请求成功; 

    400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解; 

    401 Unauthonzed:表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;

    403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因; 

    404 Not Found:请求的资源不存在,例如,输入了错误的URL; 

    500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求; 

    503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;

    三、Servlet

    Servlet是javaWEB的核心,简单的说就是用Java编写的服务器端程序。用户进行一个动态请求(静态请求就是直接请求HTML )时,实际上是请求—个servlet

    WEB容器将Servlet加载到内存 通过init方法进行初始化

    Service()方法根据请求方法调用对应的处理方法doPost()或doGet(),还有一些其他的请求方法doPut() doOptions()...但这些方法不常用,并且从安全的角度都是建议屏蔽的。

    当Server不再需要Servlet时(一般当Server关闭时),Server调用 Servlet 的 destroy() 方法。

    四、JSP

    Java Server Pages是一种静态编码町机和动态编码Java混合的技术, 也有说法就是将java代码镶嵌在HTML上,在JSP之前,Servlet作为主体,功能比较强大,设计也很先进,但瑜出 HTML页面却完全是Java的out.print(), 一行一句的输出,对于页面编写和修改来说非常不方便,这才促使SUN公司推出JSP。JSP和ASP、PHP类似都是镶嵌型语言。另外补充一下,WEB容器后动的时候,会将_JSP编译成Servlet,也有说法JSP是Servlet的升级版。

    五、Tomcat

    Java WEB容器有很多,这里以Tomcat为例来说。前面说到,WEB程序必须运行在WEB容器上。Tomcat就是作为WEB容器来运行切Java WEB程序的。Tomcat是JAVA语言写的,需要JVM作为运行环境。

    Tomcat的目录结构

    bin………………………………可执行程序(脚本),启动停止调试Tomcat的一些bat.sh

    conf…………………………….配置文件 webx.ml server.xml 等

    lib……………………………....Tomcat运行需要的jar包

    logs…………………………….曰志文件

    temp…………………………….临时文件

    webapps………………………WEB 程序(编译后的项目文件)

    work…………………………….将jsp文件生成java文件在此目录进行

    补充说明一下,Tomcat将jsp编译成Java文件并不是实时进行的,所以有时候修改了页面,并没有及时生效,这时候我们只需要删除一下work目录下对应的文件即可。

    六、Java WEB项目结构

    一般来说,我们常说的Java项目基本上都是WEB项目(B/S架构),不是说Java不能做C/S程序,实际上Java的Swing就是画界面的,但是现在C#已经成为画界面最流行的语言,快速,简单,所以越来越少的人用Java来做C/S程序开发了。我们主要来说Java WEB项目,下面是最基本的项目结构。

    src…………………………….JAVA源码,java文件目录

    webContent/webRoot……………项目发布目录

    WEB-INF

    lib………………………………….项目需要的jar包

    web.xml…………………………WEB 程序的入口

    以上是Java WEB项目的核心结构,实际开发中,搭建项目会比这些复杂,特别是引用框架以后,配置文件的增加,会添加一些新的目录。

    七、开发框架

    前面提到客户端发起动态请求时,请求到Servlet进行处理,然后返回,整个请求处理的工作都是在Servlet中处理的,看起来比较简单,每当需要一个不同的请求就写一个Servlet,但实际开发的时候如果功能模块比较多,就需要写很多个Servlet,并且如果我们想修改一个请求的返回,也必须通过修改Java代码 (Servlet)的方式来实现。

    这样对功能的扩展和维护来说,就比较麻烦了,所以也就推动了很多集成幵发框架的流行,比如Webwork,Struts,SpringMVC,Jfinal等都是主流的Java WEB开发框架。

    使用框架有一个很笼统的优点概述,可以加快开发进程,在类似项目中重用代码将为开发者节省大量的时间和精力.框架为执行繁琐的代码任务提供预建模块。让使用者只关心核心业务的开发,框架帮你屏蔽原有技术跟业务开发无关的各类技术问题。但如果想要深入的了解一个框架,使用的更加熟练,还是需要了解底层的原理,找到其源头也就是Servlet。

    以SpringMVC为例简单描述一下工作原理

    SprfngMVC主要也是通过DispatcherServlet (Servlet调配器,在web_xml中配置)实现了Servlet这个接口,又叫前端控制器,来自前端的请求会先到达这里,它负责到后台去匹配合适的handler。DispatcherServlet的主要工作流程如下:

    1、 客户端发出http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.

    2、 DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器Controller (Handler)。

    3、 DispatclierServlet 根据 HandlerMapping 找到对应的Handler,将处理权交给Handler ( Handler将具体的处理进行封装),再由具体的 HandlerAdapter对Handler进行具体的调用。

    5、Handler对数据处理完成以后将返回一个ModeAndView对象给DispatcherServlet.

    6、  Handler返回的ModelAndView只是一个逻辑视图并不是一个正式的视图,Di spatcherSevlet通过ViewResolver将邀辑视图转化为真正的视图view(这句话简单的就是返回一个要返回的页面的相对路径,通过试图解析器转换成具体那个页面)。

    7、  Dispatcher通过model解析出ModeAndView中的参数进行解析最终展现出完整的view并返回给客户端。

    八、用SpringMVC编写功能模块

    由于框架配置工作量比较大,也需要对各方面的技术有所了解,暂时不做描述。我们简单的说一下实际开发中,如何在现有的框架基础上完成一个功能模块,了解功能的基本流程,以登录为例:

    1、首先要有登录入口( JSP页面),在SpringMVC框架中我们不建议直接 访问JSP页面,所以我们登录页面的访问也是通过后台处理的;

    2、编写丨ogin.jsp页面及登录返回页面index.jsp ;

    3、编写LoginController,里面包含两个请求控制方法,一个preLogin(),一个doLogin() ,其中preLogin()负责处理请求登录页面的请求(返回到 login.jsp ), doLogin()处理登录请求返回到index.jsp。

    4. login.jsp中需要通过表单或者ajax进行登录请求。

    请求/preLogin业务逻辑处理返回到login.jsp à 输入用户名、密码…

    请求/doLogin业务逻辑处理,返回登录结果index.jsp。

    九、其他基础知识

    数据库操作,Jdbc/Hibernate/Mybatis

    JSP标签,EL表达式,Struts标签,C标签等

    基本的前端技术CSS/JS/jQuery/Ajax


    参考资料 :

    Java WEB开发基础知识


    展开全文
  • 手把手搭建一个完整的javaweb项目(适合新手)

    万次阅读 多人点赞 2019-04-24 16:51:18
    手把手搭建一个完整的javaweb项目 本案例使用Servlet+jsp制作,用MyEclipse和Mysql数据库进行搭建,详细介绍了搭建过程及知识点。 下载地址:http://download.csdn.net/detail/qq_23994787/9904842点击下载 主要...

    手把手搭建一个完整的javaweb项目

    本案例使用Servlet+jsp制作,用MyEclipse和Mysql数据库进行搭建,详细介绍了搭建过程及知识点。

     

    下载地址:http://download.csdn.net/detail/qq_23994787/9904842  点击下载

    主要功能有:

    1.用户注册

    2.用户登录

    3.用户列表展示

    4.用户信息修改

    5.用户信息删除

     

    涉及到的知识点有:   

    1.JDBC

    2.Servlet

    3.过滤器

    4..EL与JSTL表达式

     

    1.首先打开mysql数据库 新建一个数据库test,然后生成对应的表结构

     

    CREATE TABLE `user` (
      `id` int(11) NOT NULL auto_increment,
      `name` varchar(255) NOT NULL,
      `pwd` varchar(255) NOT NULL,
      `sex` varchar(255) NOT NULL,
      `home` varchar(255) NOT NULL,
      `info` varchar(255) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
    
    
    INSERT INTO `user` VALUES ('3', '123', '123', '123', '123', '123');
    INSERT INTO `user` VALUES ('4', '123123', '123123', '男', '北京', '123123');
    

     

    这里使用到了navicat for mysql    这是一种mysql的图形界面化工具,后期可以非常方便的操作数据库。

     

    需要的童鞋 给你们个连接     http://download.csdn.net/download/qq_23994787/10168988

    2.然后打开MyEclipse新建一个web项目

    3.在webroot下的WEB-INF下的lib中导入mysql的驱动jar包

    4.建立对应的包结构 
    com.filter   //过滤器 解决中文字符集乱码
    com.util     //数据库连接工具类
    com.entity   //实体类
    com.dao      //数据操作类
    com.servlet   //servlet类

    5.在filter下新建一个EncodingFilter用来解决中文字符集乱码,它需要实现Filter接口,并重写doFilter函数

     

    package com.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    public class EncodingFilter implements Filter{
    	public EncodingFilter(){
    		System.out.println("过滤器构造");
    	}
    	public void destroy() {
    		System.out.println("过滤器销毁");
    	}
    	public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
    		request.setCharacterEncoding("utf-8"); //将编码改为utf-8
    		response.setContentType("text/html;charset=utf-8");
    		chain.doFilter(request, response);
    	}
    
    	public void init(FilterConfig arg0) throws ServletException {
    		System.out.println("过滤器初始化");
    	}
    
    }
    

     


    6.到web.xml下进行对EncodingFilter相应的配置

     

     

     

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
    	xmlns="http://java.sun.com/xml/ns/javaee" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <display-name></display-name>	
      
      <filter>
      	<filter-name>EncodingFilter</filter-name>
      	<filter-class>com.filter.EncodingFilter</filter-class><!--全路径 从根包开始一直到类名-->
      </filter>
      <filter-mapping>
      	<filter-name>EncodingFilter</filter-name>
      	<url-pattern>/*</url-pattern> <!--*即为过滤所有-->
      </filter-mapping>
      
      
      <welcome-file-list>
        <welcome-file>denglu.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    

     


    7.在util下新建一个DBconn类用来处理对数据库的连接操作(用户名或密码按照自己的数据库更改)

     

     

     

    package com.util;
    
    import java.sql.*;
    
    public class DBconn {
    	static String url = "jdbc:mysql://localhost:3306/test?useunicuee=true& characterEncoding=utf8"; 
    	static String username = "root"; 
    	static String password = "root"; 
    	static Connection  conn = null;
    	static ResultSet rs = null;
    	static PreparedStatement ps =null;
    	public static void init(){
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    			conn = DriverManager.getConnection(url,username,password);
    		} catch (Exception e) {
    			System.out.println("init [SQL驱动程序初始化失败!]");
    			e.printStackTrace();
    		}
    	}
    	public static int addUpdDel(String sql){
    		int i = 0;
    		try {
    			PreparedStatement ps =  conn.prepareStatement(sql);
    			i =  ps.executeUpdate();
    		} catch (SQLException e) {
    			System.out.println("sql数据库增删改异常");
    			e.printStackTrace();
    		}
    		
    		return i;
    	}
    	public static ResultSet selectSql(String sql){
    		try {
    			ps =  conn.prepareStatement(sql);
    			rs =  ps.executeQuery(sql);
    		} catch (SQLException e) {
    			System.out.println("sql数据库查询异常");
    			e.printStackTrace();
    		}
    		return rs;
    	}
    	public static void closeConn(){
    		try {
    			conn.close();
    		} catch (SQLException e) {
    			System.out.println("sql数据库关闭异常");
    			e.printStackTrace();
    		}
    	}
    }
    

     


    8.在entity下新建一个User实体类(实体即抽象出来的用户对象,对应数据库中的user表,表中每个字段在实体中为一个属性,也可以理解为一个User对象对应数据库中的user表一条记录)

     

     

     

    package com.entity;
    
    public class User {
        private int id;
        private String name;
        private String pwd;
        private String sex;
        private String home;
        private String info;
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getPwd() {
    		return pwd;
    	}
    	public void setPwd(String pwd) {
    		this.pwd = pwd;
    	}
    	public String getSex() {
    		return sex;
    	}
    	public void setSex(String sex) {
    		this.sex = sex;
    	}
    	public String getHome() {
    		return home;
    	}
    	public void setHome(String home) {
    		this.home = home;
    	}
    	public String getInfo() {
    		return info;
    	}
    	public void setInfo(String info) {
    		this.info = info;
    	}
        
    }
    

     


    9.在dao下新建一个UserDao接口  以及对应的方法实现类(使用接口类是为了规范开发)

     

     

    UserDao.java

     

    package com.dao;
    
    import java.util.List;
    
    import com.entity.User;
    
    public interface UserDao {
    	public boolean login(String name,String pwd);//登录
    	public boolean register(User user);//注册
    	public List<User> getUserAll();//返回用户信息集合
    	public boolean delete(int id) ;//根据id删除用户
    	public boolean update(int id,String name, String pwd,String sex, String home,String info) ;//更新用户信息
    }
    

     

    新建UserDaoImpl.java     实现UserDao接口,及未实现的方法     (SQL语句建议在mysql中测试以下,没有问题然后在拿到实现类中使用,可以避免无必要的麻烦)

    本例子SQL使用字符串拼接的方式,其实还有一种预加载的方式,有兴趣的童鞋可以参考我的博客,了解预加载的方式处理SQL语句与字符串拼接方式的区别。

    package com.dao;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.entity.User;
    import com.util.DBconn;
    
    public class UserDaoImpl implements UserDao{
    	
    	public boolean register(User user) {
    		boolean flag = false;
    		DBconn.init();
    		int i =DBconn.addUpdDel("insert into user(name,pwd,sex,home,info) " +
    				"values('"+user.getName()+"','"+user.getPwd()+"','"+user.getSex()+"','"+user.getHome()+"','"+user.getInfo()+"')");
    		if(i>0){
    			flag = true;
    		}
    		DBconn.closeConn();
    		return flag;
    	}
        public boolean login(String name, String pwd) {
    		boolean flag = false;
    		try {
    			    DBconn.init();
    				ResultSet rs = DBconn.selectSql("select * from user where name='"+name+"' and pwd='"+pwd+"'");
    				while(rs.next()){
    					if(rs.getString("name").equals(name) && rs.getString("pwd").equals(pwd)){
    						flag = true;
    					}
    				}
    				DBconn.closeConn();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return flag;
    	}
    	public List<User> getUserAll() {
    		List<User> list = new ArrayList<User>();
        	try {
    		    DBconn.init();
    			ResultSet rs = DBconn.selectSql("select * from user");
    			while(rs.next()){
    				User user = new User();
    				user.setId(rs.getInt("id"));
    				user.setName(rs.getString("name"));
    				user.setPwd(rs.getString("pwd"));
    				user.setSex(rs.getString("sex"));
    				user.setHome(rs.getString("home"));
    				user.setInfo(rs.getString("info"));
    				list.add(user);
    			}
    			DBconn.closeConn();
    			return list;
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    	public boolean update(int id,String name, String pwd,String sex, String home,String info) {
    		boolean flag = false;
    		DBconn.init();
    		String sql ="update user set name ='"+name
    				+"' , pwd ='"+pwd
    				+"' , sex ='"+sex
    				+"' , home ='"+home
    				+"' , info ='"+info+"' where id = "+id;
    		int i =DBconn.addUpdDel(sql);
    		if(i>0){
    			flag = true;
    		}
    		DBconn.closeConn();
    		return flag;
    	}
    	public boolean delete(int id) {
    		boolean flag = false;
    		DBconn.init();
    		String sql = "delete  from user where id="+id;
    		int i =DBconn.addUpdDel(sql);
    		if(i>0){
    			flag = true;
    		}
    		DBconn.closeConn();
    		return flag;
    	}
        
    }
    

     

     

     

    10.在servlet下创建DengluServlet用来实现对用户登录的操作(Servlet有两种方式创建,一种手工创建。另一种程序自动生成。前者自己创建java类,实现Servlet具体内容,然后需要去WEB_INF下的web.xml去配置servlet  . 而后者则直接由程序替我们配置好了Servlet)本例子使用第二种方式生成Servlet

     

     

     

    DengluServlet.java

     

    package com.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.dao.UserDao;
    import com.dao.UserDaoImpl;
    
    public class DengluServlet extends HttpServlet {  //需要继承HttpServlet  并重写doGet  doPost方法
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doPost(request, response);  //将信息使用doPost方法执行   对应jsp页面中的form表单中的method
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		String name = request.getParameter("name"); //得到jsp页面传过来的参数
    		String pwd = request.getParameter("pwd");
    		
    		UserDao ud = new UserDaoImpl();
    		
    		if(ud.login(name, pwd)){
    			request.setAttribute("xiaoxi", "欢迎用户"+name); //向request域中放置信息
    			request.getRequestDispatcher("/success.jsp").forward(request, response);//转发到成功页面
    		}else{
    			response.sendRedirect("index.jsp"); //重定向到首页
    		}
    	}
    
    }
    

     

    有两点要注意的地方:

    一:getParameter与getAttribute两者的区别

    request.setAttribute("xiaoxi", "欢迎用户"+name);//向request域中放置信息 ( 键值对的形式)  名字为xiaoxi  内容为"欢迎用户"+name

    request.getAttribute("xiaoxi");//得到request域中放置名字为xiaoxi的信息

    request.getParameter("name");//得到request域的参数信息(得到jsp页面传过来的参数)

    getAttribute表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型 。

    getParameter表示接收参数,参数为页面提交的参数,包括:表单提交的参数、URL重写(就是xxx?id=1中的id)传的参数等,因此这个并没有设置参数的方法(没有setParameter),而且接收参数返回的不是Object,而是String类型

    二:转发与重定向的区别

    (1).重定向的执行过程:Web服务器向浏览器发送一个http响应--》浏览器接受此响应后再发送一个新的http请求到服务器--》服务器根据此请求寻找资源并发送给浏览器。它可以重定向到任意URL,不能共享request范围内的数据。
    (2).重定向是在客户端发挥作用,通过新的地址实现页面转向。
    (3).重定向是通过浏览器重新请求地址,在地址栏中可以显示转向后的地址。
    (4).转发过程:Web服务器调用内部方法在容器内部完成请求和转发动作--》将目标资源发送给浏览器,它只能在同一个Web应用中使用,可以共享request范围内的数据。
    (5).转发是在服务器端发挥作用,通过forward()方法将提交信息在多个页面间进行传递。
    (6).转发是在服务器内部控制权的转移,客户端浏览器的地址栏不会显示出转向后的地址。

     

    11.在servlet下创建一个ZhuceServlet用来实现用户注册的操作

     

    ZhuceServlet.java

     

    package com.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.dao.UserDao;
    import com.dao.UserDaoImpl;
    import com.entity.User;
    
    public class ZhuceServlet extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doPost(request, response);
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		String name = request.getParameter("name"); //获取jsp页面传过来的参数
    		String pwd = request.getParameter("pwd");
    		String sex = request.getParameter("sex");
    		String home = request.getParameter("home");
    		String info = request.getParameter("info");
    		
    		User user = new User(); //实例化一个对象,组装属性
    		user.setName(name);
    		user.setPwd(pwd);
    		user.setSex(sex);
    		user.setHome(home);
    		user.setInfo(info);
    		
    		UserDao ud = new UserDaoImpl();
    		
    		if(ud.register(user)){
    			request.setAttribute("username", name);  //向request域中放置参数
    			//request.setAttribute("xiaoxi", "注册成功");
    			request.getRequestDispatcher("/denglu.jsp").forward(request, response);  //转发到登录页面
    		}else{
    			
    			response.sendRedirect("index.jsp");//重定向到首页
    		}
    	}
    }
    

     


    12.在servlet下创建SearchallServlet用来返回数据库中所有用户信息

     

     

    Searchall.java

     

    package com.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.dao.UserDao;
    import com.dao.UserDaoImpl;
    import com.entity.User;
    
    public class Searchall extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doPost(request, response);
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		UserDao ud = new UserDaoImpl();
    		List<User> userAll = ud.getUserAll();
    		request.setAttribute("userAll", userAll);
    		request.getRequestDispatcher("/showall.jsp").forward(request, response);
    	}
    }
    

     


    13.在servlet下创建DeleteServlet用来删除用户操作

     

     

    DeleteServlet.java

     

    package com.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.dao.UserDao;
    import com.dao.UserDaoImpl;
    
    public class DeleteServlet extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doPost(request, response);
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		String id = request.getParameter("id");
    		int userId = Integer.parseInt(id);
    		
    		UserDao ud = new UserDaoImpl();
    		
    		if(ud.delete(userId)){
    			request.setAttribute("xiaoxi", "删除成功");
    			request.getRequestDispatcher("/Searchall").forward(request, response);
    		}else{
    			response.sendRedirect("index.jsp");
    		}
    	}
    
    }
    

     


    14.在servlet下创建UpdateServlet操作用来更新用户信息

     

     

    UpdateServlet.java

     

    package com.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.dao.UserDao;
    import com.dao.UserDaoImpl;
    import com.entity.User;
    
    public class UpdateServlet extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doPost(request, response);
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		String id = request.getParameter("id");
    		int userId = Integer.parseInt(id);
    		
    		String name = request.getParameter("name");
    		String pwd = request.getParameter("pwd");
    		String sex = request.getParameter("sex");
    		String home = request.getParameter("home");
    		String info = request.getParameter("info");
    		
    		System.out.println("------------------------------------"+userId);
    		
    		UserDao ud = new UserDaoImpl();
    		
    		if(ud.update(userId, name, pwd, sex, home, info)){
    			request.setAttribute("xiaoxi", "更新成功");
    			request.getRequestDispatcher("/Searchall").forward(request, response);
    		}else{
    			response.sendRedirect("index.jsp");
    		}
    	}
    }
    
    


    15.配置servlet       如果非手打而用MyEclipse生成则不用配置  附完整web.xml

     

     

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
    	xmlns="http://java.sun.com/xml/ns/javaee" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <display-name></display-name>	
      
      <filter><!--过滤器配置-->
      	<filter-name>EncodingFilter</filter-name>
      	<filter-class>com.filter.EncodingFilter</filter-class>
      </filter>
      <filter-mapping>
      	<filter-name>EncodingFilter</filter-name>
      	<url-pattern>/*</url-pattern>
      </filter-mapping>
      
      
      
      <servlet><!--servlet类路径配置-->
        <servlet-name>DengluServlet</servlet-name>
        <servlet-class>com.servlet.DengluServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>ZhuceServlet</servlet-name>
        <servlet-class>com.servlet.ZhuceServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>Searchall</servlet-name>
        <servlet-class>com.servlet.Searchall</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>DeleteServlet</servlet-name>
        <servlet-class>com.servlet.DeleteServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>UpdateServlet</servlet-name>
        <servlet-class>com.servlet.UpdateServlet</servlet-class>
      </servlet>
    
    
    
      <servlet-mapping><!--servlet类映射配置-->
        <servlet-name>DengluServlet</servlet-name>
        <url-pattern>/DengluServlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>ZhuceServlet</servlet-name>
        <url-pattern>/ZhuceServlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>Searchall</servlet-name>
        <url-pattern>/Searchall</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>DeleteServlet</servlet-name>
        <url-pattern>/DeleteServlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>UpdateServlet</servlet-name>
        <url-pattern>/UpdateServlet</url-pattern>
      </servlet-mapping>
      
      
      
      <welcome-file-list><!--默认首页地址-->
        <welcome-file>denglu.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    


    16.新建jsp页面

     

    denglu.jsp 用户登录页面      默认页面进入项目后  先进入该页面(web.xml中配置)    

    form表单中需要注意的是<form action="DengluServlet"  method="post">

    其中action即为要跳转的servlet路径(即在web.xml中配置的servlet-mapping   :<url-pattern>/DengluServlet</url-pattern>   ,)写  /  后的内容。

    method="post"为传递值得方法类型有两种,第一种get,第二种post。网上介绍这两种的区别有很多,阐述的又是百家争鸣。而我觉得那个方便就用那个,一般使用post传递,可避免乱码。

    另一个需要注意的是   用户名:<input type="text" name="name" value="">  input标签  一定要起个名字  如name="name"  

    起名的作用就是让后台通过request.getParterment("name");来取值

     

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>登录注册页面</title>
      </head>
      <body >
             <form action="DengluServlet"  method="post"  style="padding-top:-700px;">
    		用户名:<input type="text" name="name"value=""><br><br>
     		密码:  <input type="password" name="pwd"value=""><br><br>
    	                <input type="submit"value="登录"name="denglu"><input type="reset"value="重置"><br>
    	 </form>
    	 <form action="zhuce.jsp">
    	 	<input type="submit"value="新用户注册">
             </form>
        
      </body>
    </html>
    


    zhuce.jsp  用户注册页面

     

     

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP 'BB.jsp' starting page</title>
      </head>
      <body >
      <form action="ZhuceServlet"method="post" style="padding-top:-700px;">
    	   输入用户名:<input name="name" type="text"><br><br>
    	   输入密码:<input name="pwd" type="password"><br><br>
    	   选择性别:<input type="radio"name="sex"value="男"checked>男
    	        <input type="radio"name="sex"value="女">女<br><br>
    	   选择家乡:
    	   <select name="home">
    		   <option value="上海">上海</option>
    		   <option value="北京" selected>北京</option>
    		   <option value="纽约">纽约</option>
       		</select><br>
                   填写个人信息:<br>
    	   <textarea name="info" row="5"cols="30"></textarea><br>
    	   <input type="reset"value="重置"><input type="submit"value="注册">
       </form>
      </body>
    </html>
    

     
    index.jsp  失败页面

     

     

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP 'index.jsp' starting page</title>
      </head>
      <body>
        		<h1>失敗</h1>
      </body>
    </html>
    

     

    success.jsp  成功页面

     

     

    ${xiaoxi}为EL表达式  获取request域中的键名为xiaoxi的值

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP 'success.jsp' starting page</title>
      </head>
      <body>
    			${xiaoxi} <br>  
    			<a href="Searchall">查看所有用户</a>
      </body>
    </html>

    showall.jsp   展现所有用户页面

    页面使用的到JSTL表达式 即c标签。使用c标签需要引入头文件<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 。

    需要注意的的是El标签配合JSTl标签的使用,<c:forEach var="U" items="${userAll}"  >   例子foeEach标签的遍历内容即为EL表达式获取的${userAll}

    而且当指定别名后var="U"  ,别名可以随便起,为了方便一般是小写类名命名。  

    C标签内遍历的属性也是需要用${  }获取。此时别名U即为当前集合中的User对象,想得到属性只需要用 ${ U.属性名 }     即可

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>所有用户页面</title>
      </head>
      
      <body>
      <h1>${xiaoxi}</h1>
      <table  width="600" border="1" cellpadding="0" >
      		<tr>
      			<th>ID</th>
    	  		<th>姓名</th>
    	  		<th>性别</th>
    	  		<th>密码</th>
    	  		<th>家乡</th>
    	  		<th>备注</th>
    	  		<th>操作</th>
      		</tr>
         <c:forEach var="U" items="${userAll}"  > 
          <form action="UpdateServlet" method="post"> 
           <tr>
    	       <td><input type="text" value="${U.id}" name="id" ></td>
    	       <td><input type="text" value="${U.name}" name="name"></td>
    	       <td><input type="text" value="${U.sex}" name="sex"></td>
    	       <td><input type="text" value="${U.pwd}" name="pwd"></td>
    	       <td><input type="text" value="${U.home}" name="home"></td>
    	       <td><input type="text" value="${U.info}" name="info"></td>
    	       <td><a href="DeleteServlet?id=${U.id}">删除</a>  <input type="submit" value="更新"/></td>
    	   </tr>
        </form> 
        </c:forEach>  
        </table>
      </body>
    </html>
    

     

     

    项目结构

    最后要说的话

    1.编程不是看会的,是敲会的。只要敲敲敲,才可以深刻的记忆,当然这只能称之为会用,之后深入了解其实现原理才能将其吸收融会贯通。

    2.要养成良好的代码习惯,整洁干净,命名规范,以及详细的注释。这对帮助你成长都大有裨益。

    3.要阅读大牛写的代码,一个人的力量终究是有限的,经常阅读高质量的源码,无形之中就会改变我们的思路,就好比自己琢磨武功,与拥有武林秘籍者相比...

     

    -----------附------------------2018.8.12-------------------------------------------------------

    该文是我几年前进行编辑的一篇文章,其中不乏出现一些不规整的错误,比如命名规范,代码冗余等,可能对于一些小伙伴们来说造成了一些困扰,不过相对来说,本文在一定程度上对javaweb的入门还是具有一定程度上的帮助。但是作为一名严谨的Java开发工程师(码猿)为了大家不再入门时就走弯路,顾我决定重新讲解javaweb方面的知识与内容,并以企业开发规范为标准来实现一个基于javaweb的小系统给大家进行参考。系统开发以完成后续我会整理发布到我的博客中。

     

     

    展开全文
  • Java Web 发展史 (一)

    万次阅读 多人点赞 2019-03-24 11:25:52
    一、原起 唉,说来惭愧,本来是想整理一下SpringBoot相关的知识,顺便结合书和网上的资料写一套完整的东西来作为以后复习、供大家借鉴,然后想先写一篇介绍SpringBoot的文章作为开篇,可是要介绍SpringBoot就得好好...
  • JavaWeb三大组件

    千次阅读 多人点赞 2019-03-05 17:40:47
    一.Servlet(server applet) 1.概念:运行在服务端的小程序 Servlet就是一个接口,定义了java类被浏览器访问到(webServer识别)的规则 将来我们自定义一个类,实现Servlet接口,复写方法,那么这个类就是Servlet ...
  • Java、Javascript、Javaweb三者的区别

    千次阅读 多人点赞 2018-08-21 14:59:23
    首先,我们来说一下java 与 javaweb之间的关系 :  我们平常说的Java一般指Java SE,也就是Java Standard Edition,Java的标准版,一般用来开发桌面应用程序,但是在开发桌面应用程序上相对VB,Delphi...
  • 简单的Java web项目源码(10个)

    万次阅读 2020-02-28 22:18:04
    引言:Java web项目主要采用mvc的的设计思想,系统主要采用java+jsp+servlet+mysql+eclipse实现,具有登陆、分页、导出excel,增删改查等功能,适合初学者,满足基本的实训需求,以下是推荐的几款,总有你喜欢的一个 ...
  • 搭建一个完整的javaweb项目

    万次阅读 多人点赞 2018-08-25 21:54:07
    转:https://blog.csdn.net/qq_23994787/article/details/73612870 主要功能有: 涉及到的知识点有: 1.用户注册 1.JDBC  2.用户登录 ...
  • JavaWeb】史上最全面的JavaWeb视频教程

    万次阅读 多人点赞 2017-05-15 15:27:38
    1. 此套JavaWeb视频为最全面的教程,毫不夸张的说在市面上是独一无二的。课程循序渐进、深入浅出,涉及到所有的知识点。学会本套教程,你就可以完全掌握到JavaWeb开发精髓。   2. 此套JavaWeb视频为最新的教程...
  • 实习复习---javaweb和javaee的区别

    千次阅读 2018-09-25 10:04:23
    用java ee来解决java web的开发,,,而java ee不只用来开发java web    
  • JavaWeb小项目——网上书城

    万次阅读 多人点赞 2018-12-23 12:13:06
    有兴趣的可以下载学习,有问题欢迎联系作者 git源码:https://github.com/QingboTian/bookstore
  • IDE工具(14) idea创建JavaWeb项目(小白教程)

    万次阅读 多人点赞 2020-01-21 15:45:34
    创建项目 第一步: finish之后,项目结构如下图所示 第二步:在WEB-INF下新建classes和lib2个文件夹(Directory) 配置项目 第三步:配置java class字节码编译路径,点击 ...第五步:配置Tom...
  • java&javaweb学习笔记(汇总)

    万次阅读 多人点赞 2016-03-24 11:41:54
    笔记分为两大部分:javase和javaweb。 笔记内容主要是对一些基础特性和编程细节进行总结整理,适合了解java基础语法,想进一步深入学习的人
  • javaweb中同一个form表单中的不同按钮如何提交到不同servlet,如何实现?
  • 有兴趣的可以下载学习,有问题欢迎联系作者 git源码:https://github.com/QingboTian/bookstore 注:重新配置数据库信息和邮箱信息(有具体的配置文件)
  • eclipse导入JavaWeb项目

    万次阅读 多人点赞 2018-05-25 22:22:22
    1.首先我们打开我们的eclipse开发工具2.在工具栏files下右击选择new --》Dynamic Web project 新建一个项目3.... 右击刚刚创建的web项目(这是一个空项目) 选择import --》import 如图所示5. 选择File Systems 然后...
  • javaweb项目实战(附有源码)

    万次阅读 2019-02-24 15:01:38
    如果有想要参考javaweb项目如何做的小伙伴,可以到github上下载,github上有前端和后端代码,在wiki上还有表结构和接口文档 现在将项目源码地址发布出来:https://github.com/WechatAppletByWD/ByHand 如果对您有...
  • javaweb面试题目整理

    万次阅读 多人点赞 2017-02-10 22:21:12
    Java面试题全集(上) Java面试题全集(中) Java面试题全集(下) 骆昊的技术专栏
1 2 3 4 5 ... 20
收藏数 113,908
精华内容 45,563
关键字:

java web