顶呱呱网站开发,广东模板网站建设,怀来县住房和城乡规划建设局网站,正规手游代理商JavaWeb
静态web资源#xff08;如html 页面#xff09;#xff1a;指web页面中供人们浏览的数据始终是不变。
动态web资源#xff1a;指web页面中供人们浏览的数据是由程序产生的#xff0c;不同时间点访问web页面看到的内容各不相同。
静态web资源开发技术#xff1…JavaWeb
静态web资源如html 页面指web页面中供人们浏览的数据始终是不变。
动态web资源指web页面中供人们浏览的数据是由程序产生的不同时间点访问web页面看到的内容各不相同。
静态web资源开发技术HTML、CSS、JavaScript。
动态web资源开发技术JSP/Servlet、ASP、PHP等。在Java中动态web资源开发技术统称为Java Web。 Web服务器
技术讲解
ASP微软国内最早流行的是ASP在HTML中嵌入了VB的脚本ASPCOM维护成本高。
PHP开发速度很快功能很强大跨平台代码简单但是无法承载大访问量的情况局限性。
JSP/Servletsun公司主推的B/S架构基于java语言可以承载三高问题高并发高可用高性能。
B/S浏览器和服务器C/S客户端和服务器。
Web服务器
服务器用来处理用户的一些请求响应给用户一些数据。
IIS微软的主要用于ASPWindows中自带的服务器。
**Tomcat**Tomcat是Apache 软件基金会Apache Software Foundation的Jakarta 项目中的一个核心项目最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定而且免费因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器属于轻量级应用服务器在中小型系统和并发访问用户不是很多的场合下被普遍使用是开发和调试JSP 程序的首选。对于一个JavWeb初学者来说是最好的选择。
Tomcat 实际上运行JSP 页面和Servlet。
Tomcat
安装Tomcat官网下载(tomcat.apache.org/)压缩包解压至指定目…
在bin目录下点击startup.bat启动在浏览器网址栏输入localhost:8080测试。
网站是如何进行访问的
输入用户名回车检查本机的C:\Windows\System32\drivers\etc\hosts配置文件有没有这个域名的映射 有就直接返回对应的ip地址没有就去DNS全世界的域名管理服务器上寻找找到就返回
Http
Http超文本传输协议http是一个简单的请求-响应协议它通常运行在TCP之上。默认端口80
Https443
Http1.0客户端可以与web服务器连接后只能获得一个web资源断开连接。Http1.1客户端可以与web服务器连接后可以获得多个web资源。
Http请求
客户端----发请求----服务器 Http响应
服务器----发请求----客户端 请求方式
get请求能够携带的参数比较少大小有限制会在浏览器地址栏显示参数的内容不安全但是高效。
post请求能够携带的参数没有限制大小没有限制不会再浏览器地址栏显示参数的内容安全但不高效。
响应状态码
200请求响应成功
3**请求重定向
404找不到资源
500服务器代码错误502网关错误 Maven
Maven项目架构管理工具自动导入jar包约定大于配置。
下载Maven后解压配置环境变量将bin目录的路径配置到path中在cmd中输入mvn-version查看是否配置成功
在conf目录下setting的 下配置本地仓库
D:\Environments\apache-maven-3.6.3\maven-repo 在conf目录下setting的 中配置阿里云的镜像 pom.xml
pom.xmlmaven的核心配置文件
由于maven的约定大于配置我们之后写的配置文件可能无法导出或者无法生效就需要在maven配置下面配置resouce。 Servlet
servlet就是sun公司开发动态web的一门技术sun公司在API中提供了一个接口叫Servlet如果需要开发一个Servlet程序需要编写一个类去实现Servlet接口再把开发好的java类部署到web服务器中。
HelloServlet
sun公司有两个Servlet接口的默认实现类HttpServlet和GenericServlet 构建一个maven项目删除里面的src项目以后就直接新建model这个空的工程就是Maven的主工程。 关于Maven父子工程的理解
父项目中会有 modulesmoduleservlet-01/module
/modules子项目中有 parentartifactIdjavaweb-02-servlet/artifactIdgroupIdcom.zr/groupIdversion1.0-SNAPSHOT/version/parent3.Maven环境优化修改web.xml为最新的将Maven的结构搭建完整。
4.编写一个普通类实现Servlet接口继承HttpServlet。
public class HelloServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//ServletOutputStream outputStream resp.getOutputStream();PrintWriter writer resp.getWriter(); //响应流writer.println(Hello Servlet);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}5.编写Servlet的映射我们写的是java程序但是要通过浏览器访问而浏览器要连接web服务器所以我们要在web服务器注册我们写的Servlet还需要给它一个浏览器能够访问的路径。
!--注册Servlet--
servletservlet-namehello/servlet-nameservlet-classcom.zr.servlet.HelloServlet/servlet-class
/servlet
!--Servlet请求路径--
servlet-mappingservlet-namehello/servlet-nameurl-pattern/hello/url-pattern
/servlet-mapping6.配置Tomcat
7.启动测试 Servlet原理
Servlet是由Web服务器调用web服务器收到请求后会进行以下操作 Mapping 一个Servlet可以指定一个映射路径 servlet-mappingservlet-namehello/servlet-nameurl-pattern/hello/url-pattern
/servlet-mapping一个Servlet可以指定多个映射路径
servlet-mappingservlet-namehello/servlet-nameurl-pattern/hello/url-pattern
/servlet-mappingservlet-mappingservlet-namehello/servlet-nameurl-pattern/hello2/url-pattern
/servlet-mappingservlet-mappingservlet-namehello/servlet-nameurl-pattern/hello3/url-pattern
/servlet-mapping3.一个Servlet可以指定通用映射路径
servlet-mappingservlet-namehello/servlet-nameurl-pattern/hello/*/url-pattern
/servlet-mapping
4.默认请求
servlet-mappingservlet-namehello/servlet-nameurl-pattern/*/url-pattern
/servlet-mapping5.一个Servlet可以指定一些后缀或者前缀映射路径
!--*前面不能加任何映射的路径--
servlet-mappingservlet-namehello/servlet-nameurl-pattern*.zzr/url-pattern
/servlet-mapping优先级问题
指定了固有的映射路径优先级最高找不到就会走默认的处理请求。
处理404页面
!--404--
servletservlet-nameerror/servlet-nameservlet-classcom.zr.servlet.ErrorServlet/servlet-class
/servlet
servlet-mappingservlet-nameerror/servlet-nameurl-pattern/*/url-pattern
/servlet-mappingServletContext
web容器在启动的时候它会为每一个web程序都创建一个ServletContext对象它代表了当前的 web应用。 共享数据 我在这个Servle中保存的数据可以在另外一个Servle中拿到
public class HelloServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(hello);//this.getInitParameter(); 初始化参数//this.getServletConfig(); Servlet的配置//this.getServletContext(); Servlet上下文ServletContext context this.getServletContext();String username 周周;context.setAttribute(username,username);//将一个数据保存在ServletContext中}
}public class GetServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context this.getServletContext();String username (String) context.getAttribute(username);resp.setCharacterEncoding(utf-8);resp.setContentType(text/html);resp.getWriter().println(名字username);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
}servletservlet-namehello/servlet-nameservlet-classcom.zr.servlet.HelloServlet/servlet-class/servletservlet-mappingservlet-namehello/servlet-nameurl-pattern/hello/url-pattern/servlet-mappingservletservlet-nameget/servlet-nameservlet-classcom.zr.servlet.GetServlet/servlet-class
/servlet
servlet-mappingservlet-nameget/servlet-nameurl-pattern/get/url-pattern
/servlet-mapping测试访问结果 1.获取初始化参数
!--配置一个web应用的初始化参数--
context-paramparam-nameurl/param-nameparam-valuejdbc:mysql://localhost:3306/mybaits/param-value
/context-paramservletservlet-namegp/servlet-nameservlet-classcom.zr.servlet.ServletDemo03/servlet-class/servletservlet-mappingservlet-namegp/servlet-nameurl-pattern/gp/url-pattern/servlet-mappingpublic class ServletDemo03 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context this.getServletContext();String url context.getInitParameter(url);resp.getWriter().println(url);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}2.请求转发
public class ServletDemo04 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context this.getServletContext();RequestDispatcher requestDispatcher context.getRequestDispatcher(/gp);//转发的请求路径requestDispatcher.forward(req,resp);//转发}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}servletservlet-namesd4/servlet-nameservlet-classcom.zr.servlet.ServletDemo04/servlet-class
/servlet
servlet-mappingservlet-namesd4/servlet-nameurl-pattern/sd4/url-pattern
/servlet-mapping读取资源文件
properties
在Java目录下新建propreties需要在pom.xml下配置resources在resources目录下新建properties
发现都被打包到了target下的class目录下我们称这个路径为类路径classpath。 public class ServletDemo05 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {InputStream is this.getServletContext().getResourceAsStream(/WEB-INF/classes/db.properties);Properties properties new Properties();properties.load(is);String username properties.getProperty(username);String password properties.getProperty(password);resp.getWriter().println(username:username);resp.getWriter().println(password:password);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}servletservlet-namesd5/servlet-nameservlet-classcom.zr.servlet.ServletDemo05/servlet-class
/servlet
servlet-mappingservlet-namesd5/servlet-nameurl-pattern/sd5/url-pattern
/servlet-mappingbuildresourcesresourcedirectorysrc/main/resources/directoryexcludesexclude**/*.properties/excludeexclude**/*.xml/exclude/excludesfilteringtrue/filtering/resourceresourcedirectorysrc/main/java/directoryincludesinclude**/*.properties/includeinclude**/*.xml/include/includesfilteringtrue/filtering/resource/resources
/build//文件 db.properties
usernameroot
password123456HttpServletResponse
web服务器接收到客户端的http请求针对这个请求分别创建一个代表请求的HttpServletRequest对象代表响应一个HttpServletResponse。
如果要获取客户端请求过来的参数HttpServletRequest如果要给客户端响应一些信息HttpServletResponse 简单分类
负责向浏览器发送数据的方法
ServletOutputStream getOutputStream() throws IOException;PrintWriter getWriter() throws IOException;负责向浏览器发送响应头的方法
void setCharacterEncoding(String var1);void setContentLength(int var1);void setContentLengthLong(long var1);void setContentType(String var1);void setDateHeader(String var1, long var2);void addDateHeader(String var1, long var2);void setHeader(String var1, String var2);void addHeader(String var1, String var2);void setIntHeader(String var1, int var2);void addIntHeader(String var1, int var2);响应的状态码
int SC_OK 200;
...
int SC_MULTIPLE_CHOICES 300;
int SC_BAD_REQUEST 400;
int SC_UNAUTHORIZED 401;
int SC_PAYMENT_REQUIRED 402;
int SC_FORBIDDEN 403;
int SC_NOT_FOUND 404;
...
int SC_INTERNAL_SERVER_ERROR 500;
int SC_BAD_GATEWAY 502;下载文件 向浏览器输出消息 下载文件 获取下载文件的路径下载的文件名让浏览器支持下载我们需要的东西获取下载文件的输入流创建缓冲区获得OutputStream对象将FileOutputStream流写入到buffer缓冲区将OutputStream缓冲区中的对象输出到客户端 public class FileServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1. 获取下载文件的路径String realPath D:\\IDEACode\\javaweb-02-servlet\\response\\src\\main\\resources\\1.PNG;System.out.println(下载文件的路径realPath);//2. 下载的文件名String fileName realPath.substring(realPath.lastIndexOf(\\) 1);//3. 让浏览器支持下载我们需要的东西resp.setHeader(Content-Disposition,attachment;filenamefileName);//4. 获取下载文件的输入流FileInputStream in new FileInputStream(realPath);//5. 创建缓冲区int len 0;byte[] buffer new byte[1024];//6. 获得OutputStream对象ServletOutputStream out resp.getOutputStream();//7. 将FileOutputStream流写入到buffer缓冲区 将OutputStream缓冲区中的对象输出到客户端while ((lenin.read(buffer))0){out.write(buffer,0,len);}in.close();out.close();}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}验证码功能
如何生成验证码
前端后端需要用Java的图片类生成一个图片
public class ImageServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//让浏览器5秒刷新一次resp.setHeader(refresh,5);//创建图片BufferedImage image new BufferedImage(300,60,BufferedImage.TYPE_INT_RGB);//得到图片Graphics g image.getGraphics(); //笔//设置图片的背景颜色g.setColor(Color.green);g.fillRect(0,0,300,60);//给图片写数据g.setColor(Color.magenta);g.setFont(new Font(null,Font.BOLD,70));g.drawString(makeNum(),0,60);//浏览器以图片的形式打开resp.setContentType(image/png);//网站存在缓存。不让浏览器缓存resp.setDateHeader(expires,-1);resp.setHeader(Cache-Control,no-cache);resp.setHeader(Pragma,no-cache);//把图片显示出来boolean write ImageIO.write(image,jpg,resp.getOutputStream());}//生成随机数private String makeNum(){Random random new Random();String num random.nextInt(9999999) ;StringBuffer sb new StringBuffer();for (int i 0; i 7-num.length(); i) {sb.append(0);}num sb.toString()num;return num;}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}!--注册Servlet--
servletservlet-nameimage/servlet-nameservlet-classcom.zr.servlet.ImageServlet/servlet-class
/servlet
!--Servlet请求路径--
servlet-mappingservlet-nameimage/servlet-nameurl-pattern/image/url-pattern
/servlet-mapping实现重定向
void sendRedirect(String var1) throws IOException;//重定向public class RedirectServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {/*resp.setHeader(Location,/r/image);resp.setStatus(302);*/resp.sendRedirect(/r/image);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}配置web.xml测试
重定向和转发的区别
相同点页面都会发生跳转
不同点
请求转发的时候url不会改变 307重定向的时候url地址栏会发生变化 302
index.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
html
body
h2Hello World!/h2
%--提交的路径需要寻找到当前项目的路径--%
form action${pageContext.request.contextPath}/login methodpost用户名input typetext nameusernamebr密码 input typepassword namepasswordbrinput typesubmit/form
/body
/htmlsuccess.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleTitle/title
/head
body
h1success/h1
/body
/htmlpublic class RequestTest extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(进入这个请求了);String username req.getParameter(username);String password req.getParameter(password);System.out.println(username:username);System.out.println(password:password);resp.sendRedirect(/r/success.jsp);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}!--注册Servlet--
servletservlet-nametest/servlet-nameservlet-classcom.zr.servlet.RequestTest/servlet-class
/servlet
!--Servlet请求路径--
servlet-mappingservlet-nametest/servlet-nameurl-pattern/login/url-pattern
/servlet-mappingHttpServletRequest
HttpServletRequest代表客户端的请求用户通过http协议访问服务器http请求中的所有的信息会被封装到HttpServletRequest通过这个HttpServletRequest的方法获得客户端的所有信息。 public class LoginServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding(utf-8);resp.setCharacterEncoding(utf-8);String username req.getParameter(username);String password req.getParameter(password);String[] hobbys req.getParameterValues(hobbys);System.out.println();System.out.println(username);System.out.println(password);System.out.println(Arrays.toString(hobbys));//请求转发//这里的/代表当前的web应用req.getRequestDispatcher(/success.jsp).forward(req,resp);}
}index.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitle登录/title
/head
body
h1登录/h1
div styletext-align: centerform action${pageContext.request.contextPath}/login methodpost用户名input typetext nameusernamebr密码input typepassword namepasswordbr爱好input typecheckbox namehobbys value唱歌唱歌input typecheckbox namehobbys value女孩女孩input typecheckbox namehobbys value写字写字input typecheckbox namehobbys value代码代码brinput typesubmit/form/div
/body
/htmlsuccess.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleTitle/title
/head
body
h1登录成功/h1
/body
/htmlweb.xml
servletservlet-nameLoginServlet/servlet-nameservlet-classcom.zr.servlet.LoginServlet/servlet-class
/servlet
servlet-mappingservlet-nameLoginServlet/servlet-nameurl-pattern/login/url-pattern
/servlet-mappingCookie, Session
cookie
客户端技术响应请求
session
服务器技术可以保存用户的会话信息我们可以把信息或数据放在session中
常见应用网站登录一次后下次可以直接进入。
Cookie
从请求中拿到cookie信息
服务器响应给客户端cookie //保存用户上一次访问的时间
public class CookieDemo01 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决中文乱码req.setCharacterEncoding(utf-8);resp.setCharacterEncoding(utf-8);resp.setContentType(text/html;charsetutf-8);PrintWriter out resp.getWriter();//cookie服务器端从客户端获取Cookie[] cookies req.getCookies();//返回数组cookie可能存在多个//判断cookie是否存在if (cookies!null){//如果存在out.write(你上一次访问的时间是);for (int i 0; i cookies.length; i) {Cookie cookie cookies[i];//获取cookie的名字if (cookie.getName().equals(lastlogintime)){//获取cookie中的值long lastlogintime Long.parseLong(cookie.getValue());Date date new Date(lastlogintime);out.write(date.toLocaleString());}}}else{out.write(这是你第一次访问本站);}//服务器给客户端发一个cookieCookie cookie new Cookie(lastlogintime, System.currentTimeMillis());//有效期为1天cookie.setMaxAge(24*60*60);resp.addCookie(cookie);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}web.xml
servletservlet-nameCookieDemo01/servlet-nameservlet-classcom.zr.servlet.CookieDemo01/servlet-class
/servletservlet-mappingservlet-nameCookieDemo01/servlet-nameurl-pattern/c1/url-pattern
/servlet-mappingcookie一般会保存在本地的用户目录下appdata
一个cookie只能保存一个信息一个web站点可以给浏览器发送多个cookie最多存放20个cookiecookie的大小有限制4kbcookie浏览器上限300个
删除cookie
不设置有效期关闭浏览器自动失效设置有效期时间为0
Session
session 服务器会给每一个用户浏览器创建一个session对象 一个session独占一个浏览器只要浏览器没有关闭这个session就存在 用户登录之后整个网站都可以访问--保存用户的信息
session和cookie的区别
cookie是把用户的数据写给用户的浏览器浏览器保存可以保存多个session是把数据写到用户独占的session中服务器保存保存重要的信息减少资源的浪费session对象由服务器创建
session保存数据
package com.zr.pojo;public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name name;this.age age;}public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}Overridepublic String toString() {return Person{ name name \ , age age };}
}public class SessionDemo01 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决中文乱码req.setCharacterEncoding(utf-8);resp.setCharacterEncoding(utf-8);resp.setContentType(text/html;charsetutf-8);//得到sessionHttpSession session req.getSession();//给session存东西session.setAttribute(name,new Person(周周,1));//获得session的idString id session.getId();//判断session是不是新创建的if(session.isNew()){resp.getWriter().write(session创建成功ID id);}else {resp.getWriter().write(session已经存在ID id);}}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}public class SessionDemo02 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决中文乱码req.setCharacterEncoding(utf-8);resp.setCharacterEncoding(utf-8);resp.setContentType(text/html;charsetutf-8);//得到session的数据HttpSession session req.getSession();Person person (Person) session.getAttribute(name);System.out.println(person);}Overridejavaprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}servletservlet-nameSessionDemo01/servlet-nameservlet-classcom.zr.servlet.SessionDemo01/servlet-class
/servlet
servlet-mappingservlet-nameSessionDemo01/servlet-nameurl-pattern/s1/url-pattern
/servlet-mappingservletservlet-nameSessionDemo02/servlet-nameservlet-classcom.zr.servlet.SessionDemo02/servlet-class
/servlet
servlet-mappingservlet-nameSessionDemo02/servlet-nameurl-pattern/s2/url-pattern
/servlet-mappingsession手动注销
public class SessionDemo03 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session req.getSession();session.removeAttribute(name);//手动注销sessionsession.invalidate();}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}JSP
什么是JSP
jspjava server pagesJava服务器端界面和servlet一样用于开发动态web技术。
特点
写jsp就像写html区别 html只给用户提供静态的数据jsp页面可以嵌入Java代码为用户提供动态数据 JavaBean
实体类
JavaBean有特定的写法
必须要有一个无参构造属性必须私有化必须有对应的get/set方法
一般用来和数据库的字段做映射 ORM
ORM对象关系映射
表---类字段---属性行记录---对象 建立数据库相应的字段后创建java实体类
package com.zr.pojo;
//实体类 一般是和数据库中的表结构一一对应的
public class People {private int id;private String name;private int age;private String address;public People() {}public People(int id, String name, int age, String address) {this.id id;this.name name;this.age age;this.address address;}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 int getAge() {return age;}public void setAge(int age) {this.age age;}public String getAddress() {return address;}public void setAddress(String address) {this.address address;}Overridepublic String toString() {return People{ id id , name name \ , age age , address address \ };}
}
% page importcom.zr.pojo.People %%--Created by IntelliJ IDEA.User: zrDate: 2020/10/11Time: 22:08To change this template use File | Settings | File Templates.
--%
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleTitle/title
/head
body
%
// People people new People();
// people.setAddress();
// people.setId();
// people.setAge();
// people.setName();//和下面的等价
%
jsp:useBean idpeople classcom.zr.pojo.People scopepage/
jsp:setProperty namepeople propertyaddress value武汉/
jsp:setProperty namepeople propertyid value1/
jsp:setProperty namepeople propertyage value18/
jsp:setProperty namepeople propertyname value小周/姓名jsp:getProperty namepeople propertyname/
idjsp:getProperty namepeople propertyid/
年龄jsp:getProperty namepeople propertyage/
地址jsp:getProperty namepeople propertyaddress/
/body
/htmlMVC三层架构
MVCmodelviewcontroller 模型视图控制器
Model
业务处理业务逻辑Service数据持久层CRUDDao
View
展示数据提供操作发起Servlet请求aformimg ....
ControllerServlet
接收请求req请求参数session信息...交给业务层处理相应的代码控制视图的跳转
工作流程
1.浏览器通过视图向控制器发出请求
2.控制器接收到请求后对数据进行封装选择模型进行业务逻辑处理
3.随后控制器将模型处理结果转发到视图或下一个控制器
4.在视图层合并数据和界面模板生成HTML并做出最终响应。 过滤器
Filter过滤器用来过滤网站的数据
处理中文乱码登录验证... Filter 功能 1、⽤来拦截传⼊的请求和传出的响应。 2、修改或以某种⽅式处理正在客户端和服务端之间交换的数据流。 如何使⽤
与使⽤ Servlet 类似Filter 是 Java WEB 提供的⼀个接⼝开发者只需要⾃定义⼀个类并且实现该接⼝ 即可。
Filter 的⽣命周期 当 Tomcat 启动时通过反射机制调⽤ Filter 的⽆参构造函数创建实例化对象同时调⽤ init ⽅法实现 初始化doFilter ⽅法调⽤多次当 Tomcat 服务关闭的时候调⽤ destory 来销毁 Filter 对象。 ⽆参构造函数只调⽤⼀次当 Tomcat 启动时调⽤Filter ⼀定要进⾏配置 init ⽅法只调⽤⼀次当 Filter 的实例化对象创建完成之后调⽤ doFilter调⽤多次访问 Filter 的业务逻辑都写在 Filter 中 destory只调⽤⼀次Tomcat 关闭时调⽤。 同时配置多个 FilterFilter 的调⽤顺序是由 web.xml 中的配置顺序来决定的写在上⾯的配置先调 ⽤因为 web.xml 是从上到下顺序读取的。
实际开发中 Filter 的使⽤场景 1、统⼀处理中⽂乱码。 2、屏蔽敏感词。 监听器
监听器GUI编程中经常使用 JDBC
Java连接数据库导入JDBC依赖mysql-connector-javaIDEA中连接数据库
public class TestJdbc {public static void main(String[] args) throws ClassNotFoundException, SQLException {//配置信息String url jdbc:mysql://localhost:3306/jdbc?useUnicodetruecharacterEncodingutf8;String username root;String password 123456;//加载驱动Class.forName(com.mysql.jdbc.Driver);//连接数据库Connection connection DriverManager.getConnection(url, username, password);//向数据库发送sql的对象Statement statement connection.createStatement();//编写sqlString sql select * from users;//执行查询sql返回一个结果集ResultSet rs statement.executeQuery(sql);while (rs.next()){System.out.println(idrs.getObject(id));System.out.println(namers.getObject(name));System.out.println(passwordrs.getObject(password));System.out.println(emailrs.getObject(email));System.out.println(birthdayrs.getObject(birthday));}//关闭连接rs.close();statement.close();connection.commit();}
}预编译sql
Junit单元测试
依赖
!--单元测试--
dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope
/dependency简单使用
Test注解只在方法上有效只要加了这个注解的方法就可以直接运行.
public class TestJdbc3 {Testpublic void test(){System.out.println(Hello);}
}转账事务创建account表字段idnamemoney使用单元测试
public class TestJdbc3 {Testpublic void test() {//配置信息String url jdbc:mysql://localhost:3306/jdbc?useUnicodetruecharacterEncodingutf8;String username root;String password 123456;Connection connectionnull;//加载驱动try {Class.forName(com.mysql.jdbc.Driver);//连接数据库connection DriverManager.getConnection(url, username, password);//通知数据库开启事务connection.setAutoCommit(false);String sql1 update account set moneymoney-100 where nameA;connection.prepareStatement(sql1).executeUpdate();//制造错误int i1/0;String sql2 update account set moneymoney100 where nameB;connection.prepareStatement(sql2).executeUpdate();connection.commit();//以上sql都执行成功才提交System.out.println(提交成功);} catch (Exception e) {try {//如果出现异常就回滚事务connection.rollback();System.out.println(转账失败);} catch (SQLException throwables) {throwables.printStackTrace();}e.printStackTrace();}finally {try {connection.close();} catch (SQLException throwables) {throwables.printStackTrace();}}}
}