学JavaWeb的有必要学PythonWeb么?目前市场开发的python更多是测试和自动化岗位吧?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学JavaWeb的有必要学PythonWeb么?目前市场开发的python更多是测试和自动化岗位吧?相关的知识,希望对你有一定的参考价值。

web市场中,大型的项目被java占领,小型的有php,python如何在web市场分一杯羹?优势劣势在哪?python在其他方面,比如爬虫啊,数据挖掘等方面的就业前景和学的要求怎么样?麻烦解答一下,谢谢

这个不是有没有必要的问题, 不论用什么语言都可以开发出web系统, python, php, java都行,如果单就从实现功能的角度来讲都没有区别, 都能实现, 但是要考虑到开发效率, java是完全没法和python比的, 比如一个小的系统, 用java开发,你要去打开ide,配置maven, 下载spring等等框架配置好开发环境,编写代码然后编译成class之后再运行,这些其实可能一个python文件都能搞定的事情,等到你把开发环境搭建好,python都已经开发完了。 当然这里只是拿了一个小系统做例子, 大系统也是一样的, 这里只是讨论了一个开发效率问题。 如果单就从开发功能上来讲, 用javaweb开发出来之后如果你不考虑以后想提升开发效率的话,当然不用去学习python web开发。

目前市场上python的职位远不止测试和自动化岗位, 你如果去做云存储之类的就知道openstack实际上就是用python开发的, 很多只要涉及到这块的都会招python开发。 实际上很多web项目立项之初用java立项的原因都是因为考虑到java人才容易招到而不只是java本身有多大的优势。 实际上很多创业公司开始逐步转向用开发效率高的python和php作为web开发。而且java在web系统方面也在逐渐被python, go 和nodejs蚕食。

python目前在python和数据处理领域几乎都是首选语言,后期随着人工智能时代的来临, 很多公司特别是小公司会急于向数据方面考虑首先第一个要解决的问题就是爬虫爬取数据, 所以数据和爬虫职位近两年应该会逐渐增多。
参考技术A 我学java-web一年了,没听说过PythonWeb,不好意思。哈哈。。
java-web常用的框架有如hibernate等等

JavaWeb学习之Servlet基础

学习笔记仅供参考,如有错误,请多指出

                                               java学习路上,与君共勉

​                                                                                                                                                                                                                                                                                                      作者:小饭


前言

原理操作来源于狂神说java的视频,所用图片来源于网络

基本上是看b站视频自己摘抄的笔记,保存到csdn是为了把笔记精华分享给大家,以及方便自己复习

1,Servlet简介

Servlet就是sun公司开发动态web的一门技术

sun在这些API中提供一个接口接口叫做:Servlet,如果开发一个Servlet程序,只需要完成两个小步骤:

  • 编写一个类,实现Servlet接口

  • 把开发好的java类部署到web服务器中

把实现了Servlet接口的程序叫做Servlet

2,HelloServlet

Servlet接口在Sun公司有两个默认的实现类:HttpServlet,GenericServlet

  1. 构建一个普通Maven项目,删掉里面的src目录,在项目中建立Module;这个空工程就是Maven的主工程

  2. 创建java web项目后,需要添加servlet,jsp依赖到pom.xml

    //servlet依赖
     <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>4.0.1</version>
        </dependency>
        
    //jsp依赖
          <dependency>
          <groupId>javax.servlet.jsp</groupId>
          <artifactId>javax.servlet.jsp-api</artifactId>
          <version>2.3.3</version>
        </dependency>
        

  3. 右击项目名,创建一个Module,创建一个web-Maven项目

  4. 关于Maven父子工程的理解:

    父项目中有

        <modules>
            <module>servlet-1</module>
        </modules>

    父项目中java子项目可以直接使用

    son extends father

  5. Maven环境优化

    1.修改web.xml为最新(在tomcat的webapp中找)

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                          http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0"
             metadata-complete="true">
    </web-app>

    2.将Maven的结构搭建完整

    新创建mian->java->resources

  6. 编写一个Servlet程序

    1.编写一个普通类(在java中创建包,一般为三级目录com.fan.HelloServlet)

    2.实现Servlet接口,直接继承HttpServlet

public class HttpServletDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("进入到doGet方法");
        resp.setContentType("text/html;charset=UTF-8");//防止中文乱码
        PrintWriter writer = resp.getWriter();
        writer.println("HelloServlet,好好学习");
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
 

编写Servlet的映射

