32.安全开辟-JavaEE应用&Servlet路由技术&JDBC&Mybatis数据库&生命周期 ...

打印 上一主题 下一主题

主题 907|帖子 907|积分 2721

时间轴:


32天主要学习内容:
1、JavaEE-HTTP-Servlet技术
2、JavaEE-数据库-JDBC&Mybatis
java技术使用历史(2023 ):


JavaEE-HTTP-Servlet&路由&周期:

java学习范围:     


JavaEE-HTTP-Servlet&路由&周期:
参考:https://blog.csdn.net/qq_52173163/article/details/121110753

IDEA的安装破解(参考文章):http://t.csdnimg.cn/90f6s
对于idea的创建项目标使用:


tomcat安装教程:
 Tomcat安装和配置(超详细)_tomcat安装及配置教程-CSDN博客
tomcat在创建后使用:
idea配置tomcat环境(保姆级教程)_idea怎么导入tomcat运行环境-CSDN博客
idea创建后的文件先容:

  1. package com.example.demo1;
  2. import java.io.*;
  3. import javax.servlet.http.*;
  4. import javax.servlet.annotation.*;
  5. @WebServlet(name = "helloServlet", value = "/hello-servlet")
  6. public class HelloServlet extends HttpServlet {
  7.     private String message;
  8.     public void init() {
  9.         message = "Hello World!";
  10.     }
  11.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
  12.         response.setContentType("text/html");
  13.         // Hello
  14.         PrintWriter out = response.getWriter();
  15.         out.println("<html><body>");
  16.         out.println("<h1>" + message + "</h1>");
  17.         out.println("</body></html>");
  18.     }
  19.     public void destroy() {
  20.     }
  21. }
复制代码
1.此中java的主要内容都放在main目次中。
2.子目次com.example.demo2为创建时拥有的 。
3.运利用用的tomcat为本身下载在当地的。
tomcat的下载:
在发送的32天压缩包中自行下载。

Servlet创建和使用



Servlet的利用使用步骤如下:

  1. public class IndexServlet extends HttpServlet {
  2.     @Override
  3.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  4.         System.out.println("--------------doGet");
  5. //        String id =req.getParameter("id");
  6. //        resp.setContentType("utf-8");
  7. //        resp.setContentType("text/html");
  8. //        PrintWriter out = resp.getWriter();
  9. //        out.println("这是GET请求的数据:");
  10. //        out.println("id:"+id+"<br>");
  11. //        out.flush();
  12. //        out.close();
  13.     }
  14. }
复制代码

1.使用doGet方式举行传输
2.运利用用web.xml举行(路由配置和内置配置)
3.public class IndexServlet extends HttpServlet(继承关系继承HttpServlet)
4.此中使用的HttpServlet来自于外部库的maven里的javax.servlet
路由配置:

如下为web.xml的配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5.          version="4.0">
  6.     <servlet>
  7.         <servlet-name>IndexServlet</servlet-name>
  8.         <servlet-class>com.example.servletdemo.IndexServlet</servlet-class>
  9.     </servlet>
  10.     <servlet-mapping>
  11.         <servlet-name>IndexServlet</servlet-name>
  12.         <url-pattern>/index</url-pattern>
  13.     </servlet-mapping>
  14. </web-app>
复制代码

 此中的<servlet-class>的指向必须为完整路径(可以鼠标右键检察完整路径)。
<servlet-mapping>为访问路由,当访问/index时可以举行访问到文件IndexServlet。
如图为tomcat运行配置:



在部署中没有artifacts时:
Idea配置项目标tomcat时候没有Artifacts的最全办理办法_idea配置tomcat没有artifact-CSDN博客
此中可以举行运行配置url的修改(在部署栏目中举行修改)。
在着实不会的时候会写时候,可以使用fix小工具。
根据逻辑访问:http://localhost:8080/demo2_war/index
会在idea酿成提示栏中表现-------doGet
如图:



如安在网页上回显?

必要在网页上使用到


  1. public class IndexServlet extends HttpServlet {
  2.     @Override
  3.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  4.         String name = req.getParameter("name");
  5.         PrintWriter out = resp.getWriter();
  6.         out.println("name" + name);
  7.         System.out.println("--------------doGet");
  8.     }
复制代码
对上述代码举行分析:
String name = request.getParameter("name");理解为写一个字符串理解为name请求一个值name
Print Writer out=response.getWriter();理解为返回回显输出数据
out.printIn("name:"+name);理解为打印数据
get请求回显做测试:

访问网址:http://localhost:8080/demo2_war/index?name=1
会在下方表现idea的服务器表现   1  。

(get和post使用原理雷同,若上面改为req,那下方使用也用req)
对于post请求可以

post代码:

  1.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  2.         String name = req.getParameter("name");
  3.         resp.setContentType("utf-8");
  4.         resp.setContentType("text/html");
  5.         PrintWriter out = resp.getWriter();
  6.         out.println("这是post提交的数据");
  7.         out.println(name);
  8.         out.flush();
  9.         out.close();
  10.         System.out.println("--------------doPost");
复制代码

1.使用firefox破解版(Hackbar)
在2023年第一天的解压包中


2.使用postman
底子入家世十天说过

内置测试:

可以在代码前面加入@WebServlet('/new')

  1. @WebServlet("/new")
  2. public class NewServlet extends HttpServlet {
  3.     @Override
  4.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  5.         String id=req.getParameter("id");
  6.         resp.setContentType("utf-8");
  7.         resp.setContentType("text/html");
  8.         PrintWriter out = resp.getWriter();
  9.         out.println("<hr>id:"+id+"<hr>");
  10.         out.flush();
  11.         out.close();
  12.         super.doGet(req, resp);
  13.     }
  14. }
复制代码
除了doget,dopost还有init,service两个,destroy。

init代码为:

  1.     @Override
  2.     public void init(ServletConfig config) throws ServletException {
  3.         System.out.println("--------------init");
  4. //        try {
  5. //            Class.forName("com.example.servletdemo.NewsServlet");
  6. //
  7. //        } catch (ClassNotFoundException e) {
  8. //            throw new RuntimeException(e);
  9. //        }
  10.     }
复制代码

 service代码为:

  1.     @Override
  2.     protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  3.         System.out.println("--------------http service");
  4.         super.service(req, resp);
  5.     }
  6.     @Override
  7.     public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
  8.         System.out.println("--------------Servlet service");
  9.         super.service(req, res);
  10.     }
复制代码


destroy代码:

  1. @Override
  2.     public void destroy() {
  3.         System.out.println("--------------destroy");
  4.         super.destroy();
  5.     }
复制代码
  

他们执行的规律为:

在访问http://localhost:8080/demo2_war/index?id=1时
init只会被执行一次之后不会再执行
destroy会在末告终束服务器的时候执行
service会执行多次
留意:
service执行在doget,dopost之上
先执行Servlet service后执行http service


丰富doget,dopost代码:
  1.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  2.         String name = req.getParameter("name");
  3.         resp.setContentType("utf-8");
  4.         resp.setContentType("text/html");
  5.         PrintWriter out = resp.getWriter();
  6.         out.println("这是post提交的数据");
  7.         out.println(name);
  8.         out.flush();
  9.         out.close();
  10.         System.out.println("--------------doPost");
复制代码

对代码举行解析:
String name = req.getParameter("name");理解为界说字符串name,给予给定值name。
resp.setContentType("utf-8");编码方式设置为utf-8
resp.setContentType("text/html");回显方式为text/html
PrintWriter out = resp.getWriter();数据输出
out.printIn("这是post提交的数据");页面上表现这是post提交的数据。
out.printin(name);页面上输出(当给予name值时)
out.flush();页面革新
out.close();关闭
System.out.printIn("-------------doPsot")体系输出----------dopost
效果如下:



同理除了在web.xml里面设置,也可以在代码前面加上@WebServlet('/a')举行访问,效果一样。

JavaEE-数据库-JDBC-Mybatis-库(Hibernate):

三种数据库的对比,使用,分析:
http://t.csdnimg.cn/Cs6zH
JDBC的使用:
https://www.jianshu.com/p/ed1a59750127
JDBC由于是java官方自带,以是不必要api接口,但必要数据库驱动jar文件
jar文件下载:
https://mvnrepository.com/
下载5.1.47.jar。之后在demo1下创建lib放入此文件。之后右键此文件然后选择为添加为库
接下来为数据库连接利用:


代码解析在JDBC的使用文章有。(也就是照着谁人写的)
使用while举行循环遍历,提取出数据库中的值:





总体代码为: (留意有时候是subheading)
  1. package com.example.demo1;
  2. import java.sql.*;
  3. public class NewsServlet {
  4.     public static void main(String[] args) throws ClassNotFoundException, SQLException {
  5.         Class.forName("com.mysql.jdbc.Driver");
  6.         String url = "jdbc:mysql://localhost:3306/demo1";
  7.         Connection connection = DriverManager.getConnection(url, "root", "root");
  8.         System.out.println(connection);
  9.         String sql="select * from news";
  10.         //危险写法
  11.         //String vulsql="select * from news where id="+id;
  12.         //预编译写法
  13.         String safesql="select * from news where id=?";
  14.         System.out.println(sql);
  15.         Statement statement= connection.createStatement();
  16.         ResultSet resultSet = statement.executeQuery(sql);
  17.         while (resultSet.next()){
  18.             int id = resultSet.getInt("id");
  19.             String page_title = resultSet.getString("page_title");
  20.             String heading = resultSet.getString("heading");
  21.             String subheading = resultSet.getString("suheading");
  22.             String content = resultSet.getString("content");
  23.             String img = resultSet.getString("img");
  24.             System.out.println(id+"|"+page_title+"|"+heading+"|"+subheading+"|"+content+"|"+img);
  25.         }
  26.     }
  27. }
复制代码
伤害写法造成效果:

  1. //危险写法
  2.         String vulsql="select * from news where id="+id;
复制代码
使用union select会造成注入
预编译参考文章:
https://mbd.baidu.com/ma/s/tXa5ag1N
预编译简明说就是不会改变原有的逻辑


 总结遇到的问题:
main函数使用和python的main一样,和前文提到的init一样。就是使用前会被自动调用。
req的使用(必要调用service等)
req的使用必要httpservlet的调用
但单独继承调用httpservlet会造成错误:

 此中对于idea插件(plugins)安装:


推荐文章:
 http://t.csdnimg.cn/ox6ko
http://t.csdnimg.cn/4wfAr
以上为作者安装文件。
以上由番薯小羊卷~,李豆豆喵共同完成。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表