为什么需要映射:我们写的是java程序,但是程序需要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务器中注册我们写的Servlet,还需要给她一个浏览器可以访问的路径;

 <!--注册servlet-->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.fan.Servlet.HelloServlet</servlet-class>
    </servlet>
    <!--servlet请求路径-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>    <!--映射-->
    </servlet-mapping>

配置tomcat

注意:配置项目发布的路径

启动测试

提示:如果项目出现中文乱码问题

在java文件中写入: resp.setContentType("text/html;charset=UTF-8");

3,Servlet原理

1, Servlet原理图:

2, Mapping问题

  1. 一个Servlet可以指定一个映射路径

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
  2. 一个Servlet可以指定多个映射路径

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello3</url-pattern>
    </servlet-mapping>

  3. 一个Servlet可以指定通用映射路径

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

    /*:通配符,代表输入任何东西

  4. 一个Servlet可以指定一些后缀或者前缀等等

  5. <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    //默认请求路径(不建议这种写法)
  6. <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>*.fan</url-pattern>
    </servlet-mapping>
    //可以自定义后缀实现映射,但是注意*前面不能加项目映射路径
  7. 优先级问题

    制定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求。

4,ServletContext

web容器在启动的时候,它会为每个web程序创建一个ServletContext对象。它代表了当前的web应用

共享数据:

我在这个servlet中保存的数据,可以在另外一个servlet中拿到

写两个java文件

set:

public class HelloServletDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello word");
        ServletContext context = this.getServletContext();
​
        String username = "小饭";
        context.setAttribute("username",username);//将一个数据保存在ServletContext中,名字为:username,值为:username
​
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

get:

public class GetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String username = (String) context.getAttribute("username");//强转
​
        resp.setContentType("text/html;charset=UTF-8");//防止中文乱码
        resp.getWriter().println("名字"+username);
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
​
    }
}

配置web.xml文件 注册两个servlet

 <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.fan.servlet.HelloServletDemo</servlet-class>
    </servlet>
​
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
​
    <servlet>
        <servlet-name>getc</servlet-name>
        <servlet-class>com.fan.servlet.GetServlet</servlet-class>
    </servlet>
​
    <servlet-mapping>
        <servlet-name>getc</servlet-name>
        <url-pattern>/getc</url-pattern>
    </servlet-mapping>

最后:测试访问结果

如果先访问get,页面显示名字+null,

如果先访问set,再进入get,则输出名字+set输入的内容

获取初始化参数

 <!--配置一些web应用的初始化参数 -->
    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost:3306/study?&useSSL=false&serverTimezone=UTC</param-value>
    </context-param>
public class Servlet03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String url = context.getInitParameter("url");
        resp.getWriter().println(url);
        resp.setContentType("text/html,charset=UTF-8");
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
​
    }
}
​

注册servlet(上文有教程)

请求转发

从a中向b发送指令需求c的内容,b则询问c,c把内容返回给b,a则可以在访问b中得到c的内容

public class Servlet04 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("进入了demo04");
        ServletContext context = this.getServletContext();
//        RequestDispatcher requestDispatcher = context.getRequestDispatcher("/gp");//转发的路径
//        requestDispatcher.forward(req,resp);//调用forword实现请求转发;
        context.getRequestDispatcher("/gp").forward(req,resp);
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
​
    }
}

注册servlet,然后访问servlet04,得出的结果是/gp路径的结果

读取资源文件

Properties

  • 在java目录中新建properties

  • 在resources目录下新建properties

发现都被打包到同一路径:classes,俗称这个路径为:classpath

思路:需要一个文件流:

properties类:

public class PropertiesServlet extends HttpServlet {
    public void test(){
        Properties properties = new Properties();

    }
}
public class Servlet05 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        InputStream is = this.getServletContext().getResourceAsStream("/WEB_INF/classes/db.properties");
        Properties pro = new Properties();
        pro.load(is);
        String user = pro.getProperty("username");
        String pwd = pro.getProperty("password");
        resp.getWriter().println(user+":"+pwd);
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
​
    }
}
username=root
password=123456

访问测试即可

以上是关于学JavaWeb的有必要学PythonWeb么?目前市场开发的python更多是测试和自动化岗位吧?的主要内容,如果未能解决你的问题,请参考以下文章

前端框架这么多,要学哪个?

学javaweb之前 需要先学数据库吗

学python能干嘛知乎

学javaweb之前 需要先学数据库吗

学python可以从事哪些工作?

Flask 与 Django 先学哪个呢